Описание тега class-table-inheritance

Наследование таблиц классов - это один из нескольких методов проектирования таблиц SQL в ситуациях, когда подклассы, расширяющие классы, применялись бы, если бы в SQL был механизм наследования, которого нет.

SQL как таковой не имеет формального механизма для реализации наследования от имени построителя базы данных. Однако есть способы создания таблиц, которые до некоторой степени имитируют поведение, которое вы получили бы от подклассов, расширяющих классы в объектно-ориентированной среде.

Наследование таблицы классов - один из таких методов проектирования. В этом методе есть одна таблица для класса и одна таблица для каждого отдельного подкласса. Столбцы, относящиеся ко всем членам класса, входят в таблицу класса. Столбцы, относящиеся только к некоторым подклассам (часто только к одному подклассу), помещаются в соответствующие таблицы подклассов. Эту концепцию можно легко распространить на случаи, когда класс сам является подклассом еще более общего суперкласса.

Первичный ключ таблицы классов и первичный ключ таблиц подклассов обычно являются общими. Это описано в теге shared-primary-key. Реализация общего первичного ключа требует некоторой работы со стороны программиста, потому что первичный ключ должен распространяться из таблицы классов в соответствующие таблицы подклассов с помощью запрограммированных действий всякий раз, когда в таблице классов делаются новые записи. Общие первичные ключи обеспечивают взаимно однозначный характер отношений.

Соединение между одной из таблиц подклассов и таблицей классов простое, легкое и быстрое. Все строки в таблице классов, которые не относятся к данному подклассу, выпадут из объединения. Для удобства эти объединения могут храниться в определенных представлениях.

Бывают обстоятельства, когда подклассы исключают друг друга. Домашнее животное никогда не бывает одновременно собакой и кошкой. Бывают случаи, когда подклассы не исключают друг друга. Один человек может быть и студентом, и преподавателем в университете.

Другой, но более простой метод работы с наследованием описан в теге /questions/tagged/single-table-inheritance.