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