正确使用关联类
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】:几乎。菱形(或菱形)形状的元素本身就是一个关联类,它将所有连接的类关联起来。你想要的是 Student
和 Studies
之间的简单关联类,如下所示:
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
可以授予Student
和Course
的组合。
【讨论】:
以上是关于正确使用关联类的主要内容,如果未能解决你的问题,请参考以下文章
使用 pandas/pytables 处理与多个索引值关联的关联数据项列表的正确方法