如何在数据库中存储数据表(或List <keyvaluepair <int,object>&gt;或Dictionary)?</keyvaluepair <int,object>

时间:2014-11-21 15:51:26

标签: c# asp.net-mvc entity-framework postgresql model

根据Entity Framework和PostgreSQL数据库,我们试图模拟一部分数据,这些数据基本上由一个名为OtherObject的对象的引用列表组成,该对象具有一个ID。我们尝试存储的数据是MyObject,由Id和两个列表(最大长度为12)的一个或多个OtherObject引用和数量组成OtherObject秒。因此,我们希望存储与此相关的数据(例如,单独的表和列):

FirstPattern:
OtherObject with ID 1, 10 times
OtherObject with ID 4, 12 times

SecondPattern:
OtherObject with ID 2, 2 times
OtherObject with ID 3, 4 times
OtherObject with ID 4, 11 times

为此,我们认为ICollection KeyValuePair是合适的。这样我们就有一个列表,其中包含每个键的值(一个数量)(OtherObject)。

模型基本如下:

public class MyObject
{
    public int Id { get; set; }
    public IDictionary<OtherObject, int> FirstPattern { get; set; }
    public IDictionary<OtherObject, int> SecondPattern { get; set; }
}

问题是,我们怎样才能将ICollection KeyValuePair个{{1}}存储在数据库中?我们也想知道这是否是最好的方法。

如果您有(更好的)方法将这些数据存储在数据库中,我们希望听到它!谢谢你的关注。

1 个答案:

答案 0 :(得分:2)

有两种类型特别适合存储整个词典hstorejson - 或者Postgres 9.4 +中最优越的jsonb。< / p>

Postgres还有一个专用的xml数据类型(mentioned in the comments by DJ KRAZE),但我宁愿选择前三个选项中的一个。 XML相对冗长,更复杂(更不用说复杂),并且可能因你的目的而过度。

如果你想从数据库中得到的只是存储和检索整个字典,这些都是不错的选择 有关dba.SE的相关答案中的详细信息和链接:

您还会在关系数据库中找到关于 (entity-attribute-value)存储的优缺点的广泛讨论。

如果您需要来自数据库的其他内容,例如关系完整性,外键或各种其他约束,轻松访问单个值,最小存储大小,简单索引等。我建议使用一个或多个专用表({ {3}})列。

规范化表格布局

从我收集的内容,&#34; MyObject&#34; (m)包含对&#34; OtherObject&#34;的引用的集合。 (o)。每个m与(24)o相关,每个o与0-n m相关 - 这可以用经典的n:m关系实现。以下是详细说明: