Ответ 1
Два упомянутых вами подхода:
- Одна таблица, представляющая объекты во всей иерархии наследования, со всеми столбцами, которые вам понадобятся для всей иерархии, плюс столбец "type", чтобы сообщить вам, какой подкласс является конкретным объектом.
- Одна таблица для каждого конкретного класса в вашей иерархии наследования с дублированной схемой.
могут быть дополнены двумя другими:
- Одна таблица для каждого класса в иерархии наследования - теперь у вас есть таблица Animal, а подклассы имеют таблицы с внешними ключами, которые указывают на общий набор данных в Animal.
- Общая схема - есть таблица для хранения объектов и таблица атрибутов для поддержки любого набора атрибутов, прикрепленных к этому объекту.
Каждый подход имеет свои плюсы и минусы. Там их можно найти здесь:
Также ознакомьтесь с этими темами SO:
- Что-то вроде наследования в дизайне базы данных
- Помогите мне связать наследование и реляционные концепции
- Объектно-ориентированные структуры в реляционных базах данных
- Как сделать моделирование наследования в реляционных базах данных?
- Как вы эффективно моделируете наследование в базе данных?
Наконец, следует отметить, что существуют объектно-ориентированные базы данных, которые представляют объекты более естественно в базе данных и могут легко решить эту проблему, хотя они не так часто используются в отрасли. Вот некоторые ссылки, которые описывают такие БД по сравнению с реляционными БД, хотя они не дадут вам совершенно объективного (хех) представления по этому вопросу: