我希望標題清楚,請進一步閱讀,我將解釋我的意思。數據庫表按實體組織,還是垂直按數據級別?
我們與我們的數據庫設計師有關於高級結構的分歧。我們正在設計一個MySQL數據庫,我們有一大堆數據將成爲它的一部分。從概念上講,數據很複雜 - 有幾十種不同類型的實體(代表各種現實世界的實體,您可以將它們想象爲產品開發人員,工廠,產品,檢驗,認證等),每種實體都具有相關的特性和與彼此的關係。
我不是一個有經驗的數據庫設計師,但我知道的每件事都告訴我,首先將每個實體想象爲一個表(帶有表示特徵和填充它們的數據的關聯字段),並根據基礎關係。我見過的每一個數據庫設計都是這樣做的。
但是,數據目前是完全不同的形式。有四個表,每個表代表一個數據級別。頂級表格列出了39種實體類型,並且有一個長的字母數字字符串與其他三個表相關聯,這三個表代表所有實體(在一個表中),實體特徵(在一個表中)以及DB中所有特徵的值(在一張包含數千萬條記錄的表格中)。這是行得通的 - 我們在php中有一個基本的視圖,它可以讓您在各個關卡之間導航並查看數據等 - 但至少可以說這是非直觀的。這樣做的理由是它使數據庫的大小更小,縮短了查詢時間並使擴展更容易。但我不清楚DB的規模意味着我們應該優化這一點,比如組織的清晰度。
所以問題是:是否有這樣的結構DB的原因,它是什麼?我發現很難掌握基礎數據 - 例如,您不能以傳統的行和列格式運行表格 - 並且它隱藏了連接。但是更加「傳統」的基於實體的表格結構會產生更多的表格,在正常化後肯定會超過50個表格。哪種方法似乎更好?
非常感謝。
如果我正確地理解了你的現任結構,那麼它提供的最大優勢是可以靈活地添加/編輯/刪除實體類型。存儲差異應該很小,因爲任何結構都不應該複製不必要的數據。假設在兩種設計中都有明智的索引,性能差異將非常依賴於您希望針對數據運行的查詢 - 但我期望現任設計比包含每個實體表格的非規範化形式要慢。 – eggyal
此外,我不會說現任結構缺乏「組織的明確性」。如果您希望以某種方式查看數據,或者在其上運行某些報告,請爲該報告創建一個「VIEW」或構建查詢。僅僅因爲數據以一種方式存儲在數據庫中並不意味着用戶應該與之交互的結構。 – eggyal
您目前似乎有某種EAV。有很多關於SO的帖子, - 這裏是一個起點http://stackoverflow.com/search?q=%5Bdatabase-design%5D+EAV –