您好,登錄后才能下訂單哦!
這篇文章主要介紹sql設(shè)計(jì)表結(jié)構(gòu)的常見問題有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
簡(jiǎn)單說就是有個(gè)表,字段經(jīng)常變動(dòng),表結(jié)構(gòu)該怎么設(shè)計(jì)?
例子:入金訂單表(已經(jīng)有29個(gè)字段)。因業(yè)務(wù)發(fā)展,入金訂單有了拓展業(yè)務(wù),有了三個(gè)拓展業(yè)務(wù),paygo入金訂單,自營(yíng)入金訂單,話費(fèi)入金訂單。paygo入金,需要增加4個(gè)字段(ADDRESS,LONGITUDE,LATITUDE,DEVICE_NO)。自營(yíng)入金拓展需要增加7個(gè)字段(COUNTER_NO,BRANCH_NO,BUSINESS_CREATE_TIME,BUSINESS_ORDER_NO,BRANCH_NAME,SERVICE_FEE,ORDER_FEE)。話費(fèi)入金訂單需要增加1個(gè)字段。
不知道我說明白這件事情了嗎?就是說,一個(gè)表經(jīng)常增加字段,增加的字段又不是所有數(shù)據(jù)都用到。
暫且稱之為key-value方法。Ext_key存儲(chǔ)增加字段名,ext_value存儲(chǔ)字段值。
這個(gè)設(shè)計(jì)帶來了很大靈活性,但是用起來,編寫sql就不容易。設(shè)計(jì)到行轉(zhuǎn)列,列轉(zhuǎn)行。維護(hù)擴(kuò)展起來不會(huì)方便。
來看下其中一個(gè)業(yè)務(wù)的sql:
如果統(tǒng)計(jì)的話會(huì)更復(fù)雜了。后期維護(hù)也會(huì)困難。
再增加一個(gè)訂單擴(kuò)展表1,把經(jīng)常變動(dòng)的擴(kuò)展字段放到擴(kuò)展表。這樣設(shè)計(jì)之后,可以想到,就變成了訂單表和擴(kuò)展表的簡(jiǎn)單join了,sql也更加清爽了。
(1)經(jīng)常改表結(jié)構(gòu),會(huì)不會(huì)鎖表?當(dāng)然會(huì)。但是目前oracle,包括mysql(5.7),增加表字段,增加字段速度很快。
(2)數(shù)據(jù)很多冗余。可以想到,paygo入金和自營(yíng)入金相互用不到對(duì)方的字段,對(duì)應(yīng)列就是空數(shù)據(jù)??諗?shù)據(jù)占用空間不大,我覺得可以忽略這個(gè)問題。
(3)假設(shè)這樣一種情況,paygo入金訂單擴(kuò)展有1千萬數(shù)據(jù),自營(yíng)入金訂單擴(kuò)展有500數(shù)據(jù),話費(fèi)入金訂單擴(kuò)展500條數(shù)據(jù),paygo訂單擴(kuò)展表顯得很冗余哦。遇到這種問題我覺得可以拆分:入金訂單擴(kuò)展表,paygo入金訂單擴(kuò)展表。這樣編寫sql的時(shí)候,也是非常簡(jiǎn)單的3表join.
以上是“sql設(shè)計(jì)表結(jié)構(gòu)的常見問題有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。