0

データベーステーブルを作成しています。具体的には、このコードは何らかの理由で 2 つの外部キーを追加しません。外部キー制約を追加できないと表示されます。参照しているテーブルを示します。

mysql> ALTER TABLE PROGRAM
-> ADD SeriesName varchar(100) NOT NULL, ADD StartYear char(4) NOT NULL,
-> ADD CONSTRAINT program_seriesname_fk
-> FOREIGN KEY(SeriesName) REFERENCES SERIES(SeriesName),
-> ADD CONSTRAINT program_startyear_fk
-> FOREIGN KEY(StartYear) REFERENCES SERIES(StartYear);
ERROR 1215 (HY000): Cannot add foreign key constraint

SERIES テーブルには PROGRAM テーブルがあり、これは 1:N (1 対多の関係) であることを意味します。したがって、SERIES の 2 つの主キーは、PROGRAM の 2 つの外部キーになります。

mysql> describe series;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| SeriesName | varchar(100) | NO   | PRI |         |       |
| StartYear  | char(4)      | NO   | PRI |         |       |
| EndYear    | char(4)      | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
3 rows in set (0.07 sec)

mysql> describe program;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| ProgramName | varchar(50)  | NO   | PRI |         |       |
| Description | varchar(255) | YES  |     | NULL    |       |
| Recorded    | date         | NO   |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
4

2 に答える 2

1

テーブルに複合 PK がseriesあるため、このフィールドを FK 制約で個別に使用することはできません

 ADD CONSTRAINT program_seriesname_fk
 FOREIGN KEY(SeriesName, StartYear) REFERENCES SERIES(SeriesName, StartYear)
于 2013-07-23T20:14:31.583 に答える