如果我有一个表,其中每一行都是客户预订,那么在这个表中有 2 个外键是否可以:一个将为空,另一个引用适当的主键。我有两个表并对其应用了外键约束的原因是,预订可以是服务包 (service_package) 的预订,也可以是单个服务 (service) 的预订。
我猜这是个糟糕的设计,因为可以在同一预订行中注册两种预订,除非使用函数或存储过程强制实现限制。
这个解决方案是否可行,或者是否有更好的方法来做到这一点,比如为所提供的服务创建一个更通用的表?
最佳答案
这是一个合理的方法。当特定列的值为 NULL
时,连接将失败。
在 MySQL 中,您必须使用触发器强制执行此操作。其他数据库具有“检查约束”的概念,您可以在其中强制填充两个值之一。
如果您有更多列,您可能会想切换到“类型”列和“id”列。这要求所有的 id 都具有相同的类型。它还需要一个触发器来确保正确填充列。而且,它可能会在进行联接时导致错误。
在这两个备选方案中,我更喜欢您仅使用两个 ID 的方法。
关于mysql - 在一个表中使用 2 个外键是否可以,其中一个必须为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17560995/