数据库关系周期
||
数据库关系周期闻起来像不良的数据库设计。以下是我认为无法避免的情况:
公司有地点(城市)
公司拥有产品(巨无霸)
产品无法在以下地区使用(沙特阿拉伯没有培根汉堡)
当前的设计将允许您在确实属于该公司的位置上提供不属于该公司的产品。
公司
1-麦当劳
2-汉堡王
位置
1-纽约,建筑物1-麦当劳(1)
2-阿姆斯特丹,2号楼-汉堡王(2)
产品
1-巨无霸-麦当劳(1)
产品位置
1-巨无霸(1)-阿姆斯特丹,建筑2(2)
麦当劳卖巨无霸,汉堡王不卖,但看来他们的大楼有卖:)
当我们向也依赖于位置的产品添加关系时,情况变得更糟。
我该怎么做才能防止周期?
如何确保数据库数据完整性?
没有找到相关结果
已邀请:
5 个回复
眠缝
,
和
作为独立实体开始-我认为您尝试过:
并且如果
是从属实体(取决于公司):
冲汉
盛虱
如果没有这些,将设置密钥的另一种可能性,以便可以检查规则:
这样可以确保每个company_product_locations都引用与同一公司关联的产品和位置。 复杂约束的另一种可能性是使用实体化视图。我在这里在Oracle上下文中写过有关此的博客。
席陋临拈
攫怂绵十
达菲(Duffymo)说“位置远不止是建筑物”是对的。 这是实现这些约束的一种方法。我删除了ID号,因为它们倾向于隐藏实际情况。
注意product_location中重叠的外键。重叠的外键可确保使用位置标识的公司和使用产品标识的公司是同一公司。现在,以下INSERT将失败,并违反外键约束。