在数据库</string,>中存储Dictionary <string,string =“”>

时间:2014-01-10 19:02:47

标签: c#

在我的代码中的某个时刻,我正在创建一个类型为Dictionary<string, string>的字典,我想知道在将数据转换为字符串然后再返回到数据库中的最佳方法是什么字典。

感谢。

3 个答案:

答案 0 :(得分:4)

这里有很多选择。

  • 您可以使用规范化路线并使用带有键/值对列的单独表格。

  • 某些数据库为您提供与您需要的数据类型相似的数据类型。 PostgreSQL有hstore类型,您可以在其中保存任何键值对,MS SQL具有XML数据类型,可以在插入之前对数据进行一些简单的按摩。

  • 如果没有这种类型的特定于数据库的帮助,您可以使用TEXT或BLOB列并使用数据库友好格式(如JSON,XML或特定于语言的序列化格式)序列化字典。

权衡如下:

  • 带有键/值列的单独表格可以进行昂贵的查询,并且通常是PITA,但您可以获得最大的查询灵活性,并且可以跨数据库移植。
  • 如果使用数据库驱动的字典类型,则可以获得查询支持(即“选择存储在字典中的属性与特定条件匹配的行”)。如果没有这个,你可以选择所有内容并在程序中进行过滤,但是
  • 你失去了数据库的可移植性,除非你编写了一个抽象它的中间层,并且你的代码中的数据操作变得容易(因为事情“工作”就好像你的数据库中有一个列有这些数据)。 LI>

document oriented”的NoSQL数据库完全是指这种类型的存储。根据您的工作,您可能希望查看一些选项。 MongoDB是一个受欢迎的选择。

正确的选择取决于数据的查询模式和其他非功能性问题,如数据库支持等。如果扩展您需要实现的功能,我可以扩展我的答案。

答案 1 :(得分:3)

如果您确实希望将完整字典存储为单个字符串,则可以将字典序列化为JSON(或XML)并将结果存储到数据库中。

答案 2 :(得分:1)

这里有几个选项。您可以将对象序列化为XML,或者将JSON序列化为@ M4N。您还可以创建一个至少包含两列的表:一列用于键,一列用于值。

这实际上取决于您的域模型的外观以及您需要如何管理数据。如果字典值或键改变(IE重命名,校正等),并且需要反映在依赖于数据的许多对象上,那么为该映射直接创建一种查找表可能是最好的。否则,序列化数据将是性能最佳的选项之一。