0

我已经阅读了一些 UML 类图。我以这种方式看到了一些 UML 设计:

例如:有两个类:Student 类和 Transcript 类。每个学生都有一份成绩单,每一份成绩单都和一个学生在一起。因此,班级学生和班级成绩单是相互依赖的。那么,这是一门精心设计的课程吗?

如果没有,我们该如何解决这个问题。如果这没问题,我怎样才能很好地实现这种关系?

谢谢 :)

4

2 回答 2

1

我不会说这是一个非常好的设计:显然,你想要student.transcript.student == student并且transcript.student.transcript == transcript在任何特定时刻都是真实的,对吧?但是没有成绩单的学生呢?没有学生的成绩单?如果这些被禁止,您可能会以一个有趣的情况结束:您必须同时创建相应的StudentTranscript

好吧,在数据库领域,这通常用三个表建模(可能直接对应于实际物理表,也可能不直接对应):

TABLE Student ( studentId ID PRIMARY KEY, ... )

TABLE Transcript ( transcriptId ID PRIMARY KEY, ... )

TABLE StudentTranscriptLink (
    studentId ID NOT NULL UNIQUE REFERENCES Student(studentId),
    transcriptID Id NOT NULL UNIQUE REFERENCES Transcript(transcriptId)
) PRIMARY KEY ( studentId, transcriptId )

UNIQUE约束确保如果您选择学生,获取其成绩单,并获得该成绩单的学生,您将返回到您开始使用的原始学生;Transcript->Student->Transcript导航也是如此。

在 OOP 世界中,您可能会有某种StudentTranscriptDispatcher内部信息List<Pair<Student, Transcript>>,以及Student转入Transcript和返回的方法。

然而,这种双向关系是……不寻常的。它基本上是将一个大物体切成两半——但仍然将这两半紧紧地绑在一起。你为什么要这样做?相反,它并没有消除任何复杂性:它引入了以前没有的新的、人为的复杂性。

于 2012-11-12T11:41:07.860 回答
0

您可能应该在这里考虑的是可导航性。听起来这种关系是完全合适的,但是,您是否必须从 toTranscript导航Student?如果不是,则您的关系不是双向的,并且Transcript不再依赖于Student. 你总是Student先找到 a 再找到 aTranscript吗?

老实说,我不会担心太多。如果它适合你 - 去吧!

于 2012-11-12T08:34:27.523 回答