假设我有两个概念,教师和班级。它们很好地映射到两个数据库表,即教师和类。为了表达“每个班级都有教师”的陈述,我在指向教师表的Classes表中添加了一个外键。现在,如果我尝试删除一个Class中使用的Teachers行,我会收到一个很好的错误,说“不能这样做”这就是我想要的。
到目前为止一切顺利。但是,如果我想将这种行为扩展到Pupils呢?即每当我尝试删除属于类的Pupil时,我都希望数据库引擎对我咆哮并说“不能那样做”。
我可以通过在类中创建30个外键来模拟我想要的内容:Pupil_1_ID,Pupil_2_ID,... Pupil_30_ID。但我真正追求的是为任意数量的学生做这件事。
我怎样才能做到这一点?
答案 0 :(得分:4)
创建一个代理键表@font-face {
font-family: Folks;
src: url(/path/to/your/font/file/Folks-Normal.ttf) format('truetype'),
}
,其FK为PupilClass
,另一个FK为Class
。这样你就无法删除班上的学生,也不能删除有学生的班级。
代理表是一种常见的设计模式,当你需要模拟多对多关系时:一个班可以有很多学生,一个学生可以参加很多班。