2个外键链接消息中的发送者和接收者
2 foreign keys linked sender and receiver in messages
所以我有一个客户 table 有一个 clientid
和一个 serviceprovider
table 有 spid
。我想 link 他们在我的 table messages
中有一个发件人和收件人列。但如果我将 clientid 和 spid 都引用给发送者和接收者,它似乎不起作用。
引用它们的好方法是什么?
如果消息的发送者和接收者可以在服务提供商 table 的任一客户端中,则您不能使用外键来确保参照完整性。单个外键只能指向一个 table.
如果您坚持使用单独的客户端和服务提供者table,那么您可以使用触发器而不是外键来确保参照完整性。
您将在消息 table 上定义插入/更新触发器,这将检查发送者/接收者是否存在于 2 table 中的任何一个中,如果不存在则引发错误消息.您还必须确保没有客户端与服务提供者具有相同的ID,否则您将无法区分它们。
您将在客户端/服务提供商 table 上定义更新/删除触发器之前,以确保您不会修改具有相关消息的 ID(或更新消息中的 ID table)。
另一种选择是更改您的数据库结构并将客户端和服务提供商移动到一个 table 中。在这种情况下,您可以使用外键来确保数据的参照完整性。
所以我有一个客户 table 有一个 clientid
和一个 serviceprovider
table 有 spid
。我想 link 他们在我的 table messages
中有一个发件人和收件人列。但如果我将 clientid 和 spid 都引用给发送者和接收者,它似乎不起作用。
引用它们的好方法是什么?
如果消息的发送者和接收者可以在服务提供商 table 的任一客户端中,则您不能使用外键来确保参照完整性。单个外键只能指向一个 table.
如果您坚持使用单独的客户端和服务提供者table,那么您可以使用触发器而不是外键来确保参照完整性。
您将在消息 table 上定义插入/更新触发器,这将检查发送者/接收者是否存在于 2 table 中的任何一个中,如果不存在则引发错误消息.您还必须确保没有客户端与服务提供者具有相同的ID,否则您将无法区分它们。
您将在客户端/服务提供商 table 上定义更新/删除触发器之前,以确保您不会修改具有相关消息的 ID(或更新消息中的 ID table)。
另一种选择是更改您的数据库结构并将客户端和服务提供商移动到一个 table 中。在这种情况下,您可以使用外键来确保数据的参照完整性。