2017-05-09 8 views
0
mysql> INSERT INTO ENROLLMENT (ssn, courseNumber, quarter, grade) 
VALUES ('333333333', '124', 'Fall2012', 'C'); 

mysql> select * from section; 
+--------------+------------+------------+------------------+ 
| CourseNumber | Quarter | RoomNumber | DayTime   | 
+--------------+------------+------------+------------------+ 
| 100   | Fall2012 | 5   | MW 1:00-2:OOPM | 
| 100   | Fall2013 | 5   | MW 1:00-2:OOPM | 
| 124   | Fall2013 | 5   | TuTh 3:00-4:OOPM | 
| 124   | Spring2011 | 36   | Tu 5:30-8:OOPM | 
| 220   | Winter2014 | 450  | MWF 8:30-10:OOAM | 
| 220   | Winter2015 | 450  | MWF 8:30-10:AM | 
| 233   | Fall2013 | 210  | Tu 1:00-3:00PM | 
| 233   | Summer013 | 210  | Tu 1:00-3:00PM | 
| 233   | Summer2010 | 200  | MW 1:OO-2:OOPM | 
| 266   | Summer2013 | 300  | Tu 1:00-3:00PM | 
| 266   | Summer2014 | 300  | Tu 5:00-6:00PM | 
| 266   | Winter2011 | 121  | TuTh 7:30-8:OOPM | 
| 400   | Spring2010 | 330  | TuTh 2:00-3:00PM | 
+--------------+------------+------------+------------------+ 


| ENROLLMENT | CREATE TABLE `ENROLLMENT` (
    `SSN` varchar(9) NOT NULL, 
    `CourseNumber` varchar(4) NOT NULL, 
    `Quarter` varchar(10) NOT NULL, 
    `Grade` varchar(1) DEFAULT NULL, 
    PRIMARY KEY (`SSN`,`CourseNumber`,`Quarter`), 
    KEY `CourseNumber` (`CourseNumber`), 
    KEY `Quarter` (`Quarter`), 
    CONSTRAINT `enrollment_ibfk_1` FOREIGN KEY (`SSN`) REFERENCES `Student` (`SSN`), 
    CONSTRAINT `enrollment_ibfk_2` FOREIGN KEY (`CourseNumber`) REFERENCES `Course` (`CourseNumber`), 
    CONSTRAINT `enrollment_ibfk_3` FOREIGN KEY (`Quarter`) REFERENCES `section` (`Quarter`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 

私はSQLの初心者です。私は基本的なSQLクエリを学んでいます。 セクションテーブルで、Fall2012のコース番号124は存在しません。しかし、私はそれを作成することができました。どのように可能ですか?MySQLの参照が存在しないにもかかわらず作成された外部キー

+1

私が正しく理解していれば、その後、 '(コース番号、四半期)が含まれ、別のテーブルには'があり、何の '(124、Fall2012はありません) 'そこに? まあ、個別の(単一の)外部キー制約を作成しました。したがって、123とFall2012の両方は、互いに独立して存在します。おそらくあなたが望むのは、 'CONSTRAINT fk_course_quarter FOREIGN KEY(コース、クォーター)REFERENCES table_course_quarter(コース、クォーター)'です。 'table_course_quarter(course、quarter)'に(ユニークな)インデックスが必要になるかもしれません。それはあなたが探しているものですか?これを答えにすることはできますか? – flutter

+0

はい、今すぐ入手します。 –

答えて

1

CourseNumber 124が存在する可能性があります。そして、四半期Fall2012が存在します。あなたの質問から

は、私はあなたが複合外部キー参照をしたいと思う:

CONSTRAINT `enrollment_ibfk_3` FOREIGN KEY (CourseNumber, `Quarter`) REFERENCES `section` (CourseNumber, `Quarter`) 

あなたが動作するように宣言するためにsection上の適切なインデックスまたは一意制約が必要な場合があります。

0

ところで、賢くsectionテーブルは次のようになります。

+--------------+------+---------+------------+----------+-----------+----------+ 
| CourseNumber | Year | Quarter | RoomNumber | WeekDays | StartTime | EndTime | 
+--------------+------+---------+------------+----------+-----------+----------+ 
|   100 | 2012 |  3 |   5 |  5 | 13:00:00 | 14:00:00 | 
|   100 | 2013 |  3 |   5 |  5 | 13:00:00 | 14:00:00 | 
|   124 | 2013 |  3 |   5 |  10 | 15:00:00 | 16:00:00 | 
|   124 | 2011 |  1 |   36 |  2 | 17:30:00 | 20:00:00 | 
|   220 | 2014 |  4 |  450 |  21 | 8:30:00 | 10:00:00 | 
|   220 | 2015 |  4 |  450 |  21 | 8:30:00 | 10:00:00 | 
|   233 | 2013 |  3 |  210 |  2 | 13:00:00 | 15:00:00 | 
|   233 | 2013 |  2 |  210 |  2 | 13:00:00 | 15:00:00 | 
|   233 | 2010 |  2 |  200 |  4 | 13:00:00 | 14:00:00 | 
|   266 | 2013 |  2 |  300 |  2 | 13:00:00 | 15:00:00 | 
|   266 | 2014 |  2 |  300 |  2 | 17:00:00 | 18:00:00 | 
|   266 | 2011 |  4 |  121 |  10 | 19:30:00 | 20:00:00 | 
|   400 | 2010 |  1 |  330 |  10 | 14:00:00 | 15:00:00 | 
+--------------+------+---------+------------+----------+-----------+----------+ 
関連する問題