php - MySQL数据库结构

标签 php mysql sql database-design

我正在用 PHP/MySQL 开发一个股票订购系统。产品可以有多个供应商。通过指定所需数量和供应商将产品添加到购物篮中。这是当前的数据库结构:

Products
=========
id (PK)
name
etc...

Suppliers
==========
id (PK)
name
etc...

Product_Suppliers
=================
id (PK)
product_id (PK)
supplier_id (PK)
price

Basket
=======
product_id (PK)
quantity
product_suppliers_id

Product_Suppliers 表存储不同的供应商及其每种产品的价格。

将产品添加到购物篮时,它首先检查产品 ID 是否已存在于购物篮表中 - 如果存在,则会覆盖记录。如果不存在,则会创建一条新记录。

购物篮表中的product_suppliers_id 字段指定为该特定产品选择了哪个供应商。

我想知道我的方法是否正确,或者我是否需要进行任何更改以消除任何冗余。

最佳答案

购物篮中,您应该有:

basket_id (PK)
product_id
supplier_id
quantity
price

Product_Suppliers 只是一个配置表。它具有供应商提供的产品的唯一当前配置。您的购物篮应该“更了解”然后指向Product_Suppliers,因为:

  • 产品可以更改价格。
  • 供应商也可以在特定时间停止提供产品。

您的设计应该允许您正确查询历史数据,即使产品价格发生变化或供应商不再提供该产品。

因此,您不应在其中包含 product_suppliers_id

此外,我在您的设计中没有看到的购物篮,这意味着您还应该为客户或用户(或两者,如果用户可以输入自己的订单和商店)提供一个表格内部用户可以输入客户端的订单)和相应的 key (client_id,user_id)。

关于php - MySQL数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181580/

相关文章:

php - 从 2 个 MySQL 表中选择数据 - PHP

sql - 调用 'Fill' 之前 SelectCommand 属性尚未初始化

sql - Oracle中如何选择表中最后插入的记录

PHP:在MYSQL数据库中使用 boolean 变量进行逻辑的语法

php - 在php上重新排序一个sql矩阵

MYSQL 存储过程不更新列

mysql - 基于绝对引用创建新列

php - SQL如何查出数据位于哪个表

php - 将 httpbody 作为 json 参数 swift 发布

php - 如何使用mysql和php制作级联下拉列表