2个外键在消息中链接发送者和接收者

时间:2017-04-28 12:12:04

标签: mysql foreign-keys schema foreign-key-relationship

所以我有一个客户端表格,其中包含clientidserviceproviderspid。我想将它们链接到我的表messages中,该表具有发送方和接收方列。但是,如果我将clientid和spid引用给发送者和接收者,它似乎不起作用。

参考它们的好方法是什么?

enter image description here

1 个答案:

答案 0 :(得分:0)

如果消息的发件人和收件人可以位于服务提供者表上的任一客户端中,则您不能使用外键来确保参照完整性。单个外键只能指向一个表。

如果您坚持使用单独的客户端和服务提供者表,则可以使用触发器而不是外键来确保参照完整性。

您将在消息表上的插入/更新触发器之前定义,以检查发送器/接收器是否存在于任何2个表中,如果不存在则引发错误消息。您还必须确保没有客户端具有与服务提供商相同的ID,否则您将无法区分它们。

您将在客户端/服务提供者表上的更新/删除触发器之前定义,以确保您不修改具有相关消息的ID(或更新消息表中的ID)。

另一种方法是更改​​数据库结构并将客户端和服务提供者移动到单个表中。在这种情况下,您可以使用外键来确保数据的参照完整性。