你好,stackoverflow社區!同一個數據庫表中的許多高度相似的對象
我正在研究一個相當大的數據庫驅動的Web應用程序。隨着更多組件的添加,底層數據庫的複雜性不斷增加,但迄今爲止,我已經完全沒有任何問題正常化數據。
但是,這個最終組件意味着一個可以容納產品的表格。 每個產品都有一個類別,根據類別的不同,它們有不同的字段。 爲每個產品類別製作表格似乎並不正確,因爲目前有五種類型,並且它們仍然有相當多的相同領域。 (但以奇怪的方式 - 描述和價格等幾個通用字段對於所有5個類別是共同的,但是一些屬性在1和2之間,其他3,4,5等等)共享。
我試圖擺脫EAV模型出於明顯的性能原因。
問題是,根據用戶想要輸入數據庫的產品類型,有一個(但不是完全)不同的字段結構 - 它們都有一個名稱和一般描述,但其他屬性如「覆蓋面積「只能應用於某些種類,如種子和農藥,但不適用於燃料,這種柴油/汽油布爾值和一些其他燃料相關屬性。
我應該只是提取一個表中的核心功能,併爲每個類別類型另外五個?未來這將很難擴展。
我目前的想法是讓產品表包含來自所有可能類別的所有字段,然後再用另一個表來描述產品表中的哪個類別具有哪些字段。
product: id | type | name | description | price | composition | area covered | etc.
fields: id | name (contains a list of the fields in the above table)
product-fields: id | product_type | field_id (links a bunch of fields to the product table based on the product type)
我想這不會是太慢,易查(無需實際加入其他表,只是進行基於輸入的一些主要產品表搜索),它有助於之類的東西表單生成和數據驗證只需一個輕量級的附加查詢/連接。 (讀取從數據庫的產品,加入一個字符串實際使用的字段的連續清單 - 拆分和顯示基於它所包含的內容適當的表單字段,即實際與該產品相關的領域
感謝。你的麻煩! AndreiBârsan
由於用戶將被允許基於幾乎任何列進行搜索,我猜主表+元數據表是最好的方法。我不認爲會有太多稀疏的條目(總共大約20列,最壞的情況是隻有11/20列,最好的情況是17/20)。 – 2012-03-09 16:31:45
我用單桌+元表的方法去了,到目前爲止它的工作非常好!從長遠來看,我會看到它是如何實現的,但是鑑於目前的情況,我沒有看到有什麼特別的地方可以在壓力下解決這個問題。謝謝! – 2012-03-18 16:13:48