mysql - 在 SQL 中,在父子关系中,有没有办法确保每个父节点只链接到一个子节点?
问题描述
我有亲子关系,我想在我的数据库中确保每个父母都只链接到一个孩子。这是我所拥有的一个例子
CREATE TABLE Parents (
ParentId int NOT NULL,
...
PRIMARY KEY (ParentId)
);
CREATE TABLE Children1 (
ParentId int NOT NULL,
...
PRIMARY KEY (ParentId),
CONSTRAINT FK_Parent FOREIGN KEY (ParentId) REFERENCES Parents(ParentId)
);
CREATE TABLE Children2 (
ParentId int NOT NULL,
...
PRIMARY KEY (ParentId),
CONSTRAINT FK_Parent FOREIGN KEY (ParentId) REFERENCES Parents(ParentId)
);
CREATE TABLE Children3 (
ParentId int NOT NULL,
...
PRIMARY KEY (ParentId),
CONSTRAINT FK_Parent FOREIGN KEY (ParentId) REFERENCES Parents(ParentId)
);
CREATE TABLE Children4 (
ParentId int NOT NULL,
...
PRIMARY KEY (ParentId),
CONSTRAINT FK_Parent FOREIGN KEY (ParentId) REFERENCES Parents(ParentId)
);
我想通过验证孩子的 PK 来确保每个父母只有一个孩子,但我不知道该怎么做,或者是否有可能
解决方案
父母是一个个体,一个孩子是一个个体,一个孩子可以有很多父母,所以 1 个父母表,1 个孩子表和一个联结表,用一个唯一的父母键代表许多父母。
CREATE TABLE Parents (
Id int NOT NULL,
...
PRIMARY KEY (ParentId)
);
CREATE TABLE Children (
Id int NOT NULL,
...
PRIMARY KEY (Id),
);
create table parents_children(
children_id int,
parents_id int,
unique key (parent_id),
foreign key (children_id) references children(id),
foreign key (parent_id) references parents(id)
);
推荐阅读
- pandas - 使用 pandas 更改任何形式的日期字符串
- python - 将空格分隔的键值块上的 Python 正则表达式到字典列表
- python - 使用 monad 在 python 中计算循环
- javascript - 使用 AVG() 后访问 MySQL RowDataPacket
- c# - Kafka 集群不可用检测(3 个代理)
- php - 从添加按钮 PHP Codeigniter 加载与 ID 相关的表单字段
- asynchronous - 微服务异步架构实现服务相互关联
- python - 如何在序列中注册 ID 和出现次数(或次数)?
- scala - 需要帮助来解决我的代码中的一个问题
- android - 使用 Twilio 可编程聊天聊天模块启用 Proguard 后无法正常工作