首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >购物车表格-反馈数据库设计

购物车表格-反馈数据库设计
EN

Stack Overflow用户
提问于 2011-04-26 05:45:31
回答 1查看 4.9K关注 0票数 3

我正在开发网上购物系统。

以下是产品结构的工作原理:

有多个类别..

每个类别都有多个项目。

每一项都有一个或多个选项

一个选项可以有额外的,也可以没有额外的

下面是我手头的表格:

代码语言:javascript
复制
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,“谷歌”

项目表:

代码语言:javascript
复制
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“

选项表

代码语言:javascript
复制
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“

额外表:

代码语言:javascript
复制
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查询来获取这些表之间的关系,如下所示:

代码语言:javascript
复制
<?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代码。

编辑:忘记添加选项表

编辑:更新了一些数据示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-26 05:59:16

考虑到一个项目可能属于多个类别。

以下是需要考虑的事项:

  • 如果商品的价格随类别而变化,则ItemPrice列将进入CategoryItems表。如果没有,它将进入Items表。
  • 如果选件的价格随着项目的变化而改变,则OptionPrice列将进入ItemOptions表。如果不是,它将进入选项表。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5783646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档