Как бы вы смоделировали эти отношения в БД?
У вас есть объект Page, который может содержать PageElements.
PageElement может быть, например, Статьей или Картинкой. У таблицы Article, очевидно, есть другие элементы / столбцы, кроме Picture. Статья может иметь то есть. Столбцы «Заголовок», «Ведущий», «Тело» имеют тип nvarchar, в то время как изображение может иметь что-то вроде «AltText», «Путь», «Ширина», «Высота». Мне бы хотелось, чтобы это было расширяемым, кто знает, какие PageElements мне могут понадобиться через 3 месяца? Поэтому я думаю, что мне нужна таблица PageElementTypes.
Для отношений, как насчет таблиц, подобных этим:
Страницы с идентификатором и прочим мамбо-юмбо. (Дата создания, Видимо, что нет)
Pages_PageElements с PageId и PageElementId.
PageElements с идентификатором и PageElementTypeId и другим mumbojumbo (SortOrder, Visibility и т. Д.).
PageElementTypes с идентификатором и именем (например, «Article», «Picture», «AddressBlock»)
Теперь я должен создать столбец PageElementId в каждой таблице «Статьи», «Изображения», «AddressBlocks», чтобы все закончить? Вот где я немного застрял, это простые отношения 1: 1, так что это должно сработать, но как-то я могу что-то упустить.
Продолжение:
Рекомендованные ниже решения с отдельными атрибутами заставили бы меня хранить все атрибуты одного типа или нет? Что если один PageElement имеет атрибуты nvarchar (255), а некоторые - nvarchar (1000), что если некоторые являются целыми числами?
Если бы я получил способ EAV, мне пришлось бы создавать тонны таблиц для хранения значений атрибутов для всех различных типов данных.