考虑一个情况,我定义了一个对象,一组对象,则表链接在一起:外键表A或B表
CREATE TABLE obj (
id INTEGER PRIMARY KEY,
name text
) ;
CREATE TABLE group (
id INTEGER PRIMARY KEY ;
grpname TEXT
) ;
CREATE TABLE relation (
objid INTEGER,
grpid INTEGER,
PRIMARY KEY (objid, grpid)
) ;
我找级联删除时适用,所以我添加外键
ALTER TABLE relation
ADD FOREIGN KEY (objid)
REFERENCES obj(id)
ON DELETE CASCADE ;
ALTER TABLE relation
ADD FOREIGN KEY (grpid)
REFERENCES group(id)
ON DELETE CASCADE ;
到目前为止都行。现在假设我想为群组添加支持。我想改变这样的关系表:
CREATE TABLE relation_ver1 (
parent INTEGER,
child INTEGER,
PRIMARY KEY (parent, child)
) ;
ALTER TABLE relation_ver1
ADD FOREIGN KEY (parent)
REFERENCES group(id)
ON DELETE CASCADE ;
在这里,我得到了一个问题:我想申请级联删除对孩子太多,但我不知道这里是否孩子是指一组或对象。
可以向表obj或组添加外键吗?
我发现唯一的解决方案是增加child_obj和child_grp字段,添加相关的外键,然后,当插入例如一个对象时使用'特殊'(空类)组,然后做相反的事情插入子组。
您的要求与关系理论中“关键”的概念不相容。你提到的解决方案已经很好了,我想。 – ultrajohn
关于代理人的任何暗示? @ultrajohn – marom
为了防止你的数据在relation_ver1表中稀少,我建议你将一个孩子是一个对象而一个孩子是一个组的情况分离到他们自己的表中。 – ultrajohn