mysql - 简单存储DB的设计

标签 mysql sql

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

相关文章:

mysql - TOAD 不显示 unicode 字符

c# - 适配器无法在数据集 : Exception thrown 中填充数据

mysql - 如何在 MYSQL 中删除 2 行中的 1 行?

mysql 两个唯一的列,如果插入到另一个列中,一个列中的值将被视为重复

php - 两个看似相同的查询在使用计数(分页)时返回不同的结果

python - SQLAlchemy 正则表达式与 MySQL 数据库使用\b

mysql - 为每个组选择具有最高值的整个记录

Mysql无法导入csv文件

c# - 一棵树如何存储在数据库中?

mysql - 如何将重复数据值分组到我的脚本中