我可以使用关联(或“链接”)表来模拟多对多关系,例如Student
<- Enrolment
-> Course
,其中注册描述了学生和课程之间的基本关系。
我也可以有Course
->Department
和Course
-> Language
,其中语言和部门都是课程的属性,但它们之间没有特殊关系。
这两个场景看起来很相似,但我不会调用Course
关联表......它还有其他名称吗?有没有一种合乎逻辑的方法来区分这两种情况?
我可以使用关联(或“链接”)表来模拟多对多关系,例如Student
<- Enrolment
-> Course
,其中注册描述了学生和课程之间的基本关系。
我也可以有Course
->Department
和Course
-> Language
,其中语言和部门都是课程的属性,但它们之间没有特殊关系。
这两个场景看起来很相似,但我不会调用Course
关联表......它还有其他名称吗?有没有一种合乎逻辑的方法来区分这两种情况?
您的技术名称
association (or 'linking') table
是associative entity
- 该页面上列出了大约 15 个替代名称。我在这里探讨了这些背后的逻辑——特别是PRIMARY KEY
链接表中的 s 应该是链接表中两个FOREIGN KEY
s 的组合。在没有看到你的 DDL 的情况下,我觉得你
Course -> Department
和Course -> Language
桌子是你共同或花园Parent -> Child
关系的例子。这些都在这里简单明了地解释。父表字段必须要么是
PRIMARY KEY
表的,要么至少是UNIQUE
(并且在这种情况下被索引,PK
s 通常被自动索引)。子表字段显然不必UNIQUE
但应该被索引,因为它通常是JOIN
任何 SQL 查询中的 ing 字段。由于NULL
值逻辑的乐趣,UNIQUE
父字段可以是NULL
(参见小提琴here),但是我强烈建议NOT NULL
向该父字段添加约束!我想你的
Course -> Department
场景看起来像这样(参见这里的小提琴- 示例是 PostgreSQL,但它适用于 dbfiddle.uk 上的每个服务器):和
这些表声明的重要部分(对于本次讨论)是:
因此,
department
在这种情况下,表是父表,而子表是course
我想的问题的重点。意思是对于表中的CONSTRAINT
任何course_dept
条目,course
表中必须有对应的条目department
!如果您觉得这个解释不令人满意,请告诉我(为什么),我会尝试进一步澄清。ps 欢迎来到论坛!