【问题标题】:How to store a data table in database?如何在数据库中存储数据表?
【发布时间】:2015-01-19 19:52:32
【问题描述】:

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

根据 Entity Framework 和 PostgreSQL 数据库,我们正在尝试对数据的一部分进行建模,该数据基本上由对具有 ID 的名为 OtherObject 的对象的引用列表组成。我们尝试存储的数据是一个MyObject,由一个Id 和一个或多个对OtherObject 的引用和OtherObjects 数量的列表(最大长度为12)组成。所以我们想要存储与此相关的数据(例如在单独的表和列中):

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

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

模型现在基本如下:

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

我们如何才能将ICollectionKeyValuePairs 存储在数据库中?
有(更好的)方法吗?

【问题讨论】:

  • 那么您的数据库真的只是存储string 值吗? ID 为 1 的其他对象,10 次。还是实际上将其分解为与这些结果相关的列?
  • 相关的列。我会更新问题。
  • 您是否考虑过将您需要的所有数据作为 XML 字段存储在数据库中......?我认为在SO 上也有类似的问题,请查看此帖子,这很简单http://programmers.stackexchange.com/questions/185446/better-way-of-storing-key-value-pairs-in-the -数据库
  • 谢谢。 XML 是一种解决方案,但我们正在寻找更优雅的东西。我用 keyvaluepairs 列表的长度在 0 到 12 之间这一事实更新了这个问题。啊,keyvaluepairs 的列表称为字典。 :-) 那是我们的结构。
  • 现在我现在它被称为字典,我发现了一个类似的 SO-question,答案为 here,它提供了多种解决方案,其中包括 PostgreSQL 中的 hstore

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


【解决方案1】:

有两种类型特别适合整体存储字典hstorejson - 或者在 Postgres 9.4 或更高版本中最出色的 jsonb

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

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

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

如果您想要数据库中的其他内容,例如引用完整性、外键或各种其他约束、轻松访问单个值、最小存储大小、简单索引等。我建议一个或多个带有专用 (@ 987654327@) 列。

规范化表格布局

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

【讨论】:

  • 我们确实希望轻松访问各个列,因为它们需要可更新,并且需要通过 XML 在屏幕上显示信息。我们最多有 24 个,每个 XML 字符串的最大长度约为 100 个字符。您会为每个OtherObject 推荐单独的表格吗?或者只是将其存储为 XML?实体框架没有内置对字典的支持,所以现在我正在查看 XML 字符串并解析它们(例如 this example)。你会推荐什么?
  • 非常感谢您的详尽回答!
  • 使它成为 一个 表来保存实体的所有实例:如果我正确理解您的情况,您正在查看三个表。我会在答案中添加一点......还有一个问题:“MyObject”和“OtherObject”是相同类型的实例(相同的属性,适合同一个表,每个都可以相互引用)还是本质上不同?
  • 是的,如果我们使用 XML 或 JSON,它将是 一个 包含所有数据的表。它需要是可更新的,但我认为与 JSON 之间的转换不会有很大的性能问题,而且这并不重要,因为大多数将使用 JavaScript 完成,并且只有在服务器上才会将其转换为字典.我认为一张带有 ID 和两个 JSON 的表是最好的主意!
  • 嗯,你知道如何在 Linux Mint 和 Mac 上安装 PostgreSQL 9.4 吗? :-) 完成了吗?
猜你喜欢
  • 1970-01-01
  • 2021-10-11
  • 2014-07-21
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 2011-06-04
相关资源
最近更新 更多