如果表的欄位數不確定,如何設計表的結構,可以通過後臺配置,添加欄位


用alter table語句,在程序中動態生成add增加欄位,或者是drop刪除欄位,都是可以實現的,所以技術上不是什麼難題。但在現實中,一般都不採用變動表結構的方式來實現需求,你不妨把是什麼需求說一下,看看能不能有不改變表的變通方法。

在項目運行過程中動態改變表的結構,有以下的一些麻煩:

1、增加或者刪除欄位之前,要在程序中做非常多的準備工作,在執行之中,要不停的去catch異常,處理異常;2、表結構的變化,資料庫一般都要對表中數據進行重新整理與排列,特別是涉及到索引相關的欄位(比如說有多欄位聯合索引的),來回折騰幾次,資料庫的性能會嚴重下降;3、對於業務模塊的程序員來講,也是會罵孃的——寫了個查詢語句,運行得好好的,結果有人把其中查詢涉及到的某個欄位刪掉了,然後就整個模塊都出錯……

4、從項目管理來講,資料庫字典是一個非常重要的文檔,對資料庫架構的理解也是程序員進行項目開發的始端。這個資料庫結構的變動,會產生非常多的歧義和誤解。


這種需求曾經還挺常見的,那時還沒什麼 nosql 的概念,通過後臺配置當然能做到。不過現在建議不要採用資料庫方式了。
能確定的欄位比如:工號,姓名,基本工資,日期放在表A中。不確定的動態變化的欄位1.欄位較少,可以作為一個整體,json_encode後放入表A的一個欄位

2.欄位比較多,而且有可能需要查詢的欄位,可以新建一個表B,表結構如下:

id存放主鍵pid存放表A的主鍵name存放動態欄位的名稱value存放動態欄位的值


裝個phpmyadmin,或者做一個。

更新,自己寫的支持結構動態的mis系統。

https://github.com/zhblue/crud
這種需要最好拒絕掉....

無他,別自個找事。


http://bms.tratao.com/slide/simple/ac8ec2ca41484e205fa6bfe08e8fae5f
根據資料庫的三種範式,這種需求根本不應該出現。
用postgresql,支持hstore類型,可以添加索引
欄位動態載入不難啊。看過班級課程表吧,如果每週的天數和每日課程數都是動態載入,整個表什麼東西做著最煩?我覺得是左上角的那根斜線。。。本產品汪沒能做出來,然後就裁了這個需求。。。
關係型資料庫是不能可配置添加欄位的,地球人都知道的常識,不過可以可配置添加記錄,所以,就這麼解決了。

現在MySQL和PG的比較新的版本都在支持JSON datatype,可索引

你也可以考慮mongodb,如果只是做搜索之類的操作那可以用ES@loki 的方法我們也用過,效果還不錯,限制也有一些。
添加xml欄位。現在主流資料庫應該支持xml查詢了。
不如用zopedb

借樓問一下, 有沒有像mongodb一樣動態欄位還本地化支持sql的資料庫?


推薦閱讀:
相關文章