Разработка базы данных на основе EAV или XML для объектов с переменными функциями в SQL Server? - PullRequest
2 голосов
/ 31 октября 2011

Я хочу создать базу данных, в которой могут храниться любые типы объектов и различные функции для каждого класса объектов.

Для некоторых вопросов, которые я задавал на разных форумах, решение http://en.wikipedia.org/wiki/Entity-attribute-value_modelили http://en.wikipedia.org/wiki/Xml с некоторой проверкой перед хранением.

Не могли бы вы дать мне альтернативу вышеприведенным или некоторые преимущества или примеры, которые помогут решить, какой из двух методов является лучшимв моем случае?

Спасибо

ОБНОВЛЕНИЕ 1: Ваш БД читает или пишет интенсивно?будет и то, и другое -> аукционный движок. Будете ли вы когда-нибудь переходить с SQL Server на другую платформу?Я не буду перемещать это, я буду использовать Службу WCF, чтобы представить функциональность мобильным устройствам.Как вы планируете представить свои данные приложению?Entity Framework для DAL и WCF Service Layer для бизнеса Будут ли люди подключаться к вашим данным с помощью средств, отличных от тех, которые вы контролируете?Нет

Ответы [ 4 ]

3 голосов
/ 11 ноября 2011

В то время как @marc_s правильно в его предостережениях, есть бесспорные ситуации, в которых реляционная модель достаточно просто не гибкая.Уже довольно много лет я работаю с базой данных, которая по большей части прямо-реляционная, но имеет небольшую часть EAV.Это связано с тем, что пользователи могут изобретать новые свойства в любое время для целей наблюдения в ходе испытаний.

По общему признанию, это неудобно по отношению к запросам и отчетам, если назвать несколько, но никакой другой стратегии здесь будет недостаточно.Мы используем хранимые процедуры с T-Sql pivot, чтобы предложить уплощенные структуры данных для отчетов и сетки с динамическими столбцами для отображения.Когда инфраструктура стоит, она становится довольно удобной.

Мы никогда не рассматривали возможность использования данных XML, потому что их там еще не было, и, кроме общих ограничений, у нас есть некоторые недостатки в нашем контексте:

  1. Данные EAV сильно запрашиваются.Команда разработчиков нуждается не только в стандартных знаниях SQL из-за специального синтаксиса.Индексирование возможно, но «с поддержанием индекса во время модификации данных связаны затраты ( согласно MSDN ).
  2. Тип данных XML гораздо менее доступен, чем обычные таблицы и поля, когда онприходит к обработке данных и составлению отчетов.
  3. Вряд ли когда-либо пользователи извлекают все значения атрибутов сущности, но в любом случае весь XML должен был бы быть сокращен.Тип данных XML (пока) не поддерживается Entity Framework.

    Итак, в заключение я хотел бы сделать дизайн максимально реляционным, но EAV там, где это необходимо.На аукционе может быть несколько фиксированных полей и EAV для гибких данных.

2 голосов
/ 11 ноября 2011

Сначала не идите ни одним путем, если структура действительно не может быть известна заранее. Использование EAV или XML, потому что вы не хотите фактически определять требования, приведет к неразличимому беспорядку и плохо работающему беспорядку в этом. Обычно по крайней мере 90 +% (консервативная оценка, основанная на моем собственном опыте) полей могут быть известны заранее и должны быть в обычных реляционных таблицах. Используйте только специальные techiniques для структур, которые не могут быть известны заранее. Я не могу подчеркнуть это достаточно сильно. Таблицы EAV выглядят простыми, но на самом деле их очень сложно запрашивать, особенно для сложных отчетов. Конечно, легко получить данные в них, но очень и очень трудно вернуть их обратно.

Если вам действительно нужно пойти по пути EAV, рассмотрите возможность использования базы данных nosql для этой части приложения и реляционной базы данных для остальной части. Базы данных Nosql просто лучше обрабатывают EAV.

2 голосов
/ 03 ноября 2011

Я буду использовать свой ответ на другой вопрос:

EAV:

  1. Хранение . Если ваша ценность будет часто использоваться для различных продуктов, например, одежда, где атрибуты "size" и значения размеров будут часто повторяться, ваши таблицы атрибутов / значений будут меньше. Между тем, если значения будут достаточно уникальными и повторяемыми (например, значения для атрибута «количество страниц» для книг), вы получите достаточно большую таблицу со значениями, где каждое значение будет связано с одним продуктом.
  2. Скорость . Эта схема не самая слабая часть проекта, потому что здесь данные будут меняться редко. И помните, что вы всегда можете денормализовать схему базы данных, чтобы подготовить DW-подобное решение. Вы можете использовать кеширование, если часть базы данных тоже будет работать медленно.
  3. Эластичность Это самая сильная часть решения. Вы можете легко добавлять / удалять атрибуты и значения и всегда перемещать значения из одного атрибута в другой!

Хранение XML больше похоже на NoSQL: вы откажетесь от функциональности базы данных и грамотно подготовите свое решение к:

  1. Не теряйте целостность данных.
  2. Не переписывать всю функциональность базы данных в приложении (это бессмысленно)
2 голосов
/ 31 октября 2011

Я думаю, что слишком много контекста отсутствует, чтобы кто-либо мог добавить какой-либо действительный комментарий к обсуждению.

  • Ваш БД читает или пишет интенсивно?
  • Будете ли вы когда-нибудь переходить с SQL Server на другую платформу?
  • Как вы планируете представить свои данные приложению?
  • Будут ли люди подключаться к вашим данным другими способами, кроме тех, которые вы контролируете?
...