2011-03-08 496 views
0

我正在使用NHibernate的SQL Server 2008作爲應用程序。在應用程序中,我需要創建一個Info類的多個對象,並在多個地方使用它。我還需要將該對象存儲在數據庫中。在數據庫中存儲對象

Info類有多種類型。

儲存信息類的這些對象我有兩個選擇

  • 存儲類
  • 商店該類作爲字符串的細節的序列化obejct。

什麼是存儲在數據庫中存儲過的值作爲多個字符串序列化對象的優勢在哪裏?

-RAM

+0

你有沒有想過使用像NHibernate或EntityFramework的OR映射器,而不是創建自己的持久層? – Fionn 2011-03-08 11:10:14

+0

@Fionn - 我們也在使用NHibernate。 – Ram 2011-03-08 11:11:09

回答

3

如果你的序列化對象存儲到數據庫:

  • 您不必從部分數據重建它(即寫自己的解串器,如果行爲是默認情況下,部分創建對象數據)
  • 必須創建對象「手動」
  • 可能在某些情況下更快
  • 存儲冗餘基礎數據
  • 您可以選擇多種格式(XML,自定義格式,b高吊球)
  • 您有準備在任何地方處理(通過網絡發送,存儲在磁盤做好充分的準備序列化對象)

我您存儲多個字符串,您:

  • 需要「手動」建的對象
  • 可能使用在不同的場景數據庫中的數據(來自達網絡,構建另一個結構,例如立方體)
  • 的數據是更加緊湊
  • 可以以關係標準化形式存儲數據(幾乎總是一種良好的做法)
  • 查詢數據
  • 並且數據的整體用途更加通用。

我一定會用關係規範化的形式存儲字符串,然後在.net中構建相應的類生成器。

0

我肯定會儲存記錄和字段,而不僅僅是代表對象的當前狀態字節(二進制或文本或XML)的塊。

它當然取決於您的業務實體(在您的情況下,信息類)的複雜性,但我真的會避免將其序列化版本保存在1列。

如果您將所有屬性分解到字段中,您可以更好地查詢具有特定值的記錄,並且可以更輕鬆地處理新列和發佈。

+0

例如你在數據庫中保存xaml屬性?而不是保存類,並防止自我創建xaml文件? – 2011-03-08 11:17:20

+0

不,我的意思是,如果你有屬性/字段名稱,姓氏和出生日期的類人,你保存在一個記錄與字段:名稱varchar,姓氏varchar,BirthDate日期時間。我根本不是在談論XAML。 – 2011-03-08 11:21:12

0

將對象存儲爲序列化流最常見的問題是一旦存儲對象時很難搜索對象的屬性,而如果對象的每個屬性都顯式存儲在其自己的強類型列中,它可以被搜索索引,並且您可以獲得強類型存儲的完整性優勢。

但是,至少如果對象XmlSerialized到SQL的XML列,可以使用諸如xqueryOPENXML來簡化搜索。

0

序列化對象(XML) 如果將該類存儲爲XML。你將能夠通過使用Xquery來搜索類的方位。如果你想搜索(有或沒有條件),這種方式是可行的。更重要的是,您可以創建XML列的索引。 XML索引將使您的應用程序更快。

AS字符串 如果您沒有bussines登錄來查看課程內容。

+0

那麼以規範化和關係的方式展開所有屬性也將允許索引像往常一樣,我敢打賭查詢在int或varchar列上比在XML數據列上快得多,這也可能具有不同的實現和查詢語法取決於在數據庫服務器上。 – 2011-03-08 11:23:25