2015-09-24 2 views
0

Я следую за этим book для моего класса базы данных. База данных имеет 6 таблиц. Из 6 из них я отправлю две таблицы.Как вставлять данные, когда у нас есть ограничения связи в базе данных MySQL

/*EMPLOYEE Table */ 
CREATE TABLE EMPLOYEE( 
    Fname VARCHAR(15) NOT NULL, 
    Minit CHAR, 
    Lname VARCHAR(15) NOT NULL, 
    Ssn CHAR(9) NOT NULL, 
    Bdate DATE, 
    Address VARCHAR(30), 
    Sex CHAR, 
    Salary DECIMAL(10,2), 
    Super_ssn CHAR(9), 
    Dno INT NOT NULL, 
    PRIMARY KEY (Ssn), 
    FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn) 
    FOREIGN KEY (Dno) REFERENCES DEPARTMENT(Dnumber)); 

Таблица служащих имеет рекурсивное отношение, чтобы продемонстрировать, что «работник является наблюдателем другого сотрудника». Он также ссылается на таблицу DEPARTMENT, чтобы показать, что сотрудник работает в отделе. Ниже приведена схема таблицы DEPARTMENT.

CREATE TABLE DEPARTMENT( 
    Dname VARCHAR(15) NOT NULL, 
    Dnumber INT NOT NULL, 
    Mgr_ssn CHAR(9) NOT NULL, 
    Mgr_start_date DATE, 
    PRIMARY KEY (Dnumber), 
    UNIQUE (Dname), 
    FOREIGN KEY (Mgr_ssn) REFERENCES EMPLOYEE(Ssn) 
    ); 

В таблице DEPARTMENT приведена таблица сотрудников, чтобы показать, что сотрудник управляет отделом. при вставке данных, таких как

insert into EMPLOYEE values 
    ('John','B','Smith','123456789','1965-01-09','731 Fondren, Houston, TX', 
    'M',30000,'333445555',5); 

Мы не сможем выполнить приведенный выше запрос, потому что есть ссылочная целостность FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn). То же самое, если я попробую запрос ниже

insert into department values ('Research',5,'333445555','1988-05-22'); 

Вышеуказанный запрос не выполняется, поскольку в таблице employee нет данных. Мой вопрос заключается в том, что мы должны сначала вставить данные, а затем изменить таблицу и обеспечить ограничения ссылочной целостности. Или есть способ обойти. Ваши предложения/рекомендации будут оценены. Спасибо.

+1

Это не должно быть столь же решительным, как отказ от ограничения. Просто позвольте столбцу быть нулевым. – e4c5

ответ

2

Внешние ключи могут иметь нулевые значения. Таким образом, вы можете ввести значения, которые будут иметь, имеют значение внешнего ключа как null, как и самый верхний диспетчер, у которого не будет надзора над ним.

Таким образом, общая идея заключается в том, чтобы ввести данные снизу вверх, как ввести значения в таблице, которая не имеет внешний ключа, затем введите значения на вершине ее, ссылающиеся на эту таблицу, и так далее ...

Точный подход будет зависеть от остальных таблиц, которые вы используете в примере.

+0

Спасибо @ Анкит Дешпанде. Это сообщение, которое я прочитал, действительно не поддерживает внешний ключ, имеющий нулевые значения. Просто немного смутился. Спасибо за ваши ответы. – karma

+0

Я согласен с вами. Но тогда что происходит в случае, когда у сотрудника фактически нет супервизора? –

+0

Получил ваш момент @ Анкит Дешпанде. Я допустил null на мой внешний ключ. Все работает нормально. Спасибо – karma