如何使用主键概念关联3个表

时间:2015-04-17 08:15:59

标签: sql oracle

我想制作3个实体,类,主题和考试,最好的方法是什么,应该是我的主表和主键,我将在其他两个表中用作外国ky

1 个答案:

答案 0 :(得分:0)

问题是通用的。我认为这是从学校的角度来看的。鉴于:

  • 您可以为每个主题提供任意数量的课程
  • 您可以为每个主题进行尽可能多的考试
  • 课程与考试无关

你会有

  • 主题实体,没有外键
  • 一个类实体,取决于主题
  • 考试实体,取决于主题

哪个会产生这个SQL存根:

CREATE TABLE Subject (
    id INTEGER NOT NULL,
    name VARCHAR(50),
    PRIMARY KEY(id)
);

CREATE TABLE Class (
    id INTEGER NOT NULL,
    -- some other defining columns here
    id_subject INTEGER,
    PRIMARY KEY(id),
    FOREIGN KEY(id_subject) REFERENCES Subject(id)
);

你需要同样的考试。作为旁注,您可能希望将外键置于Class nullable中,因为某些类可能没有主题(例如空闲时间?缺少教师?),但您肯定希望有一个非空约束关于考试中的外键。

由于这看起来像是一项任务,我不会详细介绍......

编辑:如果您的“类”实体意味着学校,您会将Class和Subject与一个附加表联系起来,因为这种关系变为N x M:

CREATE TABLE Subject_Class (
    id_class INTEGER NOT NULL,
    id_subject INTEGER NOT NULL,
    PRIMARY KEY(id_class, id_subject),
    FOREIGN KEY (id_class) REFERENCES Class(id),
    FOREIGN KEY (id_subject) REFERENCES Subject(id)
);

并且您将从Class表中删除外键。