正确使用关联类

Posted

技术标签:

【中文标题】正确使用关联类【英文标题】:Correct use of an association class 【发布时间】:2017-10-27 15:13:57 【问题描述】:

我是使用 UML 的新手,我不确定我的图表是否正确。我想请比我更有经验的人给我一些建议。

我的问题陈述说:

学生学习课程,每个学生可以参加几门课程“学习”。任何课程都可以有多个学生学习。

通过数字代码识别的学生有姓名、出生日期和一个或多个国籍。 学习的学生可以获得奖学金。

学生每门课程可以获得多个奖学金。和 个人奖学金可以提供给不止一名学生。这 奖学金有一个数字代码,可以识别他们,一个名字,一个 基础金额和不同的条件要满足的时间 任务。

我的建议如下:

我想要代表学生、助学金和学生修读的课程,我不确定我应该使用关联关系还是三元关系。

谁能确认我的提议 UML 图是否正确?

【问题讨论】:

【参考方案1】:

与学生、课程和助学金直接相关的唯一声明是不清楚“[a s]学生每门课程可以获得多个助学金”。

它实际上只是说每个学生-课程对可以有多个关联的资助。 (也许作业的作者认为“每个”句子的含义不止于此,但事实并非如此。)它并没有说明学生 他们的助学金是否取决于他们的课程,如果是的话,如何时间>。当给定一个三元组时,您的设计是最好的,您无法说出任何其他三元组的任何信息。如果您知道学生和课程对,那么当您知道学生和课程对时,最好使用带有 th FK(外键)student, course 的 Takes(student,course) 和 Receives(student, course, grant) 的设计。 .如果助学金是独立于课程给予学生的,那么带有 Takes(student,course) & Receives(student,grant) 的设计就足够了。

与你的导师澄清。

【讨论】:

【参考方案2】:

几乎。菱形(或菱形)形状的元素本身就是一个关联类,它将所有连接的类关联起来。你想要的是 StudentStudies 之间的简单关联类,如下所示:

Scholarship 代表学生在特定学习中通过的考试。关联类关系由关联的虚线表示(具有 m-n 重数)。

【讨论】:

Studies 对我来说似乎不是一个有效的课程。 @JimL。我猜它应该是课程。我倾向于在这里给出相当简洁的答案,因为在大多数情况下,模型是“有待讨论的”,这就是使用 UML 的原因。所以通常你没有答案,只有深思【参考方案3】:

在您了解任何属性之前,我看不到问题陈述中的名词与您的类之间的相关性。我希望看到以下课程:

Student Course Nationality Scholarship

我还希望看到一个名为 CourseEnrollment 的关联类,它在关联的末尾将具有以下斜体属性:

Student 学习课程 [1..*] Course Course 正在学习的学生 [1..*] Student

该关联类将与Scholarship 建立另一个关联,称为ScholarshipAward,该关联的末尾将具有以下斜体属性:

CourseEnrollment awardedScholarship [0..*] Scholarship Scholarship receivingCourseEnrollment [0..*] CourseEnrollment

通过这种安排,Scholarship 可以授予StudentCourse 的组合。

【讨论】:

以上是关于正确使用关联类的主要内容,如果未能解决你的问题,请参考以下文章

EF 4.2 和继承的类关联属性的几个问题

使用 pandas/pytables 处理与多个索引值关联的关联数据项列表的正确方法

使用 Rspec 测试“关联”的正确方法?

使用关联实体的正确方法是啥?

使用 sequelize N:M 关联实现“平坦”结果的“正确”方法是啥

在平行继承层次结构中通过父母关联孩子