【问题标题】:Circular relationship in the student management学生管理中的循环关系
【发布时间】:2013-07-08 10:13:36
【问题描述】:

我正在处理学生、助教、老师和班级的关系。 每个班级都与一位教授和一位助教相关联,但助教也可以是学生。所以,我想出了这样的想法(下图),但我不确定创建这样的循环关系是否正确?

提前谢谢你。

【问题讨论】:

  • 这取决于你想如何建模。对吗?
  • 但是对于您的 Class 实体,TA 不是 Student 上下文中该类的一部分,对吗?为什么不创建一个单独的 TA 实体?您正在强迫学生同时成为 TA (ISTA) 标志。如果将来您需要将其他属性添加到 TA(办公室电话号码、电子邮件)或其他与学生无关的属性怎么办?这些属性去哪儿了?或者创建一个可供 TA 和教授使用的 Faculty 实体。只是一个想法。
  • 您的意思是将 TA 与教授合并为一个教师实体吗?如果是,我们怎么知道谁是教授,谁是助教?此外,我们必须创建从教员到班级的 2 行,因为我们有一名助教和一名教授被分配到一个班级。

标签: database database-design relational-database


【解决方案1】:

如果一个人永远不能同时是同一个班级的学生和助教,那么它永远不应该完全构建一个循环关系。您可以通过在允许在数据库中设置值之前检查这种情况来防止这种情况发生。

即使发生,我也不相信会有问题。循环关系的问题是一个值最终永远不会被定义(又名StudentID 被引用为每个表的外键,但从未定义)。在您的数据库布局中并非如此。

【讨论】:

  • 如果一个人既可以是学生又可以是同一个班级的助教,这是不现实的。但是,感谢您回答我并指出我必须防止的其他情况。
【解决方案2】:

你的布局不是圆形的;你有:

Class-list -> Student

Class-list -> Class -> Student

只有包含Student -> Class-list,您的布局才会变成圆形

我看不出你有什么问题。

【讨论】:

    【解决方案3】:

    在我看来还可以,但您可能想考虑一下是否所有的助教都会成为学生。

    表之间的线是关系。因此,在这种情况下,您并没有真正创建循环引用。

    在一条路径中,您是说一个 class_list 有一个学生,一个 class 有多个 class_list。在另一条路径中,您是说一个班级有一个助教,他必须是学生(可能设置了“isTA”标志)

    这里没有什么可以阻止学生上课和助教,但这也不会是世界末日。这种情况很可能会出现。

    【讨论】:

    • 问题是,你认为什么更好?您可以创建一个“人”表而不是学生/助教/讲师表,以防万一讲师也是学生。会更好吗?我不知道。
    猜你喜欢
    • 1970-01-01
    • 2018-05-20
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 2018-09-18
    相关资源
    最近更新 更多