0

我需要创建包含书籍、CD 和 DVD 的商店数据库。有 3 类书籍:编程、烹饪和灵性。所有商品都有名称、价格、条形码。书籍有专门针对每一类书籍的页面和参数——编程书籍的语言、烹饪书籍的主要成分和灵性的年龄限制。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
+--------------+

我认为这不是正确的决定。你可以帮帮我吗?

对于普通商品表的设计,我也会遇到同样的问题。

4

1 回答 1

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   | 
+--------------+
|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)
+---------------------+

等等。

希望这可以帮助。

于 2013-10-23T13:37:25.637 回答