我应该序列化我的数据还是为SQL Server CE数据库创建更多列?

时间:2013-12-20 22:45:26

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

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

对象A

  • AttributeSet1:[1,3,6,9]
  • AttributeSet2:[2,4,6,8]
  • AttributeDictionary:{1:属性1,                       2:属性2,                       3:属性3,                       .....}

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

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

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

有任何想法/提示吗?

1 个答案:

答案 0 :(得分:3)

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

最有效和最简单的是两种截然不同的东西,具体取决于你看多远。你应该设计远远超出最初版本,即尊重可维护性或者以后会受到伤害。

短期内

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

从长远来看

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

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

个人建议 - 假设有一天你必须查询数据,至少计划一下。

那该怎么办

您是否考虑过NoSQL选项,因为这可能非常适合您所希望的内容,尽管可能不是您想要的长期内容。如果没有,请拥抱您的关系型SQL服务器,并为其提供所需的结构,以实现它的本质,关系。

相关问题