我們必須重新設計一個傳統的POI數據庫,從MySQL到PostgreSQL。目前,所有實體都具有代表各個屬性的80-120 +個屬性。是EAV - Hybrid是一個糟糕的數據庫設計選擇
我們被要求考慮新的數據庫的靈活性和良好的設計方法。但是新的設計應該允許:
ň沒有。任何實體的屬性/屬性,即任何實體的屬性都不固定,並且可能會定期更改。
允許內容管理員通過管理界面使用動態爲現有實體添加新屬性,而不是始終對數據庫模式進行更改。
大約有EAV的性能問題,相當多的討論,但如果我們不以混合EAV去我們結束了:
- 有很多空列(我們還是去即使99%的數據沒有這些屬性,也要添加新的列)
- 花費更多時間維護數據庫。當屬性不斷變化時。
- 沒有允許內容管理員,以新的屬性添加到現有的實體
反正這裏的路是我們正在考慮的新的設計內容(包括基本ERD):
對每個單獨的表包含一些基本信息的實體,例如編號,名稱,地址,聯繫人,創建等等
有2個表屬性類型和屬性來存儲屬性信息。
使用多對多關係將每個實體鏈接到一個屬性。
將地址存儲在不同的表中並鏈接到使用外鍵的實體。
我們認爲,這將允許我們添加,刪除或更新的屬性時更加靈活。
然而,這種設計會在獲取數據時增加連接數量,例如顯示給定體育場的所有「屬性」,我們可能會用20多個連接查詢來獲取單行中的所有相關屬性。
你對這個設計有什麼想法,你有什麼建議來改進它。
謝謝您的閱讀。
看看是否使用NOSQL數據庫將有所幫助? http://nosql-database.org/ – 2010-12-19 05:53:41
您不需要NoSQL以JSON或XML格式將數據存儲在數據庫表的字段中,並且使用PostgreSQL可以在特定字段上創建功能索引 – MkV 2010-12-19 07:20:59
生產數據庫中的字段shouldn '不會被'添加',應該有一些改變控制來防止數據混亂。通過做一些前期設計避免這種情況。根據需要添加表格,或者在字段爲1-1的情況下將字段添加到現有表格,並且不會更改表格。 – MkV 2010-12-19 08:39:25