Описание тега discriminator
Дискриминатор - это столбец, используемый в задачах объектно-реляционного сопоставления для описания наследования. Это часто, но не исключительно, связано с подходом "одна таблица на класс иерархии".
Иерархии наследования возникают естественным образом в объектно-ориентированном проектировании и программировании; однако, когда дело доходит до сохранения объекта, обычно используется система управления реляционными базами данных (СУБД). Дискриминатор - это столбец, используемый для описания наследования. Это часто, но не исключительно, связано с отдельной таблицей для иерархии классов.
Рассмотрим следующий пример, состоящий из студентов и учителей. Можно создать таблицу людей, содержащую общую информацию о студентах, например имя и фамилию. Таблица категорий будет содержать две записи: ученик и учитель, а столбец fk_category в таблице людей выполняет функцию дискриминатора.
CREATE TABLE categories
(
id serial NOT NULL,
category character varying(128) NOT NULL,
CONSTRAINT people_pk PRIMARY KEY (id)
)
CREATE TABLE people
(
id bigserial NOT NULL,
fk_category INT NOT NULL,
first_name character varying(128) NOT NULL,
last_name character varying(128) NOT NULL,
-- other columns common to teachers and students
CONSTRAINT people_pk PRIMARY KEY (id),
CONSTRAINT people_fk FOREIGN KEY (fk_category)
REFERENCES categories (id) MATCH SIMPLE
)
CREATE TABLE students
(
fk_person bigint NOT NULL,
-- other columns specific to students
CONSTRAINT students_pk PRIMARY KEY (fk_person),
CONSTRAINT students_fk FOREIGN KEY (fk_person)
REFERENCES people (id) MATCH SIMPLE
)
CREATE TABLE teachers
(
fk_person bigint NOT NULL,
-- other columns specific to teachers
CONSTRAINT teachers_pk PRIMARY KEY (fk_person),
CONSTRAINT teachers_fk FOREIGN KEY (fk_person)
REFERENCES people (id) MATCH SIMPLE
)
Дополнительная информация:
- Википедия об объектно-реляционном отображении
- Первые главы Java Persistence with Hibernate предоставляют отличный обзор проблемы и возможных решений.