0

尝试在这里获得一些关于创建模式关系时哪种选择更好的专业想法

我大致从这篇文章中找到了一个想法,但仍然试图获得更多的想法。

一个简单的场景可能是这样的:

class <--> Student <--> Teacher <--> class

(假设一个老师可以教多门课)这是many-to-many一轮关系的正常情况。并且查询可以从任何对等点开始到任何方向。那么还有什么更好的设计呢?

我知道在一对一的关系中,映射表绝对是一种浪费,但是映射表解决方案ONLY对关系有好处many-to-many吗,就像提到的那个帖子一样?如果我们想用方向扩展多对多关系。如果关系one-direction不是bidirectional,答案会不同吗?

提前致谢。

4

2 回答 2

4

一些简单的规则:

对于一对一的关系,外键可以保存在关系中涉及的任何一个表中,引用另一个表。

对于一对多关系,关系多方的表应该保存外键。

对于多对多关系,您可以创建一个关联表(用您的话来说是映射表),它是第三个表,其中包含多对多关系中涉及的两个表的外键。

例如,假设我们有表STUDENTCLASSTEACHER。通常, 和 之间存在多对多的关系,STUDENT并且CLASS从 TEACHER 到 CLASS 是一对多的关系(假设一个班级只有一位老师)。因此,这些表可能如下所示:

STUDENT: STUDENT_ID, STUDENT_NAME, etc.
CLASS: CLASS_ID, TEACHER_ID (foreign key), CLASS_NAME, etc.
TEACHER: TEACHER_ID, NAME, etc.
STUDENT_CLASS (mapping table): STUDENT_ID (foreign key), CLASS_ID (foreign key), GRADE, etc.
于 2012-12-05T21:57:31.130 回答
1

如果你有一个多对多的关系,那么,是的,你需要一个映射表。确实没有其他合理的方法可以在关系数据库中存储有关多对多关系的信息(当然,有许多不合理的方法可以这样做)。

如果您希望关系是单向的(这似乎很奇怪——我无法想象实体 A 与实体 B 有关系而 B 与 A 没有关系的情况,所以我倾向于怀疑数据如果您想实现类似的东西,模型不正确),您仍然会使用映射表。您可能会在映射表中添加另一列来存储DIRECTION(即“A -> B”或“B -> A”)。

于 2012-12-05T21:53:21.537 回答