我正在运送带有Windows Phone应用程序的SQL Server CE数据库,我想知道是否有人对如何存储某些数据有任何见解。我有大量数据存储为数组,这些数据归因于其他代码内对象。数组由值标识符(整数)组成,它们对应于对象的属性。例如:
对象A :
我有数百个对象,每个对象都有数十个属性。我想用以下两种方式之一存储这些数据:每个AttributeSet有多个表,其中每列对应于AttributeDictionary中的一个属性,每一行对应一个对象--- OR ---以某种方式将每个AttributeSet存储为一个数组在数据库中,列是每个属性集,每行是一个对象。选项1需要创建具有多个列的多个表,选项2需要一个具有几列但每个都具有序列化数据的表。 Windows Phone 8有一个XmlSerializer类,可用于序列化和反序列化数据。
哪种存储数据的方式最有效,最容易实现?我真的不需要能够搜索AttributeSets,所以我认为序列化数据然后将其存储在数据库中可能是最简单的。
TLDR:我应该将与对象关联的数组作为序列化数据存储在数据库中,还是将数组分成列并创建多个表?
有任何想法/提示吗?
答案 0 :(得分:3)
最有效和最简单的是两种截然不同的东西,具体取决于你看多远。你应该设计远远超出最初版本,即尊重可维护性或者以后会受到伤害。
短期内最简单的方法是将所有内容写入一个代表完整内存数据的列,然后在代表所有数据的对象上编写序列化/反序列化。听起来像配置转储?那就是它听起来对我来说。
这是一场等待发生的测试/维护噩梦。恕我直言,你把EAV(实体属性值)关系数据库的反模式带到了一个全新的水平'哦,你没有你没有'。 这些属性集中的每一个都是有希望的类。如果不是那么至少采用EAV模式。它很脏,但在你的情况下它可能是可以接受的。
正确的答案可以变化,但一个简单的解释是,每个班级一张表。这实际上是实体框架对每个层次结构的表所做的事情。
个人建议 - 假设有一天你必须查询数据,至少计划一下。
您是否考虑过NoSQL选项,因为这可能非常适合您所希望的内容,尽管可能不是您想要的长期内容。如果没有,请拥抱您的关系型SQL服务器,并为其提供所需的结构,以实现它的本质,关系。