国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

CNZPH / 906人閱讀

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

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

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



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

問題

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

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

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

查詢制定聯系人的產品

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

查詢制定產品的聯系人

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

執行聚合查詢

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

更新指定產品的聯系人繁瑣

無法驗證產品ID

選擇合適的分隔符

列表長度限制

解決方案

創建一張交叉表:將account_id存儲在一張多帶帶的表中,而不是存儲在產品表(jw_products)中,從而每個獨立的account值都可以占據一行,來實現產品和聯系人的多對多關系。




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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30622.html

相關文章

  • 設計模式遍---觀察者模式

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

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

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

    PingCAP 評論0 收藏0

發表評論

0條評論

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