简易商店DB的设计

时间:2013-10-23 12:58:41

标签: mysql sql

我需要创建包含书籍,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
+--------------+

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

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

1 个答案:

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

等等。

希望这有帮助。