成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

CNZPH / 951人閱讀

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

【個(gè)人博客:http://www.80soho.com/?p=328】
場(chǎng)景

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



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

問(wèn)題

這樣的設(shè)計(jì)似乎可行,因?yàn)闆](méi)有創(chuàng)建額外的表或者列,僅僅改變了一個(gè)字段的數(shù)據(jù)類型。我們來(lái)看一下這樣的設(shè)計(jì)所必須承受的各方面問(wèn)題:

字段類型長(zhǎng)度不能保證不修改

當(dāng)保存的長(zhǎng)度超出varchar(100)時(shí),肯定會(huì)出問(wèn)題,varchar(100)不得不被修改,下次修改只是時(shí)間問(wèn)題,少不了;

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

查詢不能再使用等號(hào),無(wú)法享受索引帶來(lái)的性能優(yōu)勢(shì),變得異常困難,eg:

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

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

執(zhí)行聚合查詢

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

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

無(wú)法驗(yàn)證產(chǎn)品ID

選擇合適的分隔符

列表長(zhǎng)度限制

解決方案

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




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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/30622.html

相關(guān)文章

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

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

    justCoding 評(píng)論0 收藏0
  • 為什么說(shuō)ORM是模式

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

    PingCAP 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<