如果存在2个其他表之间的引用,如何阻止插入表?

时间:2017-05-05 04:37:01

标签: sql sqlite

这里的DB完全是新手...试图制作简单的程序来帮助我所在地区的孤儿院。问题:假设我有表A和表B通过外键约束引用表C.有没有办法阻止表A中的插入如果表B中的元素Y已引用X,则引用表C中的元素X?

表A:空的 表B:Y(参考文献X)
表C:X

尝试在表A中插入Z(引用X)

表A:Z(参考文献X)<< ---被阻止的 表B:Y(参考文献X)
表C:X

很抱歉这个新问题,我第一次尝试使用数据库......虽然我做了一些研究,但我甚至不知道在搜索栏上找到适当的术语来查找这种情况。

1 个答案:

答案 0 :(得分:0)

我可能错了,但对我来说,看起来你正试图解决错误的问题......

听起来像表A和B是某种与学生和老师相关的子类型......都是人

我会坚持这里的学生 - 老师的例子,但对于其他可以被对待的实体来说,它们都是一样的

因此,根据您想要的关系,作为学生或教师的人的状态可以是人员表中的鉴别字段,告诉您某个人的子类型,或者它可以是另一个人的一部分具体的关系,例如,如果你有一个人可以在一个案件中同时成为一名学生的情况,同时又在另一个案件中是一名教师......(鉴别者字段将转移到描述这种关系的表格中,因此你得到一个鉴别器具体关系)

在你的抽象世界中,A,B和C看起来像这样:

一个
[A1]
[A2]


[B1]
[B2]

Ç
[C1]

ř
[R1; C1; A1; NULL; A]

而R的列是:
PK
C参考
参考文献
B参考
鉴别者

和R的约束将列C ref限制为唯一

唯一的是阻止你描述的不需要的额外引用的东西,并且会阻止插入到R(不完全是你想要的,因为你仍然可以在A中有一个条目......但它会阻止额外的引用已经引用的C实体,很可能就足够了)