繁体   English   中英

如何在数据库中存储数据表?

[英]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

为此,我们认为KeyValuePairICollection是合适的。 这样,我们有针对每个键(一个值(量)的列表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存储在数据库中?
有没有更好的办法?

有两种类型特别适合作为一个整体存储字典hstorejson - 或者 Postgres 9.4 或更高版本中最高级的jsonb

Postgres 也有一个专用的xml数据类型,但我宁愿选择前三个选项之一。 XML 相对冗长且复杂(不是说令人费解),对于您的目的来说可能有点矫枉过正。

如果您只想从数据库中存储和检索整个字典,这些都是不错的选择。 看:

您还将找到有关关系数据库中 (实体-属性-值)存储优缺点的广泛讨论。

如果您想从 DB 获得其他东西,例如参照完整性、外键或各种其他约束、轻松访问单个值、最小存储大小、简单索引等。我建议使用一个或多个具有专用(规范化)列的表。

标准化表格布局

根据我的收集,“MyObject”( m )包含对“OtherObject”( o )的引用集合。 每个m与 (24) o相关,每个o与 0-n m - 这可以在经典的 n:m 关系中实现。 以下是详细说明:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM