Это более теоретический вопрос, а не конкретный сценарий:
Предположим, у нас есть упрощенная схема таблицы:
items
содержит некоторые основные данные, item_data
дополнительные свойства для каждого элемента, а rel_items
устанавливает древовидную связь между различными элементами. Существуют различные типы элементов (представленные полем items.item_type
), которые имеют разные поля, хранящиеся в item_data
, например: собака, кошка, мышь.
Если у нас есть несколько более крупных запросов с некоторыми соединениями и соединениями (например, получение элементов с их родительскими элементами, имеющими некоторые условия с другими элементами и т. д.), может ли это стать проблемой производительности по сравнению с разделением всех различных типов элементов на отдельные таблицы (dog
, cat
, mouse
) и не сливая их в один?
Если мы сохраним все это в одной базовой таблице элементов, повлияет ли как-то на производительность создание представлений (собака, кошка, мышь)?
edit (как прокомментировано ниже): я думал о «видах», «домашних питомцах» и т. д. как о item_types. Каждый тип имеет разные свойства. Цель использования базовой таблицы элементов и таблицы item_data состоит в том, чтобы иметь базовый «объект» и прикреплять к ним столько свойств, сколько необходимо, без необходимости изменять схему базы данных. Например, я не знаю, сколько животных будет в приложении и какими свойствами они обладают, поэтому я подумал о схеме базы данных, которую не нужно менять каждый раз, когда пользователь создает новое животное.