尝试在这里获得一些专业的想法,了解在创建架构关系时哪个选择更好
我粗略地从这个post找到了一个想法,但仍然试图获得更多的想法。
一个简单的场景可能是这样的:
class <--> Student <--> Teacher <--> class
(假设老师可以教多个班级)
这是一轮正常情况,many-to-many
关系。查询可以从任何对等点开始到任何方向。那么什么是更好的设计呢?
我知道在一对一的关系中,映射表绝对是一种浪费,但映射表解决方案ONLY
对于many-to-many
关系是否有用,就像提到的帖子一样?如果我们想要与方向扩展多对多的关系。如果关系为one-direction
而不是bidirectional
,答案可能会有所不同吗?
提前致谢。
答案 0 :(得分:4)
一些简单的规则:
对于一对一关系,外键可以保存在关系中涉及的任一表中,引用另一个表。
对于一对多的关系,关系的许多方面的表应该保存外键。
对于多对多关系,您可以创建一个关联表(您的术语中的映射表),这是第三个表,其中包含多对多关系中涉及的两个表的外键。
例如,假设我们有表STUDENT
,CLASS
和TEACHER
。通常,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.
答案 1 :(得分:1)
如果你有多对多的关系,那么,是的,你需要一个映射表。实际上没有其他合理的方法来存储关系数据库中多对多关系的信息(当然,有许多不合理的方法可以这样做)。
如果你想要这种关系是单向的(这似乎很奇怪 - 我无法想象实体A与实体B有关系的情况,其中B与A没有关系,所以我倾向于怀疑如果你想实现类似的东西,数据模型是不正确的,你仍然会使用映射表。您可能会在存储DIRECTION
的映射表中添加另一列(即“A - > B”或“B - &gt; A”)。