映射关系——外键或映射表

Dre*_*mer 0 mysql database sql-server oracle

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

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

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

class <--> Student <--> Teacher <--> class
Run Code Online (Sandbox Code Playgroud)

(假设一个老师可以教多个班级)这是一个many-to-many回合关系的正常情况。并且查询可以从任意对等点开始向任意方向进行。那么什么是更好的设计呢?

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

提前致谢。

Gri*_*Dog 6

一些简单的规则:

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

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

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

例如,假设我们有表STUDENTCLASSTEACHERSTUDENT一般来说,和之间是多对多的关系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.
Run Code Online (Sandbox Code Playgroud)