成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

sql反模式(一)--亂穿馬路

CNZPH / 916人閱讀

摘要:通常使用逗號分隔的列表來避免在多對多的關(guān)系中創(chuàng)建交叉表,這種設(shè)計方案定義為一種反模式,暫叫亂穿馬路問題這樣的設(shè)計似乎可行,因為沒有創(chuàng)建額外的表或者列,僅僅改變了一個字段的數(shù)據(jù)類型。以上內(nèi)容是參考反模式于寫下

【個人博客:http://www.80soho.com/?p=328】
場景

功能開發(fā)中肯定遇到過下列情況:
如下表,最初的設(shè)計產(chǎn)品(product_id)與聯(lián)系人(account_id)是一對一關(guān)系,后期產(chǎn)品經(jīng)理過來找到你說,產(chǎn)品可以對應(yīng)多個聯(lián)系人(我會拎磚頭砸過去,違法勿學(xué)),一個似乎簡單且合理的解決方案可以快速解決需求變更:account_id,由int改成使用逗號分隔的字符串(曾經(jīng)這么干過的肯定不在少數(shù)...)。



通常使用逗號分隔的列表來避免在多對多的關(guān)系中創(chuàng)建交叉表,這種設(shè)計方案定義為一種反模式,暫叫亂穿馬路

問題

這樣的設(shè)計似乎可行,因為沒有創(chuàng)建額外的表或者列,僅僅改變了一個字段的數(shù)據(jù)類型。我們來看一下這樣的設(shè)計所必須承受的各方面問題:

字段類型長度不能保證不修改

當(dāng)保存的長度超出varchar(100)時,肯定會出問題,varchar(100)不得不被修改,下次修改只是時間問題,少不了;

查詢制定聯(lián)系人的產(chǎn)品

查詢不能再使用等號,無法享受索引帶來的性能優(yōu)勢,變得異常困難,eg:

查詢制定產(chǎn)品的聯(lián)系人

聯(lián)合兩張表并使用如上的一句表達式將毀掉任何使用索引的可能,這樣的查詢必須掃描兩張表,創(chuàng)建一個交叉結(jié)果集,然后使用正則表達式遍歷每一行聯(lián)合后的數(shù)據(jù)進行匹配。

執(zhí)行聚合查詢

聚合查詢使用內(nèi)置的聚合函數(shù),這些函數(shù)是針對分組行而設(shè)計的,并不是為了逗號分隔的列表。下圖方法看上去很高明,單不清晰,且需要很長的時間來開發(fā)和調(diào)試,何況有些聚合查詢根本無法使用這些技巧來完成。

更新指定產(chǎn)品的聯(lián)系人繁瑣

無法驗證產(chǎn)品ID

選擇合適的分隔符

列表長度限制

解決方案

創(chuàng)建一張交叉表:將account_id存儲在一張多帶帶的表中,而不是存儲在產(chǎn)品表(jw_products)中,從而每個獨立的account值都可以占據(jù)一行,來實現(xiàn)產(chǎn)品和聯(lián)系人的多對多關(guān)系。




以上內(nèi)容是tonglei參考《SQL反模式》于2017-10-10寫下!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30622.html

相關(guān)文章

  • 設(shè)計模式遍---觀察者模式

    摘要:觀察者模式的別名包括發(fā)布訂閱模式模型視圖模式源監(jiān)聽器模式或從屬者模式。而觀察者一般也會做出對象的響應(yīng)觀察者模式屬于行為型模式觀察者模式主要解決的問題一方的狀態(tài)發(fā)生了變化,依賴于這一方的觀察者立即能收到通知。參考書籍設(shè)計模式版。 1 紅燈車過,人停;綠燈人過,車停。每天走在馬路上,到處可見紅綠燈指揮著我們什么時候可以過馬路,什么時候不能過馬路。無論是人還是車,都時刻關(guān)注著紅綠燈的狀態(tài),一...

    justCoding 評論0 收藏0
  • 為什么說ORM是模式

    摘要:什么是反模式我很高興地發(fā)現(xiàn)有一個相當(dāng)全面的關(guān)于反模式的列表,包括來自編程界及其之外的內(nèi)容。但是要作為一個反模式,還需要存在替代的解決辦法。 上周我在twitter上討論了ORM,在那以后有人希望我澄清一下。事實上,我曾經(jīng)寫文章討論過ORM,?但那是時的上下文是關(guān)于SQL的,我不應(yīng)該把這將兩件事情混為一談。 showImg(http://segmentfault.com/img/bVb...

    PingCAP 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<