一个 USER 是一个 PERSON,一个 PERSON 有一个 COMPANY - user -> person 是一对一的,person -> company 是多对一的。
person_id 在 USER 表中是 FK。 company_id 在 PERSON 表中是 FK。
人可能不是用户,但用户始终是人。
如果 company_id 在用户表中,我可以根据用户名和 company_id 创建一个唯一键,但事实并非如此,如果是,则会重复数据。
目前,我正在 RoseDB 管理器包装器代码中实现唯一的用户名/公司 ID 规则,但感觉不对。如果可以的话,我想在数据库级别定义唯一规则,但我不确定如何处理它。我试过这样的事情:
alter table user add unique(used_id,person.company_id);
但这不起作用。
通读文档后,我找不到任何类似的示例。我是在尝试添加不存在的功能,还是遗漏了什么?
最佳答案
好吧,没有什么简单可以满足您的需求。您可以使用 BEFORE INSERT
和 BEFORE UPDATE
triggers 强制执行所需的约束, 尽管。参见 this SO question about raising MySQL errors了解如何处理使触发器失败的问题。
关于sql - 在 MySQL 中跨链接表实现 UNIQUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1452097/