【问题标题】:Should I serialize my data or create more columns for a SQL Server CE database?我应该序列化我的数据还是为 SQL Server CE 数据库创建更多列?
【发布时间】:2013-12-22 08:41:00
【问题描述】:

我正在运送一个带有 Windows Phone 应用程序的 SQL Server CE 数据库,我想知道是否有人对如何存储一些数据有任何见解。我将大量数据存储为数组,这些数组归因于其他代码内对象。数组由对应于对象属性的值标识符(整数)组成。例如:

对象 A

  • 属性集1:[1、3、6、9]
  • AttributeSet2: [2, 4, 6, 8]
  • 属性字典:{1:属性 1, 2 : 属性 2, 3 : 属性 3, .....}

我有数百个对象,每个对象都有数十个属性。我正在考虑以两种方式之一存储这些数据:每个 AttributeSet 有多个表,其中每列对应于 AttributeDictionary 中的一个属性,每行对应一个 Object--- 或者 --- 以某种方式将每个 AttributeSet 存储为一个数组在数据库中,列是每个属性集,每一行都是一个对象。选项 1 需要创建多个包含多列的表,选项 2 需要一个包含几列但每个列都有序列化数据的表。 Windows Phone 8 有一个 XmlSerializer 类,我可以使用它来序列化和反序列化数据。

哪种存储数据的方式最有效且最容易实现?我真的不需要能够通过 AttributeSets 进行搜索,所以我认为序列化数据然后将其存储在数据库中可能是最简单的。

TLDR:我应该将与对象关联的数组作为序列化数据存储在数据库中,还是将数组分成列并创建多个表?

有什么想法/提示吗?

【问题讨论】:

  • 你确定你指的是模式而不是表吗?这没有告诉我你需要不同的模式
  • 从windows phone 及其应用生态系统的运行情况来看,我想你走简单的路线是可以的。

标签: sql xml database-design windows-phone-8 sql-server-ce


【解决方案1】:

在我啰嗦之前,让我总结一下。从你的问题听起来你知道正确的答案,你只是希望有人会告诉你可以走简单的路线。 SPOILER - 没关系!但您可能会在未来为此付出代价。

最有效和最简单的是两件截然不同的事情,具体取决于您所寻找的距离。您的设计应该远远超出初始版本,即尊重可维护性,否则以后会受到伤害。

短期内

最简单的方法是将所有内容放入一个代表完整内存数据的列中,然后在代表所有数据的对象上编写序列化/反序列化。听起来像配置转储?嗯,这正是我听起来的。

从长远来看

这是一场等待发生的测试/维护噩梦。恕我直言,您正在将 EAV(实体属性值)关系数据库反模式提升到一个全新的水平,即“哦,天哪,你没有”。 这些属性集中的每一个都是有希望的类。如果不是,那么至少使用 EAV 模式。它很脏,但在你的情况下它可能是可以接受的。

正确答案可以多种多样,但一个简单的解释是,每个班级一张桌子。这实际上是实体框架对每个层次结构的表所做的。

个人建议 - 假设有一天您必须查询数据,至少要做好计划。

那该怎么办

您是否研究过 NoSQL 选项,因为这可能非常适合您的期望,尽管可能不是您长期想要的。如果没有,请使用您的关系型 sql 服务器,并为其提供执行其应做的工作所需的结构,保持关系型。

【讨论】:

  • 谢谢您,先生,这是我正在寻找的确切答案;来自比我更了解数据库的人的一些建议。另外,你说得对,我知道正确的答案,但希望有一个更好的中间立场。
  • 很高兴能提供帮助并一直在那里。出于这个原因,今年不得不停止一个项目,仍然为我受伤的自我锦上添花;)
  • +1 表示“假设有一天你将不得不查询[/更新]数据,至少要做好计划。”我认为这是采取简单方法并将对象序列化到数据库的真正破坏因素。
  • 此外,就“中间地带”而言,您可以使核心关系成为关系并序列化一些次要属性。我以前采用过这种方法,并且(还没有?)遇到任何问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
相关资源
最近更新 更多