Описание тега 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
)

Дополнительная информация:

  1. Википедия об объектно-реляционном отображении
  2. Первые главы Java Persistence with Hibernate предоставляют отличный обзор проблемы и возможных решений.