数据库设计 - 存储等价

时间:2017-01-30 09:08:20

标签: database database-design relational-database

我为系统设计关系数据库,该系统存储零售商的某些类型的产品,零售商和供应商的信息。

一些供应商销售相同的产品 - 但是,他们没有标识产品的标准,这意味着供应商A可能拥有ID为618261的产品,相当于供应商B的产品007162

问题是,我不想为不同的供应商多次存储相同的产品。目前,我有以下表格:

等价

  • supplier1_id
  • supplier2_id
  • supplier1_product_id
  • supplier2_product_id

产品

  • id(已生成)
  • supplier_id
  • supplier_product_id

这似乎是一个坏主意。每当将某些内容插入产品'

  1. '等价'必须查询以找到每个等价物
  2. '产品'必须查询以确定是否已存储等效产品
  3. 如果找不到等效物,可以插入产品
  4. 有更聪明的方法吗?

1 个答案:

答案 0 :(得分:1)

这不是一种罕见的情况,不同的供应商多次会为共同的产品拥有自己的SKU编号。此外,产品可能有不同的制造商,每个制造商都有自己的部件号。但让我们看一下供应商。

用简单的英语,供应商可能提供许多产品,许多供应商可能提供产品。通过交叉或交叉表维护这种多对多关系。如果您考虑一下,SKU编号不是产品实体或供应商实体的属性。相反,它是关系的一个属性。是的,关系可能与任何实体一样具有属性。

create table ProductSupplier(
  ProductID   int  not null references Products( ID ),
  SupplierID  int  not null references Suppliers( ID ),
  UnitPrice   currency not null,
  SKU         varchar
);

UnitPrice可能是每单位价格的列表,根据订购的数量而有所不同。因此,它可能会在另一个表格中 - 我在此处添加了它以显示其他供应商 - 产品关系属性。

再次用简单的英语,这个表格中的元组说“ SKU编号。

相关问题