创建一个包含组合主键的表

时间:2016-05-11 09:43:20

标签: oracle oracle11g

我有一张桌子:

course
---------
id_course
id_groupe (references a table named group)
id_module (references a table named module)

在我的情况下,许多团体可以共享课程。

我的问题是:

  • 选择由(id_course,id_group)组成的主键是正确的吗?
  • 还有其他方法可以制作同一张桌子吗?

2 个答案:

答案 0 :(得分:0)

如果你有一个可以被许多团体共享的课程,我会想到一个不同的设计,一个连接COURSE和GROUPE的关系表;这个表可以有一个复合PK,基于两个外键列:

COURSE
  id_course PK
  id_module KF references MODULE

MODULE
  id_module PK

GROUPE
  id_groupe PK

COURSE_REL_GROUPE 
  id_course FK references COURSE
  id_groupe FK references GROUPE
    PRIMARY KEY (id__course, id_groupe)

答案 1 :(得分:0)

让我们假设该课程有另一个属性 - 标题。

问自己这个问题:

  

如果A" A组"的成员正在改变该课程的名称。或者" B组"?

对于大多数院校来说,一门课程将有一套标题,无论是谁参加该课程,所以使用你的桌面结构,你必须在每个课程/小组组合中复制标题,并打破数据库规范化的概念。

您最好将表格拆分为两个表格:

course
---------
id_course    (Primary Key)
title

course_group
------------
id_course    (FK referencing course) } composite PK
id_groupe    (FK referencing groupe) }

然后您可以设置课程的标题,它独立于与课程相关的组。当然,您可以在course_group表上有一个复合主键,其中包含两个ID以强制执行唯一性。