2015-04-17 49 views

回答

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) 
); 

你需要参加考试一样。作为一个方面说明,您可能希望将外键放在类为空的位置,因为可能没有某个类的主题(例如空闲时间?缺少老师?),但是您肯定会希望有一个非空约束考试中的外键。

因为这看起来像一个任务,我不会进入详细内容...

编辑:在这种情况下你的“类”实体,意味着你将涉及类和对象有一个额外的表学年,因为这个关系变为N×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表中删除外键。

+0

谢谢,但我的问题是假设为一个班级,把它作为第8类,他们有5个科目英语,数学,生命科学,物理科学,历史。那么我怎么能与id相关?第5课的意思是我必须逐个添加每个主题? –

+0

在这种情况下,您会将Class和Subject与一个附加表关联起来,因为此关系变为N x M:编辑我的答案。 –