我需要创建包含书籍、CD 和 DVD 的商店数据库。书籍分为 3 类:编程、 cooking 和例如。灵性。所有商品都有名称、价格、条形码。书籍有专门针对每一类书籍的页面和参数——编程书籍的语言、 cooking 书籍的主要成分以及灵性的年龄限制。 CD 和 DVD 分为音乐、视频和软件。因此,当我设计数据库时,我在连接表时遇到了一个问题:我必须从三个不同的表中获取一个字段的数据。
+-----------+
| 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
+--------------+
我认为这不是正确的决定。你可以帮帮我吗?
对于通用商品表的设计,我也会遇到同样的问题。
最佳答案
试试这个: 书籍、CD、DVD 以及任何进入表格的产品(我添加了您所有产品都有的字段)
+--------------+
| 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,或者灵性的年龄限制是整数>,在上面的例子中所有特殊属性值都是varchar。 如果您想优化上面的数据库,您需要编辑属性表:
+--------------+
| 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)
+---------------------+
等等。
希望这有帮助。
关于mysql - 简单存储DB的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19542378/