特定方案的关系数据库设计

时间:2016-02-10 18:39:00

标签: database database-design relational-database

我有一个商业场景,其中产品可以有多个变体示例100ml,200ml,500ml等,在所有这些变体中只有一个可以是标准变体,我有一个数据库列IsStandardVariant来指定标准变体一个产品。我无法确定哪些列是唯一的。如果我使ProductId和IsStandardVarriant Unique,它将不允许我存储非标准变量的值示例我有一行作为 1 200毫升1 1 500毫升0 我不能存储1 777ml 0行 我不能让它们中的所有3个都是唯一的,因为它允许存储另一个变体 例  1 400ml 1  1 300毫升1 请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

由于您在问题中提到的原因,您无法仅使用一个表格来模拟数据。您需要使用两个表。

主表将是ProductMaster表,它将具有ProductId和Volume列。主表将具有包含ProductId和Volume列的唯一键。

另一个表是StandardVariantLookUp表,它具有ProductId和Volume列,但此表中的卷只是标准Variant的卷。这个表只有ProductId的唯一键,因此每个产品只能有一行。

此外,您还可以在ProductId上的ProductMaster和StandardVariantLookup表之间设置参照完整性,以便StandardVariantLookup的productid列引用ProductMaster tabel的ProductId列。因此,如果需要将记录插入StandVariantLookup,则应该已在ProductMaster表中定义产品。

答案 1 :(得分:0)

您可以使产品对(产品,变体)独一无二。那么你还想要一个约束,即每个产品的isStandardVariant只有一个TRUE值。大多数DBMS都不能以声明方式强制执行。

您可以使用包含列(产品,变体)的表ProductVariant和具有列(product,variant)的另一个表ProductStandardVariant,其中包含(Product,variant)外键到ProductVariant。这是简单的关系设计。