2011-01-27 2 views
0

私はmysqlデータベースでタイムテーブルを表現したいと思っています。 私は3つのテーブルを持っていなければならないという考えを持っていた:データベースにタイムテーブルを表現する

  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で出会うでしょう。あなたが事実を表現することができるとき、テーブルはほとんど自分自身を書くでしょう。 –

+0

ありがとうCatcall。私はそれらを見て事実を表現しようとしています: – watkib

+0

数学とroomxの例を挙げると、部屋5bに代数があり、部屋5cに微積分があり、部屋5cにdiscreteMathがあり、部屋5dにクラスがなく、部屋5dを返すクエリ。 – watkib

答えて

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

がWHERE ... NOT IN ...使用されていないのです部屋番号を取得するための一つの方法は、SELECTを使用してクエリである、ことを行っています。これはおそらく最速ではありませんが、私の経験上、理解するのが最も簡単な構文です。

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

ありがとう、Catcall、これは私が探しているものだと思います。私はこれを試してみましょう。それが動作するかどうかをお知らせします。 – watkib

関連する問題