0

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

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

例如

课程表:

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
4

3 回答 3

1

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

于 2013-02-14T21:38:43.650 回答
0

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

于 2013-02-14T21:38:01.093 回答
0

您不必在每个表上指定一个主节点。但是可能会对性能产生影响,因此在这种情况下,我建议您将主键指定为两个字段。

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

于 2013-02-14T21:38:40.393 回答