私は2つのテーブルを持っています.1つは従業員用で、もう1つは部署用です。部門には複数の従業員を配置することができますが、1人の従業員は1つの部門でのみ働くことができ彼らの関係は[1:たくさん]です。MySQL - 1対多の関係が正しく動作しません
私はこれをMySQLで実行しようとしていますが、問題が発生しました。私は8つのさまざまな部門を持っていると私は別の部署で働く合計で8人の以上の従業員を、追加しようとすると、私は次のエラーを取得する:私は8人の以下の従業員を持っている場合は
Cannot add or update a child row: a foreign key constraint fails (`testdb`.`employee`, CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`id`) REFERENCES `department` (`id`))
、すべてが素晴らしい作品。 9人目の従業員を追加すると、上記のエラーが発生します。
部門テーブル:
CREATE TABLE IF NOT EXISTS department(
id INT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE
)ENGINE=INNODB;
部門インサート:
INSERT INTO department(name) VALUES ('Athens');
INSERT INTO department(name) VALUES ('Patras');
INSERT INTO department(name) VALUES ('Kalamata');
INSERT INTO department(name) VALUES ('Heraklion');
INSERT INTO department(name) VALUES ('Thessaloniki');
INSERT INTO department(name) VALUES ('Xanthi');
INSERT INTO department(name) VALUES ('Larisa');
INSERT INTO department(name) VALUES ('Alexandroupoli');
EMPLOYEE表:
CREATE TABLE IF NOT EXISTS employee(
id INT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
born INT(20) NOT NULL,
country VARCHAR(255) NOT NULL,
department_name VARCHAR(255) NOT NULL,
FOREIGN KEY (id) references department(id)
)ENGINE=INNODB;
従業員を挿入:
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Vaggelis','Michos','[email protected]','1995','Greece','Athens');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('James','Gunn','[email protected]','1970','USA','Athens');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('George','McMahon','[email protected]','1978','Usa','Patras');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('John','Jones','[email protected]','1992','England','Patras');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Marinos','Kuriakopoulos','[email protected]','1986','Greece','Alexandroupoli');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Dimitris','Nikolaou','[email protected]','1984','Greece','Larisa');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Soufiane','El Kaddouri','[email protected]','1974','France','Xanthi');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Maria','Apostolou','[email protected]','1997','Greece','Larisa');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Ioannis','Marinou','[email protected]','1982','Greece','Kalamata');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Thanasis','Athanasiou','[email protected]','1989','Cyprus','Heraklion');
これは、それがどのように見えるかであるCREATE-INSERT操作の後:あなたが第九挿入中で、見ることができるように
従業員のテーブル、挿入が失敗し、私が記述したエラーが発生します:
Cannot add or update a child row: a foreign key constraint fails (`testdb`.`employee`, CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`id`) REFERENCES `department` (`id`))
JOINを通じ
department_name
を得ることができ、私はDEPARTMENT_IDに、私は部門の挿入に与えた同じIDを与える必要があるでしょうか? –@ ceid-vgはい、従業員の挿入時に使用されるdepartment_idは、従業員が働く部門の部門テーブルのIDと一致します。従業員に部門名を表示する場合は、2つのテーブルを結合します。私はJacquesと同意します。あなたのコードをより人間が読めるようにするためには、IDはdept_idとemp_idという名前が最も良いということに同意します。 – LAS