Рекомендации по реализации сложной схемы в SQL Server с использованием типа XML - PullRequest
0 голосов
/ 04 марта 2011

Мое приложение имеет сложную схему для объекта домена. требуется использовать SQL Server 2008. Ниже приведены сложности:

Сущность домена является иерархической : структура данных представляет собой дерево; оно вложено во многие уровни. Немногие узлы в дереве повторяемы (многозначны). Например, у сущности могут быть неограниченные адреса (дома, выставление счетов, доставка, офис и т. Д.)
Доменная сущность расширяемая : схема может расширяться (не уменьшаться) в будущем.

Разработка такой схемы напрямую, как связанные таблицы SQL Server, довольно сложна. Если это не проектирование, то, безусловно, так оно и будет.

Я думаю об использовании типа XML для хранения записей сущностей домена. Однако у меня есть следующие запросы:

  • В связи с особыми потребностями в отчетности каждое поле должно иметь возможность запроса (внутри и между записями объекта). Это относится даже к полям, которые будут добавлены в схему в будущем.
  • При использовании типа XML, поскольку я теряю структуру, какой лучший уровень доступа к данным я могу разработать?
  • Могу ли я эффективно использовать Entity Framework в этой ситуации?
  • Рекомендуются ли лучшие практики?

Ответы [ 4 ]

2 голосов
/ 04 марта 2011

Я работаю над уровнем абстракции для этого: http://rogeralsing.com/2011/02/28/linq-to-sqlxml/

Код доступен на https://github.com/rogeralsing/linq-to-sqlxml

Вы можете запрашивать и выбирать / проектировать объекты из столбцов XML сервера SQL.Мы используем его для эволюции схем сущностей, сохраняя при этом старые версии без изменений.

Сказав это, мы используем его только в особых случаях и используем сопоставление O / R в качестве подхода по умолчанию.

2 голосов
/ 04 марта 2011

Один совет: НЕ ДЕЛАЙТЕ ЭТОГО. Шутки в сторону. Вы уже спустились по скользкому склону - научитесь пользоваться базами данных.

«Сущность домена», которую вы здесь определяете, будет большой, что означает, что запрос к ней будет сложной задачей. Неограниченное количество адресов означает 100 000 плюс, к которым вы должны быть готовы. Любой глупец, который попросит xml-документ, тоже получит неприятный сюрприз, как и сервер.

Вы также теряете много инструментов влево и вправо - от ORM до инструментов отчетности. Просто потому, что вы злоупотребляете поддержкой XML, которую имеют данные (которая предназначена для хранения документов, а не в качестве псевдобазы данных).

Ваши запросы:

В связи с особыми потребностями в отчетности каждое поле должно иметь возможность запроса (как внутри, так и между записи объекта). Это относится даже к полям, которые будут добавлены в схему в будущем.

На английском языке это не запрос, вы знаете. Это также невозможно.

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

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

Могу ли я эффективно использовать Entity Framework в этой ситуации?

Очевидно, нет.

Рекомендуются ли лучшие практики?

Да, научитесь правильно пользоваться SQL Server. Это НЕ хороший подход.

1 голос
/ 04 марта 2011

Честно говоря, и пока я вижу точку @TomTom, но это зависит от того, ОДИН ли это XML-документ или нет.С 2008 года вы можете настроить схемы XML и отобразить их в поле XML.

В отличие от ответа TomTom, вы можете запросить поле данных xml, как обычно.Проверьте следующий SO-ответ для получения дополнительной информации: https://stackoverflow.com/questions/966441/xml-query-in-sql-server-2008

Вы можете использовать инфраструктуру сущностей (мои знания немного недолговечны по этому вопросу), сделав несколько sproc для запроса ваших данных, а затем вызовите sproc из кодаи бросить его в XDocument.Не самый красивый способ сделать это, но это должно работать.Примечание: может быть другой способ сделать это, но это насколько я знаю об EF, возможно, добавьте тег для EF в вопросе?

Я думаю, вам нужно вернуться к нам и указать,вам нужно запросить 1 XML-документ (в этом случае реляционная БД, возможно, будет лучше, предложено @TomTom) или несколько документов (которые я бы использовал SQL Server для этой работы. Скорее всего, у вас будет какой-то способ связать этидокументы вместе в любом случае).

Советы по индексированию XML можно найти здесь

И еще немного информации по XML в SQL 2008 здесь

Hth,

Stu

0 голосов
/ 17 марта 2011

Вы пробовали SisoDb? Если у вас есть какие-либо вопросы по этому поводу, я бы с радостью на них ответил. Используйте контактную форму на http://www.sisodb.com или пинг мне в Twitter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...