我正在开发网上购物系统。
以下是产品结构的工作原理:
有多个类别..
每个类别都有多个项目。
每一项都有一个或多个选项
一个选项可以有额外的,也可以没有额外的
下面是我手头的表格:
mysql> desc categories;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| cat_id | int(11) | NO | PRI | NULL | auto_increment |
| company_id | int(11) | NO | | NULL | |
| name | varchar(100) | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+例: 12,2,“谷歌”
项目表:
mysql> desc items;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| item_id | int(11) | NO | PRI | NULL | auto_increment |
| cat_id | int(11) | NO | | NULL | |
| name | varchar(150) | NO | | NULL | |
| description | varchar(150) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+例如: 2,12,“项目1",”描述... 1“
例如: 3,12,“项目2",”描述... 2“
选项表
mysql> desc items_options;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| option_id | int(11) | NO | PRI | NULL | auto_increment |
| item_id | int(11) | NO | | NULL | |
| name | varchar(150) | NO | | NULL | |
| price | decimal(6,2) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+例如: 45,2,“常规”,"2.20“
例如: 46,3,“小”,"1.20“
例如: 47,3,“大”,"2.20“
额外表:
mysql> desc items_options_extras;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| extra_id | int(11) | NO | PRI | NULL | auto_increment |
| option_id | int(11) | NO | | NULL | |
| name | varchar(150) | NO | | NULL | |
| price | decimal(6,2) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+例如: 64,47,“带包”,0.10“
这是一个好的数据库设计吗?有什么可以改进的?
我没有创建关系表,有必要这样做吗?如果是这样的话,我不确定如何创建一个关系表。
目前,我使用多个SELECT查询来获取这些表之间的关系,如下所示:
<?php
$q = mysql_query("SELECT item_id, name FROM items where cat_id = '3'");
while($row = mysql_fetch_assoc($q)) {
echo $row['name'];
$q2 = mysql_query("SELECT price FROM items_options_extras where item_id =" . $row['item_id']);
while($row2 = mysql_fetch_assoc($q2))
echo $row2['price'];
}
}
?>当我想要删除一个项目并包含选项时,我使用类似于上面的php代码。
编辑:忘记添加选项表
编辑:更新了一些数据示例。
发布于 2011-04-26 05:59:16
考虑到一个项目可能属于多个类别。

以下是需要考虑的事项:
https://stackoverflow.com/questions/5783646
复制相似问题