Наследование таблицы SQL приводит к дублированию записей в базовой таблице, даже если установлено ограничение первичного ключа

У меня проблема, когда, скажем, у меня есть таблица людей, которая наследуется таблицей ученика и таблицей учителя. если я выполняю 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)
8
задан Brian Tompsett - 汤莱恩 16 February 2017 в 09:52
поделиться