代表数据库中的时间表

时间:2011-01-27 10:54:00

标签: sql mysql database-design timetable

我想在mysql数据库上表示时间表。 我知道我应该有三张桌子:

  1. 一个classdetails表 - 包含课程容量,课堂名称等。
  2. 一个class_sessions表,其中包含:start_time和session_out_time,
  3. 一个class_unit表,其中包含:课程名称(MAT003.set.c)
  4. class_sessions表和class_unit表中也会有适当的外键。

    最终我希望能够查询“免费”类(在运行查询时目前没有类的类)并返回其名称,例如(Room 5b)

    我列出的表格是否足以满足当前的查询?

    任何有关如何做到这一点的想法都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

这就是你所说的,但我仍然没有100%自信你说的是你想要的。 : - )

CREATE TABLE rooms (
  room_num VARCHAR(10) NOT NULL PRIMARY KEY
);

INSERT INTO rooms VALUES 
  ('5B'),
  ('5C'),
  ('5D');

CREATE TABLE class_rooms (
  class VARCHAR(15) NOT NULL,
  room_num VARCHAR(10) NOT NULL,
  CONSTRAINT room_nm_fm_rooms FOREIGN KEY (room_num) REFERENCES rooms(room_num),
  PRIMARY KEY (class, room_num)
);

INSERT INTO class_rooms VALUES 
  ('Algebra', '5B'),
  ('Calculus','5C'),
  ('Discrete Math', '5C');

完成此操作后,获取未使用房间号的一种方法是使用SELECT ... WHERE ... NOT IN查询。这可能不是最快的,但根据我的经验,这是最容易理解的语法。

SELECT room_num 
FROM rooms 
WHERE room_num NOT IN (SELECT room_num FROM class_rooms);