Предположим, у меня есть таблица, которая служит инвентарем моего дома — inventory_items
, если хотите. inventory_items
содержит все, что у меня есть, но только самую общую информацию (то есть поля, которые будут применяться ко всему, что у меня есть, например, имя, дата покупки).
Затем я хочу иметь отдельную таблицу для electronics_data
, которая является элементом инвентаря, но имеет специальную информацию для хранения (скажем, серийный_номер, мощность), и еще одну для furniture_data
, которая содержит информацию о мебели (количество_ножек, материал).
Во всех случаях элементы в electronics_data
будут иметь соответствующий элемент в inventory_items
, связанный полем идентификатора. То же самое относится и к furniture_data
.
Если я сейчас хочу показать список своих предметов инвентаря, но включить конкретную информацию из дочерних таблиц, логически я думаю загрузить inventory_data
, узнать, что это за тип элемента, и загрузить правильную информацию из правильной таблицы. Я могу придумать два лучших способа:
1) Создайте отношение внешнего ключа между inventory_items
и electronics_data
- таким образом, загрузка всех элементов также даст мне все мои дочерние данные. Но не все элементы в inventory_items
будут иметь соответствующий элемент в electronics_data
, значит ли это, что внешний ключ не может работать?
2) Создайте представление, которое загружает дополнительные таблицы, если в них существует соответствующий элемент, и загрузите представление в моем приложении. Если у меня есть много разных «типов» данных, не сделает ли это мое представление излишне медленным (проверив все) и, в первую очередь, нанесет ущерб объекту представления?
Это общие вопросы, в частности 2) я думаю, что это очень зависит от данных.
Спасибо!