試試這個: 書籍,CD-S,DVD-S和任何去表產品(我添加的字段所有的產品都)
+--------------+
| Products |
+--------------+
|id |
|name |
|price |
|bar_code |
+--------------+
然後有一個表類
+--------------+
| Categories |
+--------------+
|id |
|name |
+--------------+
然後連接兩個表(我已經做了很多很多,以防萬一一個產品進入多個類別)
+--------------------+
| Product2Categories |
+--------------------+
|id |
|product_id |
|category_id |
+--------------------+
最後是像語言,年齡的限制,配料等這些特殊屬性表
+--------------+
| Attributes |
+--------------+
|id |
|name |
+--------------+
,那麼你需要的產品與特殊屬性連接並分配正確的值:
+---------------------+
| Attributes2Products |
+---------------------+
|id |
|product_id |
|attribute_id |
|value |// varchar(255)
+---------------------+
現在這沒關係,但它並不理想,因爲不同的屬性具有不同類型的值,例如用於編程書籍的語言是varchar,或者靈性的年齡限制是整數,在上面的示例中特殊屬性值是varchars。 如果ü要優化數據庫上面,你會需要編輯屬性表:
+--------------+
| Attributes |
+--------------+
|id |
|name |
|type | //type of data it recives
+--------------+
,然後創建許多Attributes2Products表的,因爲有你打算使用像數據類型,如果屬性爲整數,U型保存在表中的特殊屬性值:
+---------------------+
| IntegerAtt2Products |
+---------------------+
|id |
|product_id |
|attribute_id |
|value |// int(11)
+---------------------+
,或者如果屬性是字符串類型
+---------------------+
| VarcharAtt2Products |
+---------------------+
|id |
|product_id |
|attribute_id |
|value |// varchar(255)
+---------------------+
等。
希望這會有所幫助。
爲什麼不把它們放在一張桌子(書籍/ dvd/cds);那麼你限制了這張表,這樣書本的內容只能屬於你提到的類別,而CD/DVD則屬於其他內容;列'頁面'可以保留並且可以爲空,因此它不用於dvds/cds或者將其命名爲'length'並且根據類型將其解釋爲代碼(書的長度意味着頁面,音樂/視頻的長度意味着秒,軟件的長度意味着兆字節);我建議重新考慮'special_param',因爲它讀起來像某種標記系統,這應該進入由外鍵引用的單獨的表中。 – DrCopyPaste
你**有**保持某種「規範化形式」嗎?如果沒有,簡化你的設計。 –