试试这个:书籍、CD-s、DVD-s 以及任何桌面产品(我添加了您所有产品的字段)
+--------------+
| Products |
+--------------+
|id |
|name |
|price |
|bar_code |
+--------------+
然后有一个表类别
+--------------+
| Categories |
+--------------+
|id |
|name |
+--------------+
然后连接两个表(我做了多对多,以防一个产品进入更多类别)
+--------------------+
| Product2Categories |
+--------------------+
|id |
|product_id |
|category_id |
+--------------------+
最后是那些特殊属性的表格,如语言、年龄限制、成分等。
+--------------+
| Attributes |
+--------------+
|id |
|name |
+--------------+
那么您需要将 Product 与特殊属性连接并分配正确的值:
+---------------------+
| Attributes2Products |
+---------------------+
|id |
|product_id |
|attribute_id |
|value |// varchar(255)
+---------------------+
现在这没问题,但它并不理想,因为不同的属性具有不同类型的值,例如编程书籍的语言是varchar,或者灵性的年龄限制是整数,在上面的示例中,所有特殊属性值都是 varchars。如果你想优化上面的数据库,你需要编辑属性表:
+--------------+
| Attributes |
+--------------+
|id |
|name |
|type | //type of data it recives
+--------------+
然后创建与您打算使用的数据类型一样多的 Attributes2Products 表,例如,如果属性是整数类型,则将特殊属性值保存在表中:
+---------------------+
| IntegerAtt2Products |
+---------------------+
|id |
|product_id |
|attribute_id |
|value |// int(11)
+---------------------+
或者如果属性是字符串类型
+---------------------+
| VarcharAtt2Products |
+---------------------+
|id |
|product_id |
|attribute_id |
|value |// varchar(255)
+---------------------+
等等。
希望这可以帮助。