2011-03-08 131 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