Я бы использовал комбинацию таблиц поиска с сильным использованием внешних ключей. Я думаю, что вы предлагаете, очень распространено. Например, получите все сообщения о заболеваниях для конкретного животного в этом диапазоне данных:
Select *
from table_illness
where table_illness.pet_id = <value>
and date between table_illness.start_date and table_illness.finish_date
Вы можете сделать это для любой таблицы. Таблицы поиска будут связью, например, table_illness.illness_type и sick_types.illness_type. В таблице sick_types вы можете хранить подробную информацию о типах болезней.