处理异常和防止冗余的最佳数据库模式是什么?

What is the best DB schema to handle exceptions and prevent redundancy?

有些产品可以多个单位销售,基本单位是公斤。每个产品的单位有不同的重量,例如一捆产品A是20公斤,一捆产品B是30公斤

以下是我的初步设计

product:
id       name

product_variation:
id    product_id      name        price

product_variation_unit:
id          product_variation_id             unit_id

product_variation_unit_weight:
product_variation_unit_id       weight

问题是产品的大部分变体都具有相同的单位和重量。所以这是我的解决方案,但我不确定这是个好主意:

selectable_unit:
id          selectable_id     selectable_type        unit_id
1            10               product                100
2            20               product_variation      101

selectable_unit_weight:
selectable_unit_id       weight

当我想得到一个变量的单位和重量时,首先我会检查变量,如果没有,我会检查它的产品。

我有点复杂,你能帮我找到更好的解决方案或改进吗?

看看下图(Oracle Data Modeler 表示法)。通常,价格取决于SKU(库存单位)和期间;重量取决于 SKU(包装产品)。 SKU 重量受其产品允许的单位限制(外键包含 2 列)。 SKU.value 是销售单位的价值,即公斤、件、升等。