用于多对多关系的数据库表的键

时间:2013-02-14 21:32:30

标签: mysql sql database

我想问一个基本的数据库问题:

如果我有两个表来形成多对多的关系,那么我在两个表之间包含另一个表来通过创建一对多关系来停止这种关系,我创建的新表中的字段是否必须是主键和foriegn键还是应该是foriegn键?

E.G

课程表:

CourseId (PK auto)  CourseNo  CourseName
1                   2343      ICT
2                   4030      Maths

Course_Module表:(这是我要问的表格,应该是PK还是FK):

CourseId (FK course)  ModuleId (FK Module)
1                     3
1                     2
2                     1
2                     2

模块表:

ModuleId (PK auto)  ModuleNo  ModuleName
1                   344       Algebra
2                   223       Statistics
3                   303       Systems Stratergy

3 个答案:

答案 0 :(得分:1)

它们必须是复合PK(即courseId和ModuleId)以及外键,因为您需要将courseId和ModuleId的组合设置为唯一,并且您还需要参照完整性

答案 1 :(得分:0)

通常他们都是。在您的情况下,CourseIdModuleId应在Course_Module表中形成复合主键,同时仍然单独用作外键。您提供的示例数据在该表中具有唯一的行,这是我的决定点。

答案 2 :(得分:0)

您没有 在每个表格上指定主要内容。但是可能会对性能产生影响,因此在这种情况下,我建议您将主键指定为两个字段。

另请注意,您不必将字段指定为外键,而在MySQL的某些引擎上,您实际上没有使用外键的选项。