У меня проблема, когда, скажем, у меня есть таблица людей, которая наследуется таблицей ученика и таблицей учителя. если я выполняю INSERT INTO для ученика и INSERT INTO для учителя и указываю первичный ключ таблицы людей (P_Id), например
INSERT INTO student(P_Id, LastName, FirstName, StudentNumber)
VALUES (1, 'Jones', 'Casey', 'SID0001');
INSERT INTO teacher(P_Id, LastName, FirstName, FacultyNumber)
VALUES (1, 'Jones', 'Casey', 'JONES0001');
, я получаю две повторяющиеся записи в моей таблице людей (P_Id - это мой первичный ключ в таблице людей ) кажется, что подтаблицы выполняют вставки в таблицу людей без учета ограничений этой таблицы. Разве ограничение первичного ключа в таблице людей не должно препятствовать созданию повторяющихся записей?
Я думал об устранении этой проблемы с помощью триггера, который сработает до того, как будет сделана вставка в таблицу людей, которая будет проверять наличие P_Id это уже существует. но я бы хотел, чтобы он либо мешал мне делать такие вещи, либо я хотел бы, чтобы он разумно создавал запись только в подтаблице
После этого возникнет проблема с изменением Фамилии, например, в ученике таблица, и изменения отражаются в таблице учителя?
Вот операторы создания, приведенные выше операторы Insert были приведены только для примера, я понимаю, что они не будут работать с этими созданными таблицами:
CREATE TABLE people
(
people_id integer NOT NULL,
last_name character varying NOT NULL,
first_name character varying NOT NULL,
middle_name character varying,
gender character varying NOT NULL,
date_of_birth date,
ssn character varying,
pref_language character varying,
CONSTRAINT people_pkey PRIMARY KEY (people_id)
)
CREATE TABLE student
(
-- Inherited from table people: people_id integer NOT NULL,
-- Inherited from table people: last_name character varying NOT NULL,
-- Inherited from table people: first_name character varying NOT NULL,
-- Inherited from table people: middle_name character varying,
-- Inherited from table people: gender character varying NOT NULL,
-- Inherited from table people: date_of_birth date,
-- Inherited from table people: ssn character varying,
-- Inherited from table people: pref_language character varying,
student_id integer NOT NULL,
race character varying(80),
ethnicity character varying(80),
employer character varying(80),
school character varying(80),
pref_location character varying(80),
CONSTRAINT student_pkey PRIMARY KEY (student_id)
)
INHERITS (people)
CREATE TABLE teacher
(
-- Inherited from table people: people_id integer NOT NULL,
-- Inherited from table people: last_name character varying NOT NULL,
-- Inherited from table people: first_name character varying NOT NULL,
-- Inherited from table people: middle_name character varying,
-- Inherited from table people: gender character varying NOT NULL,
-- Inherited from table people: date_of_birth date,
-- Inherited from table people: ssn character varying,
-- Inherited from table people: pref_language character varying,
teacher_id integer NOT NULL,
user_name character varying NOT NULL,
"password" character varying NOT NULL,
title character varying,
CONSTRAINT teacher_pkey PRIMARY KEY (teacher_id)
)
INHERITS (people)