mysql - 在数据库中使用循环外键引用
问题描述
我有两个(mysql)表 -company
和user
. 它们的结构如下:
`user`
- id
- company_id (FK to company)
- name
`company`
- id
- name
- admin_user_id (FK to user)
表user
外键指向company
表,反之亦然。
我想知道上面的模式是否可以,如果不是为什么不可以,可以做些什么来改进它。
解决方案
在高层次上,您的数据模型是有意义的。但是,您不能保证admin_user_id
指向user
同一公司。您可以通过以下方式解决此问题:
create table users (
user_id int auto_increment primary key,
company_id int,
name varchar(255),
unique (company_id, user_id) -- redundant but desirable for the foreign key reference
);
create table companies (
company_id int auto_increment primary key,
name varchar(255),
admin_user_id int,
foreign key (company_id, admin_user_id) references users(company_id, user_id)
);
alter table users
add constraint fk_users_company_id
foreign key (company_id) references companies (company_id);
推荐阅读
- python - 无法正确重新定位存储在列表中的图像
- python - 转换数据时间数据类型时出现无效的比较错误
- vaadin - 有没有办法让组合框像 Vaadin Flow 中的 Select 一样呈现选定的值?
- python - Traceback(最近一次通话最后一次):in
助手.train_model() - javascript - ECharts 5 雷达图作为可配置功能
- sql - Oracle SQL To_Char(interval) 没有使用我的格式字符串?
- python - 如何删除 DataFrame 中包含数字的行
- java - 安卓 BLE 扫描
- nix - `!a 是什么意思?b` 在 Nix 表达式中是什么意思?(即,属性集的布尔否定)
- reactjs - 如何使用 GetServerSideProps 选择要渲染的内容