1

mysql で 4 つのテーブルを作成します。しかし、4番目の作成時にエラーが表示されます。

エラー 1005 (HY000): テーブル 'db.grades' を作成できません (errno: 150)

名前とタイプが外部キーに適していることを確認しました。助言がありますか?ありがとう。

CREATE TABLE students
(

id int unsigned not null,
first_name VARCHAR(50),
last_name VARCHAR(50),
email_address VARCHAR(50),
primary key (id)

);



-------
CREATE TABLE departments 
(
school_code enum('L', 'B', 'A', 'F', 'E', 'T', 'I', 'W', 'S', 'U', 'M' ),
dept_id int unsigned,
abbreviation VARCHAR(9),
dept_name VARCHAR(200),
PRIMARY KEY (school_code,dept_id)
);


----

create table courses(
school_code enum('L', 'B', 'A', 'F', 'E', 'T', 'I', 'W', 'S', 'U', 'M' ),
dept_id int unsigned,
course_code char(5),
name varchar(150),
primary key (school_code,course_code,dept_id)
);


-----

create table grades(
pk_grade_ID int unsigned auto_increment,
student_id int unsigned not null,
grade decimal,
school_code enum('L', 'B', 'A', 'F', 'E', 'T', 'I', 'W', 'S', 'U', 'M' ),
dept_id int unsigned,
course_code char(5), 
name varchar(150),
primary key (pk_grade_ID),
foreign key (student_id) references students(id),
foreign key (school_code,course_code,name) references courses (school_code,course_code,name)
);

----
4

1 に答える 1

1

Grades テーブルの最後の外部キーは Courses テーブルの主キーを参照すべきではありません (これにはdept_idの代わりに含まれますname):

foreign key (school_code,course_code,dept_id)
     references courses (school_code,course_code,dept_id)

これは機能します - http://sqlfiddle.com/#!2/451d1

ところで -- 可能であれば、enum 列を完全に削除することを検討してください。代わりにルックアップ テーブルを作成し、それを外部キーとして使用します。

于 2013-06-27T02:24:20.977 に答える