Database 学生管理中的循环关系
我正在研究学生、助教、教师和班级的关系。 每个班级都有一名教授和一名助教,但助教也可以是学生。所以,我提出了这样的想法(下图),但我不确定建立这样的循环关系是否正确 先谢谢你Database 学生管理中的循环关系,database,database-design,relational-database,Database,Database Design,Relational Database,我正在研究学生、助教、教师和班级的关系。 每个班级都有一名教授和一名助教,但助教也可以是学生。所以,我提出了这样的想法(下图),但我不确定建立这样的循环关系是否正确 先谢谢你 如果一个人不能同时是同一个班级的学生和助教,那么他就不应该完全构建一种循环关系。您可以通过在允许在数据库中设置值之前检查这种情况来防止这种情况的发生 即使发生了,我也不认为会有问题。循环关系的问题在于,值最终从未定义(akaStudentID被引用为每个表中的外键,但从未定义)。数据库布局不是这样。您的布局不是圆形的;你有
如果一个人不能同时是同一个班级的学生和助教,那么他就不应该完全构建一种循环关系。您可以通过在允许在数据库中设置值之前检查这种情况来防止这种情况的发生
即使发生了,我也不认为会有问题。循环关系的问题在于,值最终从未定义(aka
StudentID
被引用为每个表中的外键,但从未定义)。数据库布局不是这样。您的布局不是圆形的;你有:
班级列表->学生
及
班级列表->班级->学生
只有包含Student->Class list
我看不出你有什么问题。我觉得没问题,但你可能想考虑一下,是否所有助教都是学生 表之间的行是关系。因此,在本例中,您并不是真正创建循环引用 在一条路径中,你说一个班级有一个学生,一个班级有多个班级。在另一条路径中,你说一个班级有一个助教,他必须是学生(可能设置了“isTA”标志)
这里没有什么可以阻止学生上课和助教,但这也不会是世界末日。很可能会出现这种情况。这取决于您希望如何对其建模。对吧?但就你的班级实体而言,助教不是学生背景下班级的一部分,对吗?为什么不创建一个单独的TA实体?你正在强迫一名学生同时成为TA(IsTA)标志。如果将来,您需要在TA(办公室电话、电子邮件)或其他与学生无关的内容中添加其他属性,该怎么办?这些属性去哪里了?或者创建一个教师实体,供助教和教授使用。只是一个想法。你的意思是把助教和教授合并为一个教员实体吗?如果是,我们如何知道谁是教授,谁是助教?此外,我们必须从教员到班级创建两条线,因为我们有一个助教和一个教授被分配到一个班级。如果一个人可以同时是同一个班级的学生和助教,这是不现实的。不过,谢谢你的回答,并指出了我必须避免的其他情况。问题是,你认为什么更好?您可以创建一个“person”表,而不是student/TA/讲师表,以防讲师也是学生。这样会更好吗?我不知道。