为了更好地设计数据库,我注意到我总是被困在试图解决完全相同问题的变体中。
以下是使用常见要求的示例:
product
.food
和furniture
。order
历史记录。expiration_date
和calories
任何food
产品和manufacture_date
任何furniture
产品。如果不是需求 4,模型可能非常简单:
问题是试图解决需求 4。我想到了这样的事情:
在这种方法中,关系product-furniture
和product-food
是超类型-子类型(或超类-子类)关联;子类型的主键也是超类型主键的外键。
但是,这种方法不能保证category
通过外键引用的product
将与其实际子类型一致。例如,没有什么能阻止我将food
category设置为Furniture
表中具有子类型行的产品元组。
我阅读了有关建模关系数据库中的继承的各种文章,尤其是这篇和这篇非常有帮助但由于上述原因没有解决我的问题的文章。但是无论我使用什么模型,我都不会对数据一致性感到满意。
如何在不牺牲数据一致性的情况下解决需求 4?我在这里做错了吗?如果是这样,根据这些要求解决此问题的最佳方法是什么?