【问题标题】:Database design - storing equivalence数据库设计——存储等价
【发布时间】:2017-06-15 09:18:57
【问题描述】:

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

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

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

等价

  • supplier1_id
  • supplier2_id
  • supplier1_product_id
  • supplier2_product_id

产品

  • id(生成)
  • supplier_id
  • supplier_product_id

这似乎是个坏主意。每当将某些东西插入“产品”时,

  1. 必须查询“等价”才能找到每个等价物
  2. 必须查询“产品”以查找是否已存储等效产品
  3. 如果没有找到同等产品,可以插入产品

有没有更聪明的方法来做到这一点?

【问题讨论】:

    标签: database database-design relational-database


    【解决方案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 很可能是每单位价格的列表,这些价格会根据订购的数量而有所不同。因此它很可能在另一个表中——我在此处添加它以显示额外的供应商-产品关系属性。

    再次用简单的英语,该表中的一个元组表示:“this 来自 this 供应商的产品具有 this SKU 编号。” p>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多