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

本文关键字:存储 数据表 数据库 | 更新日期: 2023-09-27 18:31:29

List<KeyValuePair<int,Object>>,或字典。

根据实体框架和PostgreSQL数据库,我们尝试对数据的一部分进行建模,该数据基本上由对具有ID的名为OtherObject的对象的引用列表组成。我们尝试存储的数据是一个MyObject,由一个 Id ,以及两个列表(最大长度为 12),其中包含一个或多个对OtherObject的引用和 OtherObject s的数量。因此,我们希望存储与此相关的数据(例如在单独的表和列中):

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存储在数据库中?
有没有(更好的)方法?

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

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

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

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

  • 此数据库结构是否有名称?

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

如果你想从数据库中得到其他东西,比如引用完整性、外键或各种其他约束、轻松访问单个值、最小存储大小、简单索引等。我建议一个或多个具有专用(规范化)列的表。

规范化表布局

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

  • 如何在PostgreSQL中实现多对多关系?