Я работаю с перекрывающимися отношениями супер/подтипа, связанными с людьми в моей БД. Я хотел бы, чтобы перекрывающиеся подтипы вставляли новые строки, когда супертип получает новую строку. Я приложил свой LRD, чтобы прояснить отношения. LRD Я хотел бы создать триггер, который вставляет новые строки людей в правильный подтип на основе на атрибутах сотрудника/пользователя в таблице лиц. Код, который я пробовал до сих пор, дает мне ошибку при вставке строк в человека, отмечая, что «столбец сотрудника не существует». Я бы предположил, что это потому, что этот код пытается использовать оператор if для подтипов, где он фактически отсутствует.
Буду признателен за любые отзывы. Сведения о таблице
CREATE TABLE PERSON
(person_id int(10) not null AUTO_INCREMENT,
first_name varchar(15) not null,
last_name varchar(15) not null,
employee char(1),
participant char(1),
CONSTRAINT person_pk PRIMARY KEY (person_id))
ENGINE=InnoDB;
CREATE TABLE EMPLOYEE
(eperson_id int(10) not null AUTO_INCREMENT,
enterprise_email varchar(30),
manager_id int(10),
CONSTRAINT employee_pk PRIMARY KEY (eperson_id),
CONSTRAINT employee_fk1 FOREIGN KEY(eperson_id) REFERENCES PERSON(person_id) ON update cascade,
CONSTRAINT employee_fk2 FOREIGN KEY(manager_id) REFERENCES EMPLOYEE(eperson_id) ON update cascade)
ENGINE=InnoDB;
CREATE TABLE PARTICIPANT
(pperson_id int(10) not null AUTO_INCREMENT,
city varchar(30),
state varchar(2),
zip int(5),
sign_up_date date,
termination_date date,
CONSTRAINT participant_pk PRIMARY KEY (pperson_id),
CONSTRAINT participant_fk FOREIGN KEY(pperson_id) REFERENCES PERSON(person_id) ON update cascade)
ENGINE=InnoDB;
Код запуска
DELIMITER //
CREATE TRIGGER subtype_creator
AFTER INSERT ON PERSON
FOR EACH ROW
BEGIN
IF (employee = ‘e’ ) THEN
INSERT INTO EMPLOYEE
SET eperson_id = NEW.person_id,
last_name = NEW.last_name,
enterprise_email = NULL,
manager_id = NULL;
IF (participant = ‘p’ )THEN
INSERT INTO PARTICIPANT
SET pperson_id = NEW.person_id,
city=NULL,
state = NULL,
zip = NULL,
sign_up_date =NULL,
termination_date = NULL;
END IF;
END IF;
END//
DELIMITER ;
participant
? Я не вижу его в таблице PERSON. Также у вас есть вложенные операторы IF - это правильно? Также я думаю, что вы забыли добавить НОВОЕ ключевое слово для своих чеков (NEW.employee
и т. д.) - person Anton   schedule 01.11.2018