如何反转外键约束的依赖关系?

时间:2015-11-16 19:36:55

标签: sql

假设我有两个概念,教师和班级。它们很好地映射到两个数据库表,即教师和类。为了表达“每个班级都有教师”的陈述,我在指向教师表的Classes表中添加了一个外键。现在,如果我尝试删除一个Class中使用的Teachers行,我会收到一个很好的错误,说“不能这样做”这就是我想要的。

到目前为止一切顺利。但是,如果我想将这种行为扩展到Pupils呢?即每当我尝试删除属于类的Pupil时,我都希望数据库引擎对我咆哮并说“不能那样做”。

我可以通过在类中创建30个外键来模拟我想要的内容:Pupil_1_ID,Pupil_2_ID,... Pupil_30_ID。但我真正追求的是为任意数量的学生做这件事。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:4)

创建一个代理键表@font-face { font-family: Folks; src: url(/path/to/your/font/file/Folks-Normal.ttf) format('truetype'), } ,其FK为PupilClass,另一个FK为Class。这样你就无法删除班上的学生,也不能删除有学生的班级。

代理表是一种常见的设计模式,当你需要模拟多对多关系时:一个班可以有很多学生,一个学生可以参加很多班。