[英]How to store a data table in database?
或List<KeyValuePair<int,Object>>
,或字典。
根据实体框架和 PostgreSQL 数据库,我们试图对数据的一部分进行建模,该数据基本上由对具有 ID 的名为OtherObject
的对象的引用列表组成。 我们试图存储的数据是一个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
为此,我们认为KeyValuePair
的ICollection
是合适的。 这样,我们有针对每个键(一个值(量)的列表OtherObject
)。
该模型现在基本上如下所示:
public class MyObject
{
public int Id { get; set; }
public IDictionary<OtherObject, int> FirstPattern { get; set; }
public IDictionary<OtherObject, int> SecondPattern { get; set; }
}
我们如何才能将KeyValuePair
的这个ICollection
存储在数据库中?
有没有更好的办法?
有两种类型特别适合作为一个整体存储字典: hstore
和json
- 或者 Postgres 9.4 或更高版本中最高级的jsonb
。
Postgres 也有一个专用的xml
数据类型,但我宁愿选择前三个选项之一。 XML 相对冗长且复杂(不是说令人费解),对于您的目的来说可能有点矫枉过正。
如果您只想从数据库中存储和检索整个字典,这些都是不错的选择。 看:
您还将找到有关关系数据库中eav (实体-属性-值)存储优缺点的广泛讨论。
如果您想从 DB 获得其他东西,例如参照完整性、外键或各种其他约束、轻松访问单个值、最小存储大小、简单索引等。我建议使用一个或多个具有专用(规范化)列的表。
根据我的收集,“MyObject”( m
)包含对“OtherObject”( o
)的引用集合。 每个m
与 (24) o
相关,每个o
与 0-n m
- 这可以在经典的 n:m 关系中实现。 以下是详细说明:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.