小编use*_*739的帖子

在不牺牲关系数据库中数据一致性的情况下解决超类型-子类型关系

为了更好地设计数据库,我注意到我总是被困在试图解决完全相同问题的变体中。

以下是使用常见要求的示例:

  1. 一家在线商店销售不同类别的product.
  2. 系统必须能够检索所有产品类别的列表,例如foodfurniture
  3. 客户可以订购任何产品并检索他的order历史记录。
  4. 系统必须根据产品类别存储特定属性;说expiration_datecalories任何food产品和manufacture_date任何furniture产品。

如果不是需求 4,模型可能非常简单:

在此处输入图片说明

问题是试图解决需求 4。我想到了这样的事情:

在此处输入图片说明

在这种方法中,关系product-furnitureproduct-food超类型-子类型(或超类-子类)关联;子类型的主键也是超类型主键的外键。

但是,这种方法不能保证category通过外键引用的product将与其实际子类型一致。例如,没有什么能阻止我将foodcategory设置为Furniture表中具有子类型行的产品元组。

我阅读了有关建模关系数据库中的继承的各种文章,尤其是这篇这篇非常有帮助但由于上述原因没有解决我的问题的文章。但是无论我使用什么模型,我都不会对数据一致性感到满意。

如何在不牺牲数据一致性的情况下解决需求 4?我在这里做错了吗?如果是这样,根据这些要求解决此问题的最佳方法是什么?

database-design subtypes consistency

6
推荐指数
1
解决办法
922
查看次数

标签 统计

consistency ×1

database-design ×1

subtypes ×1