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

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