首页 > 解决方案 > 在 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 来确保每个父母只有一个孩子,但我不知道该怎么做,或者是否有可能

标签: mysqlsqlparent-child

解决方案


父母是一个个体,一个孩子是一个个体,一个孩子可以有很多父母,所以 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)
);

推荐阅读