2011-12-12 40 views
0

我有一個名爲product的模型和表。每個產品將有大約100個屬性。每個屬性都是一個字符串。我應該簡單地將所有這些屬性添加到產品表中嗎?或者,創建幾個子模型並通過has_many/belongs_to關聯訪問它們會更好嗎?我打算有一個頁面來加載所有這些屬性。我將是唯一設置這些屬性的人。有其他方法可以考慮這麼做嗎?也許我可以將所有內容保存到單個文本數據類型的行中,並以某種方式對其進行格式化,甚至只是將其全部寫入常規HTML中。存儲單個記錄的許多屬性

+0

屬性有哪些例子?每個記錄是否具有相同的屬性? –

+0

是的,他們將具有相同的屬性。一些例子:價格,尺寸,重量等 – chief

+0

讓一張桌子上的每一件東西都具有的優點是簡單,執行速度快,編輯更容易,特別是如果您使用數據綁定控件。缺點是添加或修改屬性,您必須更改數據庫和代碼。我已經看到設計將屬性與屬性的類型一起保存在單獨的表中。由於代碼必須處理屬性類型,因此速度更慢,更復雜。但是,添加屬性要容易得多。既然你有一對一的關係記錄/屬性,每個屬性都不相同,我會把它們放在一張表中。 –

回答

0

我想推薦以下設計。

Attribute Table -- AttributeId (primary key), AttributeName 
Product Table -- ProductId (primary key), 
        other product related informations(except attributes). 
ProductAttribute Table -- ProductId(foreign key), AttributeId(foreign key) 

如果每個屬性將爲每個產品不同的值,那麼你可以考慮ProductAttribute表是這樣的:

ProductAttribute Table -- ProductId(foreign key), AttributeId(foreign key), 
          AttributeValue 

編輯

你不需要做100表。根據我的理念,你需要3張桌子。現在,Attribute表將包含100行,每個屬性一個。假設您有5個屬性a1, a2, a3, a4, a5和兩個產品p1,p2。然後,表格將如下所示:

Attribute 
--------- 

AttributeId | AttributeName 
--------------------------- 
1   | a1 
2   | a2 
3   | a3 
4   | a4 
5   | a5 


Product 
------- 

ProductId | ProductName 
----------------------- 
1   | p1 
2   | p2 


ProductAttribute 
---------------- 

ProductId | AttributeId | Value 
-------------------------------- 
1   | 1   | value1 
1   | 2   | value2 
1   | 3   | value3 
1   | 4   | value4 
1   | 5   | value5 
1   | 1   | value6 
1   | 2   | value7 
1   | 3   | value8 
+0

所以我理解正確,你建議我爲每個屬性製作100個表格? – chief

+0

@chief不,你只需要3張桌子。我用細節編輯了我的答案。看到了。 – Jomoos

+0

他的屬性沒有打開或關閉,它們具有必須與每條記錄一起存儲的值。我不認爲多對多的關係是正確的。 –

0

XML是最佳答案。您仍然可以爲每一行使用不同的屬性。 和數據將在單個查詢中可用。