表欄位經常要增加的業務怎麼設計表結構
1.sql 改寫遇到表欄位經常要增加的業務怎麼設計表結構?
下面只是我的個人想法,歡迎拍磚討論。
2. 業務問題是什麼?
簡單說就是有個表,欄位經常變動,表結構該怎麼設計?
例子:入金訂單表(已經有 29 個欄位)。因業務發展,入金訂單有了擴充業務,有了三個擴充業務, paygo 入金訂單,自營入金訂單,話費入金訂單。 paygo 入金,需要增加 4 個欄位( ADDRESS , LONGITUDE , LATITUDE , DEVICE_NO )。自營入金擴充需要增加 7 個欄位( COUNTER_NO , BRANCH_NO , BUSINESS_CREATE_TIME , BUSINESS_ORDER_NO , BRANCH_NAME , SERVICE_FEE , ORDER_FEE )。話費入金訂單需要增加 1 個欄位。
不知道我說明白這件事情了嗎?就是說,一個表經常增加欄位,增加的欄位又不是所有資料都用到。
3. 表結構是如何設計的?
暫且稱之為 key-value 方法。 Ext_key 儲存增加欄位名, ext_value 儲存欄位值。
4.key-value 設計帶來的優點和缺點
這個設計帶來了很大靈活性,但是用起來,編寫 sql 就不容易。設計到行轉列,列轉行。維護擴充套件起來不會方便。
來看下其中一個業務的 sql :
如果統計的話會更復雜了。後期維護也會困難。
5. 另外一種表結構設計,暫且稱之為擴充套件表
再增加一個訂單擴充套件表 1 ,把經常變動的擴充套件欄位放到擴充套件表。這樣設計之後,可以想到,就變成了訂單表和擴充套件表的簡單 join 了, sql 也更加清爽了。
6. 擴充套件表有什麼缺點?
(1) 經常改表結構,會不會鎖表?當然會。但是目前 oracle ,包括 mysql ( 5.7 ),增加表欄位,增加欄位速度很快。
(2) 資料很多冗餘。可以想到, paygo 入金和自營入金相互用不到對方的欄位,對應列就是空資料。空資料佔用空間不大,我覺得可以忽略這個問題。
(3) 假設這樣一種情況, paygo 入金訂單擴充套件有 1 千萬資料,自營入金訂單擴充套件有 500 資料,話費入金訂單擴充套件 500 條資料, paygo 訂單擴充套件表顯得很冗餘哦。遇到這種問題我覺得可以拆分:入金訂單擴充套件表, paygo 入金訂單擴充套件表。這樣編寫 sql 的時候,也是非常簡單的 3 表 join.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30393770/viewspace-2648391/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle刪除表欄位和oracle表增加欄位Oracle
- MSSql得到表的結構和欄位SQL
- 獲取表的結構、欄位描述等
- PostgreSQL表增加/刪除欄位是否會重寫表SQL
- Oracle-給表增加欄位和註釋Oracle
- 將表結構轉換成實體欄位
- NRIV表欄位的設定使用
- 不改表結構如何動態擴充套件欄位套件
- [升級需要用到的] mysql更新表 增加、刪除、修改表欄位MySql
- oracle中判斷欄位是否存在和新增表結構Oracle
- [提問交流]模型欄位怎麼做成聯動表單的模型
- 如何設計SKU表結構
- 表結構設計討論
- Gin 框架怎麼驗證繫結到結構體的欄位?框架結構體
- 怎麼取的擴充套件模型裡表裡的欄位啊套件模型
- MyBatis實現MySQL表欄位及結構的自動增刪MyBatisMySql
- oracle大表新增欄位default經驗分享Oracle
- 位運算-設計資料庫表的多選狀態欄位資料庫
- SAP MM 為MB51報表增加查詢欄位
- 向資料庫中全部表中增加一個欄位的SQL資料庫SQL
- oracle表結構設計轉摘Oracle
- SQL新增表欄位SQL
- Tableau的計算欄位、粒度、聚合、比率、表計算
- HBase的表結構你設計得不對!
- 修改表的欄位型別型別
- Oracle查詢資料表結構(欄位,型別,大小,備註)Oracle型別
- 怎麼給模型中的欄位增加自動完成規則模型
- 織夢資料庫表結構_Dedecms資料庫表和欄位詳細介紹資料庫
- 根據欄位名等查詢SAP的表或結構(程式程式碼)
- Oracle中檢視所有表和欄位以及表註釋.欄位註釋Oracle
- PHP表單-必需欄位PHP
- mysql表最多欄位數MySql
- MySQL 更新一個表裡的欄位等於另一個表某欄位的值MySql
- oracle增加欄位帶預設值Oracle
- 資料庫中的圖片欄位怎麼在報表中呈現資料庫
- Mysqldump 匯出表結構異常MySql
- (轉)Sql Server 快速檢視錶結構(表描述及欄位說明)SQLServer
- oracle 修改表欄位的長度Oracle