2014-11-19 5 views
0

Мы пытаемся создать простую базу данных, но мы всегда сталкиваемся с той же ошибкой, и для записи, которую я проверил, задавали другие вопросы ограничения внешнего ключа, но они вообще не помогали.Ошибка ограничения внешнего ключа SQL 1215

Как вы знаете, когда мы преобразуем нашу диаграмму EER в карту отношений, отношения принимают первичные ключи сущностей, к которым они подключены, например: Допустим, что у наших entites есть один первичный ключ, каждый из которых, как TC_NO, randevu_no, hasta_no и наше отношение шло к тому, что они собирались взять первичные ключи этих сущностей. Нравится;

CREATE TABLE REQUEST(
TC_NO int not null, 
randevu_no int not null, 
hasta_no int not null, 
PRIMARY KEY(randevu_no,TC_NO,hasta_no), 
FOREIGN KEY(hasta_no) REFERENCES PATIENT(hasta_no) ON DELETE CASCADE, 
FOREIGN KEY(randevu_no) REFERENCES APPOINTMENT(randevu_no) ON DELETE CASCADE, 
FOREIGN KEY(TC_NO) REFERENCES PATIENT(TC_NO) ON DELETE CASCADE 
); 

Однако мы всегда получаем ту же ошибку. Нет орфографической ошибки, мы проверили это часами, но не смогли ее решить, и мы понятия не имеем, почему это не работает.

Для людей, которые нуждаются в всем коде базы данных:

CREATE TABLE PERSON(
    isim varchar(12) not null, 
    soyisim varchar(12) not null, 
    cinsiyet char(1) not null, 
    dogum_tarihi date not null, 
    adres varchar(150) not null, 
    TC_NO int not null, 
    PRIMARY KEY(TC_NO), 
    UNIQUE KEY(TC_NO)); 
CREATE TABLE EMPLOYEE(
    departman varchar(20) not null, 
    sicil_no int not null, 
    TC_NO int not null, 
    PRIMARY KEY(TC_NO,sicil_no), 
    UNIQUE KEY(sicil_no), 
    FOREIGN KEY(TC_NO) REFERENCES PERSON(TC_NO) ON DELETE CASCADE 
    ); 
CREATE TABLE PATIENT(
    hastalik_gecmisi varchar(400) not null, 
    kan_grubu char(4) not null, 
    hasta_no int not null, 
    TC_NO int not null, 
    PRIMARY KEY(TC_NO,hasta_no), 
    FOREIGN KEY(TC_NO) REFERENCES PERSON(TC_NO) ON DELETE CASCADE 
    ); 
CREATE TABLE DOCTOR(
    diploma_no int not null, 
    brans varchar(40) not null, 
    sicil_no int not null, 
    TC_NO int not null, 
    PRIMARY KEY(TC_NO,sicil_no,diploma_no), 
    FOREIGN KEY(TC_NO) REFERENCES EMPLOYEE(TC_NO) ON DELETE CASCADE, 
    FOREIGN KEY(sicil_no) REFERENCES EMPLOYEE(sicil_no) ON DELETE CASCADE 
); 
CREATE TABLE APPOINTMENT(
    hasta_no int not null, 
    departman varchar(20) not null, 
    randevu_no int not null, 
    doktor_no int not null, 
    tarih date not null, 
    saat int not null, 
    PRIMARY KEY(randevu_no) 
); 
CREATE TABLE SECRETARY(
    TC_NO int not null, 
    sicil_no int not null, 
    PRIMARY KEY(sicil_no,TC_NO), 
    FOREIGN KEY(sicil_no) REFERENCES EMPLOYEE(sicil_no) ON DELETE CASCADE, 
    FOREIGN KEY(TC_NO) REFERENCES EMPLOYEE(TC_NO) ON DELETE CASCADE 
); 
CREATE TABLE REQUEST(
    TC_NO int not null, 
    randevu_no int not null, 
    hasta_no int not null, 
    PRIMARY KEY(randevu_no,TC_NO,hasta_no), 
    FOREIGN KEY(hasta_no) REFERENCES PATIENT(hasta_no) ON DELETE CASCADE, 
    FOREIGN KEY(randevu_no) REFERENCES APPOINTMENT(randevu_no) ON DELETE CASCADE, 
    FOREIGN KEY(TC_NO) REFERENCES PATIENT(TC_NO) ON DELETE CASCADE 
); 
CREATE TABLE NOTIFY(
    randevu_no int not null, 
    sicil_no int not null, 
    PRIMARY KEY(randevu_no,sicil_no), 
    FOREIGN KEY(randevu_no) REFERENCES APPOINTMENT(randevu_no) ON DELETE CASCADE, 
    FOREIGN KEY(sicil_no) REFERENCES SECRETARY(sicil_no) ON DELETE CASCADE 
); 
CREATE TABLE CONFIRMATION(
    hasta_no int not null, 
    sicil_no_s int not null, 
    diploma_no int not null, 
    sicil_no_d int not null, 
    PRIMARY KEY(sicil_no_s,hasta_no,diploma_no,sicil_no_d), 
    FOREIGN KEY(sicil_no_s) REFERENCES SECRETARY(sicil_no_s) ON DELETE CASCADE, 
    FOREIGN KEY(hasta_no) REFERENCES PATIENT(hasta_no) ON DELETE CASCADE, 
    FOREIGN KEY(diploma_no) REFERENCES DOCTOR(diploma_no) ON DELETE CASCADE, 
    FOREIGN KEY(sicil_no_d) REFERENCES DOCTOR(sicil_no_d) ON DELETE CASCADE 
); 

ответ

0

Хорошо, я только что нашел решение. http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html Эти ссылки заставляют меня думать и с помощью метода try-fail я нашел решение.

Когда вы делаете внешний ключ из таблицы, и если этот ключ также является внешним ключом в этой таблице, вы должны делать внешние ключи, а также уникальные ключи, чтобы они могли иметь свои индексы и соединяться с нижними таблицами.

0

ли таблица пациентов имеет составной ключ в качестве первичного ключа? Можете ли вы также показать инструкции создания других таблиц?

+0

Нет, у него нет ключевого слова в качестве основного ключа, и я добавил полный код базы данных к основному вопросу. – mtilhan

+0

Я также столкнулся с той же проблемой прошлой ночью. Я снова попробовал ее с вашими таблицами, но тщетно. Вы можете добавить один внешний ключ из таблицы пациентов, но не другой .. Я думаю, что это ограничение в mysql.http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html – Chatz

+0

Я нашел и исправил проблему, написав как новый андерсер. – mtilhan

Смежные вопросы