有三个实体:
School, teacher and student
字符串
有一些规则:
- 一个学生只能属于一个老师
- 一个学生只能属于一所学校
- 一个教师可以属于一个或多个学校
这意味着我的表中有这些关系:
- 表学生有一个链接到老师和一个到学校
- 表教师与学校有一个链接表(多对多关系)
这就是问题所在。假设有以下情况
School A school B
| |____ |
| | |
| Teacher John
| |
| |
Student Ale
型
正如你所看到的,老师John连接到两所学校,学生Ale连接到老师John和学校A。
现在老师John离开了学校A,但是学生Ale仍然与现在只属于学校B的老师John联系在一起。事实是Ale不会去学校B,所以在这种情况下,他应该被老师John断开连接。
我试图通过编程来完成所有这些工作,但我怀疑模式中有什么问题。您能发现其中的错误吗?
3条答案
按热度按时间wfypjpf41#
我不是DBMaven,但如果我是你,我会这样做:
字符串
所以你的学生不是链接到老师本身,而是链接到老师和学校之间的链接表,所以如果老师在学校停止教学,你会自动删除老师和学生之间的关系
flvtvl502#
你已经声明你将
students
直接链接到学校。在SQL中,你可以确保只有teachers
是有效的,也有这个学校。在SQL中,这可以通过例如
INNER JOIN
来实现。当教师John离开学校A时,学生Ale必须得到新的教师,或者学生Ale的条目不再有效(并且在使用INNER JOIN
时不会显示)。ix0qys7i3#
从逻辑上讲,你应该设定这样的条件:一个学生只能属于一个属于该学生所在学校的老师
在赋值之前,你可以检查这个条件是否为真。
当老师更新他的学校时,你应该再次检查学生-教师分配。