2011-03-04 20 views
0

我的應用程序對於域實體有一個複雜的模式。據需要使用SQL Server 2008以下是複雜:關於在使用XML的SQL Server中實現複雜模式的建議類型

域實體是層次:數據結構是一棵樹;它嵌套到很多層次。樹中的幾個節點是可重複的(多值)。例如,實體可以具有無限地址(家庭,帳單,運輸,辦公室等)
域實體可擴展:該模式將來可能會擴展(而不是收縮)。

將這樣的模式直接設計爲相關的SQL Server表格相當具有挑戰性。如果沒有設計,quering肯定會如此。

我正在考慮使用XML類型來存儲域實體記錄。然而,我有以下查詢:

  • 由於特殊的報告需求,每個字段應該是可查詢的(在實體記錄之內和之間)。這適用於即將添加到模式中的字段。
  • 在使用XML類型時,由於我失去了結構,什麼是我可以設計的最佳數據訪問層?
  • 在這種情況下,我可以有效地使用實體框架嗎?
  • 建議的任何最佳實踐?

回答

2

一個建議:不要這樣做。認真。你已經走下坡路了 - etter學會使用數據庫。

您在這裏定義的「域實體」將會很大,這意味着查詢它將成爲一個挑戰。無限制的地址意味着您已經準備好了100,000個。任何愚蠢到要求XML文檔的人都會得到一個驚喜,服務器也是如此。

您還從左到右放棄了很多工具 - 從ORM到報表工具。只是因爲你濫用XML支持數據庫有(這是計劃存儲文件,不作爲僞數據庫)。

您的疑問:

由於特殊的報告需求,每個字段應該是可查詢(內和跨 實體記錄)。這適用於即將添加到模式中的字段。

在英語中,這不是一個查詢,你知道的。這也是不可能的。

在使用XML類型時,由於我失去了結構,什麼是我可以設計的最佳數據訪問層?

開始編寫SQL。用手。或者開發你自己的。您離開了人們使用XML For的方式,因此沒有預定義的工具支持。

在這種情況下我能否有效地使用Entity Framework?

顯然沒有。

建議的最佳實踐?

是的,正確學習使用SQL Server。這不是一個好方法。

+0

+1。關係數據庫可以建立分層模型。這就是1-N關係的目的。大多數現實世界模型*是分層的,然而在關係數據庫中。 – 2011-03-04 06:15:45

+0

感謝TomTom。既然你強烈反對,我想你很清楚這是一種錯誤的做法。再次感謝。我已經充分考慮了常規使用SQL Server的問題,這些都是我偶然發現的障礙。 1)使用表關係來實現層次結構將會有巨大的性能損失。 2)我無法想出一個優雅的方式來實現所需的模式可擴展性。接下來,我遇到了http://www.sisodb.com/,它採用了模型優先的方法來設計實體,但我不相信將它用於我的製作。 – Kabeer 2011-03-04 06:23:09

+0

那麼,1和2是所有數據庫的問題。它變得複雜(所以是什麼;) - 這是工作的一部分),層次結構可以以某種方式被處理,但在所有語言中它們都是一個不好的問題。在具有良好性能方面不會因xml而變得更容易。 – TomTom 2011-03-04 06:48:51

2

我工作的一個抽象層上這樣的: http://rogeralsing.com/2011/02/28/linq-to-sqlxml/

代碼可以在https://github.com/rogeralsing/linq-to-sqlxml

可以查詢和選擇/從SQL Server XML列的項目實體。 我們正在使用它來發展實體模式,同時保持舊版本的完整。

那就是說,我們只將它用於特殊情況,並將O/R映射作爲默認方法。

+0

Prima facie它看起來非常好!我感謝你的努力。這對很多人都有幫助。我希望你能繼續鞏固這塊作品,並把它製作成高質量的作品。祝一切順利! – Kabeer 2011-03-04 11:46:31

1

誠實地說,雖然我看到@TomTom的觀點,但它取決於它是否只是一個xml文檔。在2008年,您可以設置XML模式並將它們映射到XML字段。

與TomTom的回答相反,您可以像查看正常情況一樣查詢xml數據字段。請查看以下SO回答以獲取更多信息:https://stackoverflow.com/questions/966441/xml-query-in-sql-server-2008

您可以使用實體框架(我的知識有點簡短),通過使一些sproc來查詢您的數據,然後從代碼調用該代碼並將其轉換爲一個XDocument。不是最好的方法,但它應該工作。注意:可能有另一種方法來做這件事,但就我對EF的瞭解而言,也許在問題中爲EF添加標籤?

我想你需要回到我們並說明你是否需要查詢1 xml文檔(在這種情況下,關係數據庫可能會更好,由@TomTom建議)或多個文檔(我將使用SQL Server做這項工作的機會,無論如何你都會有某種方式將這些文件連接起來)。

XML索引提示,可以發現here

,並在SQL 2008 here

H個XML的一些更多的信息,

斯圖

+0

我想查詢許多XML文檔(如表中的許多行)。在單個文檔中查詢和搜索,我同意已經得到很好的支持。 – Kabeer 2011-03-04 11:48:22

+0

是的,你可以做到這一點。一個簡單的例子可以發現:http://stackoverflow.com/questions/1509529/grabbing-values-from-multiple-xml-rows-in-sql-ms-server-2005如果你需要更多的讓我知道 – 2011-03-04 12:26:53

0

你嘗試SisoDb?如果您有任何問題,我會很樂意回答。請使用聯繫表格http://www.sisodb.com或在Twitter上給我打電話。