首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL数据库结构

MySQL数据库结构
EN

Stack Overflow用户
提问于 2011-08-25 04:04:50
回答 5查看 696关注 0票数 0

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

代码语言:javascript
运行
复制
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表存储每种产品的不同供应商及其价格。

当将产品添加到篮子中时,它首先检查product_id是否已经存在于篮子表中-如果已经存在,则它将简单地覆盖记录。如果它不存在,那么它将创建一个新记录。

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

我想知道我在这里是否得到了正确的方法,或者我是否需要进行任何更改来消除任何冗余。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-25 04:11:54

Basket中,您应该具有:

代码语言:javascript
运行
复制
basket_id (PK)
product_id
supplier_id
quantity
price

Product_Suppliers只是一个配置表。它具有供应商提供的产品的唯一当前配置。你的Basket应该比指向Product_Suppliers“更了解”,因为:

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

你的设计应该允许你正确地查询历史数据,即使产品改变了价格,或者供应商不再提供它。

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

而且,我在你的设计中看不到谁的篮子,这意味着你还应该有一个供客户或用户使用的表(或者两者,如果用户可以输入他们自己的订单,商店内部用户可以为客户输入订单)和相应的键(client_id,user_id)。

票数 1
EN

Stack Overflow用户

发布于 2011-08-25 04:10:15

Basket表中,product_id似乎是多余的。此外,我可能会创建一个跟踪不同价格的表(当然,如果价格随着时间的推移而变化)。所以我会有:

Product_Suppliers上的

  1. Product_Suppliers (id (PK), product_id (FK to Products), supplier_id (FK to suppliers), active(flag), UNIQUE constraint on (product_id + supplier_id))
  2. Product_Suppliers_Versions (id PK, product_suppliers_id(FK to Product_Suppliers), price, effective_date)
  3. Basket (id PK, prodcut_supplier_version_id(FK to Product_Suppliers_Versions), quantity)
  4. AFTER UPDATE, INSERT TRIGGER将以前的版本复制到Product_Suppliers_Versions),如果至少有一个购买绑定到supplier_id and product_id,则阻止对它进行修改。
票数 1
EN

Stack Overflow用户

发布于 2011-08-25 04:33:23

这还远不是最终的结果,而只是指向某个方向。

一个Basket可能有很多项,所以引入了BasketItem

BasketItemNo是序数(1,2,3 .)对于每个BasketID

ItemPrice复制到BasketItem.UnitPrice,以便将来进行价格更改。任何价格变化都不应改变历史篮子数据。

如果ProductDescription也可能发生变化,那么也应该在购买时进行复制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7181580

复制
相关文章

相似问题

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