【问题标题】:Question answered by teachers and students - Database design师生答疑——数据库设计
【发布时间】:2020-08-17 11:44:26
【问题描述】:

我正在设计一个数据库。 我有问题、答案、学生和教师实体 只有学生提出的问题,但老师和学生都回答了,如下:

所以答案应该只有一个教师 ID 或学生 ID 如何在不使用继承的情况下在类图中表示它?

【问题讨论】:

  • 澄清一下,答案可以由教师或学生提供,并且您希望显示回答者,但您不想创建一个泛化类作为学生和教师的超类。我是否正确理解了您的问题?
  • 你在追求什么?您将其标记为 UML,但您想设计一个数据库。这并不矛盾,但有不同的目标。以上不是UML。
  • 你说只有学生提出的问题答案应该只有一个教师ID或卖家ID这是矛盾的(因为卖家 id 指的是提出问题的人,而不是回答的人)。请澄清您的问题,同时回答之前的评论,目前无法帮助您
  • @Ister 是的,没错
  • @qwert_so 是的,上面不是UML图,我只是为了澄清而制作的

标签: database class uml diagram


【解决方案1】:

Student 提出的QuestionsStudentTeacher 提供的相关Answer 的要求可以在constraint 的帮助下在UML 中表示:

因此,在模型 2 中,关于回答者的答案可能存在关联:学生和教师。但是约束说明对于给定的答案,只有其中一个是活动的。约束用大括号表示。您可以使用自然语言(或像我在这里所做的那样的伪自然语言),或者使用更正式且不那么模棱两可的 OCL 表达式。

在关系数据库中,您可以完全使用此方案,并具有两个可为空的外键,例如ByStudentByTeacher,并且您的代码必须确保遵守约束。

在 UML 中表示这一点的另一种方法是在泛化的帮助下显示缺失的概念:

这在概念上更有希望。然而,在关系数据库中,没有办法直接表达这一点。因此,您需要使用一些最终与上述内容非常相似的表映射,或者使用额外的single inheritance table 来映射Author

【讨论】:

  • 感谢您的解释,这正是我所需要的,它很有帮助
  • 我没有添加我自己的答案,因为这将是这个答案的复制。
猜你喜欢
  • 2011-12-15
  • 2018-08-26
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多