我见过很多学校、教师和所有联结/关联表的 ERD。他们总是有三个表:
- 教师
- 学生
- 他们之间的关联表,也许是类似的主题。
假设老师不能是学生,反之亦然。但是,如果学生也可以是老师(显然是非小学)怎么办?如果我保持传统的观点,那么我最终会得到师生之间重复的数据,比如名字。我错过了什么?
设计是否糟糕:
Person table
----
person_unique_id
lastname
firstname
...
Teacher table
----
teacher_unique_id
person_unique_id
subject_unique_id #if I want to know what this person can teach.
Subject table
----
subject_unique_id
我仍然需要为所有多对多关系创建一个关联表,例如:
schedule
----
schedule_unique_id
person_unique_id
teacher_unique_id
subject_unique_id
time
date
room
....
然后我可以做类似的事情:
SELECT * FROM Person p, Teacher T, Subject s
WHERE p.person_unique_id = t.person_unique_id
AND t.subject_unique_id = s.subject_unique_id
AND p._person_unique_id = 12;
你说的有道理,是的。
一件事是你实际上不能在不排除教师的情况下选择学生......即使你这样做了,如果没有进一步的努力,同样是教师的学生也会丢失。所以也许有一个学生表以及分配学生的人是有意义的,就像你对老师所做的那样。
含义:P1 是老师。P2 是学生。...
肯定有更多可能的解决方案。我认为这完全取决于您的要求,任何解决方案都必须有效。
学生有时也可能是老师,甚至可能在他或她是学生的地方教授课程……或者也许学校管理部门使用了不同学校的数据库,比如小学和父母夜校的时间相同。也许那时需要额外的灵活性。
基本上只是继续考虑规范化来解决您的需求并获得有价值的模型。使用 m:n 表来解决这个问题只是遵循规范化规则。
规范化 howto 示例:
https://www.studytonight.com/dbms/database-normalization.php