微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Sql外键约束问题

如何解决Sql外键约束问题

假设有一个名为'Bill'的表,在Bill Table中有3列,['id','client_id','client_contact_id'],只有'client_contact_id'可以为空。 client_id 将与 'client' 表无关,并且在 'client_contact' 表中, 有 3 列,例如 ['id','name','client_id']。我应该如何确保这些表的完整性,以确保插入到带有“client_id”的表“bill”中的数据与 client_id 的 client_contact_id 相同。

我想让 bill.client_contact.client_id 的完整性与 MysqL 中的 bill.client_id 相同。

我不得不提到 Client : Bill 是 1:n ,Client :Client_contact 也是 1:n 。 Client_contact : 账单是 1:n

enter image description here

解决方法

使用具有两列的外键约束:

foreign key (client_id,client_contact_id) references client_contacts(client_id,id)

您需要在这些列上使用唯一索引/约束:

create unique index client_contacts_2 on client_contacts(client_id,id);

这有点多余,但无需使用触发器或存储过程即可解决您的问题。它还允许 NULL 值。对于外键关系,这些应该被忽略。

,

如果你没有合同就不能有账单,那么我建议你从账单表中删除客户 ID。

如果您可以在没有合同的情况下拥有账单,那么您需要在账单表上的插入之前和更新触发器之前创建。如果插入/更新记录中的 client_contact_id 字段不为空,这些触发器会从客户端联系表中拉取客户端。或者,您需要在应用程序逻辑中处理此问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。