表欄位經常要增加的業務怎麼設計表結構
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL表增加/刪除欄位是否會重寫表SQL
- 將表結構轉換成實體欄位
- 不改表結構如何動態擴充套件欄位套件
- 涵蓋表內欄位設計以及應該避免的常見問題等
- [升級需要用到的] mysql更新表 增加、刪除、修改表欄位MySql
- oracle中判斷欄位是否存在和新增表結構Oracle
- 如何設計SKU表結構
- 表單欄位
- MyBatis實現MySQL表欄位及結構的自動增刪MyBatisMySql
- 位運算-設計資料庫表的多選狀態欄位資料庫
- [提問交流]模型欄位怎麼做成聯動表單的模型
- Gin 框架怎麼驗證繫結到結構體的欄位?框架結構體
- 怎麼取的擴充套件模型裡表裡的欄位啊套件模型
- SAP MM 為MB51報表增加查詢欄位
- HBase的表結構你設計得不對!
- Tableau的計算欄位、粒度、聚合、比率、表計算
- 包括clob segment 大欄位 表的大小統計
- 織夢資料庫表結構_Dedecms資料庫表和欄位詳細介紹資料庫
- MySQL 更新一個表裡的欄位等於另一個表某欄位的值MySql
- 怎麼給模型中的欄位增加自動完成規則模型
- Mysqldump 匯出表結構異常MySql
- oracle增加欄位帶預設值Oracle
- oracle 修改表欄位的長度Oracle
- Oracle表 列欄位的增加、刪除、修改以及重新命名操作sqlOracleSQL
- 查詢資料庫表及表欄位資料庫
- 資料庫中的圖片欄位怎麼在報表中呈現資料庫
- mysql建立表的時候對欄位和表新增COMMENTMySql
- 《設計師要懂心理學(第2版)》連結表
- 5_MySQL 表的欄位約束MySql
- 樹形結構的選單表設計與查詢
- SQLServer2012刪除表欄位SQLServer
- 共有的表單欄位屬性
- 【TABLE】Oracle監控異常的表設計Oracle
- 業務資料包表設計指南來啦,產品經理請收好
- ABAP 動態備份自建表資料到新表(自建表有資料的情況下要改欄位長度或者其他)
- django admin中增加自定義超連結欄位Django
- 資料結構,雜湊表hash設計實驗資料結構
- laravel欄位減少增加Laravel