Возможно это уже когда-либо обсуждалось, но я не смог придумать как это найти

.
Есть несколько несвязанных таблиц похожей природы — например, таблицы Кошки, Собаки и Лошади.
Список этих таблиц со временем может увеличиваться.
Таблицы содержат Id, несколько общих полей (например, порода, описание) и несколько специфичных полей.
Необходимо так организовать базу чтобы можно было проще ссылаться на эти таблицы, обеспечив целостность данных.
Например, необходимо вставлять ссылки на эти таблицы в таблицы МоиЛюбимыеЖивотные, ЖивотныеРекорды и т. п.
Я придумал несколько вариантов, но не могу решить который из них лучше.
1. Сделать таблицу Животные (Id, КошкиId, СобакиId, ЛошадиId) и обеспечить целостность данных с помощью
внешних ключей. При необходимости сослаться на животное вставить в таблицу Животные новую запись,
если такой еще нет и использовать ее Id. При добавление новых объектов добавлять столбцы в таблицу Животные.
2. Сделать таблицу ВидыЖивотных(Id, ИмяТаблицы) с данными (1, 'Кошки') и т. д. Создать таблицу Животные
(Id, ВидыЖивотныхId, СтрокаId). Реализовать триггеры на добавление и удаление строк в таблицах
Кошки, Собаки, Лошади, добавляющие или удаляющие соответсвующие записи в таблицу Животные.
Ссылаться на таблицу Животные. При добавлении новых объектов-таблиц сделать об этом запись в таблице
ВидыЖивотных и создать для нее соответсвующие триггеры.
3. Различные вариации первых двух способов.
Второй способ кажется проще, второй — сложнее, но надёжнее (явные связи таблиц, а не с помощью триггеров).
Посоветуйте как лучше это реализовать (ORACLE).
Здравствуйте, HiltoN, Вы писали:
HN>Возможно это уже когда-либо обсуждалось, но я не смог придумать как это найти
.
Действительно, 10 раз уже обсуждалось

Вот, навскидку:
http://rsdn.ru/forum/message/1532223.aspxАвтор: Светлояр
Дата: 11.12.05
Здравствуйте, lazymf, Вы писали:
L>Здравствуйте, HiltoN, Вы писали:
L>Действительно, 10 раз уже обсуждалось
Вот, навскидку: http://rsdn.ru/forum/message/1532223.aspxАвтор: Светлояр
Дата: 11.12.05
К сожалению, предложенный там вариант (с добавлением столбца в таблицы сущностей и использованием составного ключа) не подходит, т. к. модифицировать исходные таблицы (Собаки, ...) нельзя
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>