我需要创建包含书籍,CD和DVD的商店数据库。有三类书籍:编程,烹饪等。灵性。所有商品都有名称,价格,条形码。书籍有专门针对每类书籍的页面和参数 - 编程书籍的语言,烹饪书籍的主要成分和灵性的年龄限制。 CD和DVD分为misic,视频和软件。因此,当我设计DB时,我在连接表时遇到问题:我必须从三个不同的表中获取一个字段的数据。
+-----------+
| Tables |
+-----------+
|Categories |
|Languages |
|Main_Ingred|
|Age_Limits |
|Books |
+-----------+
+--------------+
| Books |
+--------------+
|id |
|category_id |
|price |
|bar_code |
|pages |
|special_param.| // Here I have to use data from 3 different tables
+--------------+
我认为这不是正确的决定。你可以帮帮我吗?
对于普通商品表的设计我也会遇到同样的问题。
答案 0 :(得分:1)
试试这个: 书籍,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表:
+--------------+
| Attributes |
+--------------+
|id |
|name |
|type | //type of data it recives
+--------------+
然后创建尽可能多的Attributes2Products表,因为您打算使用数据类型,如果attribute是整数类型,请保存表中的特殊属性值:
+---------------------+
| IntegerAtt2Products |
+---------------------+
|id |
|product_id |
|attribute_id |
|value |// int(11)
+---------------------+
或者if属性是字符串类型
+---------------------+
| VarcharAtt2Products |
+---------------------+
|id |
|product_id |
|attribute_id |
|value |// varchar(255)
+---------------------+
等等。
希望这有帮助。