parent
实体需要 一个 child
实体进行标记。因此,我添加了一个字段marked_child_id
。
我如何限制此字段只接受id
的{{1}}个实体中的child
个?
答案 0 :(得分:1)
您可以使用循环FK参考进行此操作。这些很棘手,因为您必须在创建引用表之后才能声明外键约束。
CREATE TABLE parent (
parent_id INT NOT NULL,
marked_child_id INT,
PRIMARY KEY (id)
);
CREATE TABLE child (
child_id INT NOT NULL,
parent_id INT NOT NULL,
PRIMARY KEY (child_id),
UNIQUE KEY (child_id, parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(parent_id)
);
上面创建了子->父引用,这是预期的。
然后,您需要添加FK约束,以便marked_child_id引用子表的主键:
ALTER TABLE parent
ADD FOREIGN KEY (marked_child_id, parent_id)
REFERENCES child(child_id, parent_id);
我已对以上内容进行了修改,以回复您的评论。
marked_child_id
可能为NULL,因此您可以在添加子项之前创建父行。答案 1 :(得分:0)
注意:这是对原始问题进行编辑之前的答案。
在child
中使ID和父项唯一,并在marker
中对其进行引用。
CREATE TABLE parent
(id integer,
PRIMARY KEY (id));
CREATE TABLE child
(id integer,
parent_id integer,
PRIMARY KEY (id),
FOREIGN KEY (parent_id)
REFERENCES parent
(id),
UNIQUE (parent_id,
id));
CREATE TABLE marker
(parent_id integer,
child_id integer,
PRIMARY KEY (parent_id),
FOREIGN KEY (parent_id,
child_id)
REFERENCES child
(parent_id,
id));