在数据库中存储对象

时间:2011-03-08 11:05:15

标签: c# .net sql-server database serialization

我正在将SQL Server 2008与NHibernate一起用于应用程序。在应用程序中,我需要创建一个Info类的多个对象,并在多个位置使用它。我还需要将该对象存储在数据库中。

Info类有多种类型。

要存储Info类的这些对象,我有两个选项

  • 存储班级的序列化对象
  • 将该类的详细信息存储为字符串。

将序列化对象存储在数据库中而不是将其值存储为多个字符串有什么好处?

-RAM

4 个答案:

答案 0 :(得分:3)

如果将序列化对象存储到db:

  • 您不必从部分数据重建它(例如,如果行为是默认的,则编写您自己的反序列化器,从部分数据创建对象)
  • 您必须“手动”创建对象
  • 在某些情况下可能会更快
  • 存储冗余基础架构数据
  • 您可以选择多种格式(XML,自定义格式,blob)
  • 您已完全准备好可在任何地方处理的序列化对象(通过网络发送,存储在磁盘中)

我存储了多个字符串,你:

  • 需要“手动”构建对象
  • 可以在不同场景中使用数据库数据(来自.net,以构建其他结构,例如多维数据集)
  • 数据更紧凑
  • 可以以关系规范化形式存储数据,这种形式(几乎)总是一种好的做法
  • 查询数据
  • 整体使用数据更加通用。

我肯定会使用关系规范化表单来存储字符串,然后在.net中构建相应的类构建器。

答案 1 :(得分:0)

我肯定会存储记录和字段,而不仅仅是表示对象当前状态的一大块字节(二进制或文本或xml)。

它当然取决于您的业务实体的复杂性(在您的情况下是Info类),但我真的会避免将其序列化版本保存在1列中。

如果将所有属性分解为字段,则可以更好地查询具有特定值的记录,并且可以更轻松地处理新列和发布。

答案 2 :(得分:0)

将对象存储为序列化流的最常见问题是,一旦存储对象很难搜索对象的属性,而如果对象的每个属性都显式存储在其自己的强类型列中,则可以为搜索编制索引,并获得强类型存储的完整性优势。

但是,至少如果对象是XmlSerialized到SQL中的XML列,您可以使用xqueryOPENXML等技术来简化搜索。

答案 3 :(得分:0)

序列化的obejct(XML) 如果将类存储为XML。您将能够使用Xquery搜索该类的contect。如果你想搜索(有或没有条件),这种方式是有道理的。此外,您可以在XML列上创建索引。 XML索引将使您的应用程序更快。

AS字符串 如果你没有bussines登录,看看课程的内容。