2011-01-27 5 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을 제공합니다." Smith 교수는 2011 년 봄에 대수학 101을 가르칩니다. " "대수학 101 (스미스)은 월요일, 수요일, 금요일, 오전 9시에서 11 시까 지 2011 년 봄에 만난다." "2011 년 봄의 대수학 101 (Smith)은 방 5b에서 만날 것입니다." 사실을 표현할 수있을 때 테이블은 거의 스스로를 작성합니다. –

+0

Catcall에 감사드립니다. 아래는 사실을 표현하는 시도입니다. – watkib

+0

수학과 방의 예를 든다면, 룸 5b에 대수가 있고, 방 5c에는 미적분이 있고, 방 5c에는 이산 거리가 있고, 방 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