parent
实体需要标记一个child
实体。因此,我添加了一个字段marked_child_id
。
我如何限制这个字段只接受id
的child
实体的parent
s?
您可以使用圆形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)
);
上面创建了child - > parent引用,这是预期的。
然后,您需要添加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,因此您可以在添加子项之前创建父行。注意:这是在编辑之前对原始问题的答案。
在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));