sql - 在 MySQL 中跨链接表实现 UNIQUE

标签 sql mysql database-design constraints data-modeling

一个 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 INSERTBEFORE UPDATE triggers 强制执行所需的约束, 尽管。参见 this SO question about raising MySQL errors了解如何处理使触发器失败的问题。

关于sql - 在 MySQL 中跨链接表实现 UNIQUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1452097/

相关文章:

sql - 为具有多种数据的模型设计数据库模式

mysql - 创建一个触发器来插入一些内容,如果

sql - 克隆数据库并进行备份可能吗?

mysql - SQL 派生表

mysql - Hibernate多次查询或通过一次查询获取相关行并在java中处理它们

php - 如何从 RETS 搜索查询向表中插入数据?

sql - 从 Return 语句获取一个数组,从中推导出一个字符串

sql - (如何)我可以在 MyBatis 的 SQL 查询中安全且与数据库无关地使用 "LIKE"吗?

mysql - 执行具有完整性约束的 'subset' 关系的最佳方法是什么

mysql - 如何从一列引用不同的表?