2011-01-27 71 views
0

我想表示一個mysql數據庫的時間表。 我有,我應該有三個表的想法:在數據庫中表示時間表

  1. 一個classdetails表 - 包含類的能力,課堂名稱等
  2. 一個class_sessions表:START_TIME和會話的END_TIME,
  3. 一個class_unit與表:課程名稱(MAT003 et.c)

,也將在class_sessions表和class_unit表相應的外鍵。

最終我希望能夠查詢的「自由」級(一說沒有一類目前,在查詢運行的時間),並返回其名稱,如(室5B)

我列出的表格是否足夠用於查詢?

任何想法如何使這個更好,將不勝感激。

+1

自由班是沒有班的班嗎?不要考慮表格,要考慮你對班級知識的種類。假設一所大學,根據「大學目錄在2011年春季提供代數101」來考慮。 「史密斯教授將在2011年春季教授代數101.」 「代數101(史密斯)星期一,星期三,星期五上午9點到上午11點在2011年春天舉行會議。」 「2011年春季的代數101(史密斯)將在5b室會面。」當你可以表達事實時,表格幾乎會自己寫。 – 2011-01-27 11:28:27

+0

謝謝Catcall。下面是我看到它們時表達事實的一種嘗試: – watkib 2011-01-27 14:58:39

回答

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