【问题标题】:Which data structure should I use for this particular problem?我应该使用哪种数据结构来解决这个特定问题?
【发布时间】:2011-01-13 00:34:37
【问题描述】:

我需要帮助确定此问题的数据结构。数据是我们有类型和子类型,大多数子类型为空,但对于极少数类型,子类型有一个值。我需要从另一个表中可用的源表中读取数据。我可以在应用程序上使用哪种数据结构来存储所有这些信息?应用程序没有关于 Type_id 的信息。它仅适用于数据库。所以我们应该在数据结构中保存Type、SubType、Source Table。

【问题讨论】:

  • 你要的是数据结构,还是类结构?
  • 我不想使用类,因为我正在尝试使其可配置。即我们应该能够在类型表中添加一个新列,并且应用程序应该获取新列。我必须将所有这些值存储在应用程序缓存中。因此,每当应用程序请求类型和子类型的特定组合的源表时,我应该能够从数据结构中检索它。我想用两本词典。 I 代表类型,其他代表类型或子类型,值将给出源表。但是字典在 type_id 3 ad 4 中不允许重复值是 C
  • 需要对这些数据进行哪些操作?这些数据将如何使用?
  • 确保将上述评论添加到问题中。它会让你的问题更清楚。

标签: c# oracle data-structures


【解决方案1】:

你为什么不只使用两个类?

类型将是具有子类型实例字段(可以为空)的主类。

class Type
{

  public SubTypeClass SubType  {get; set;}

  public string Id {get;set;}

}

我不想使用类,因为我是 试图使其可配置。 IE。 我们应该能够添加一个新列 在类型表和应用程序中 应该拿起新列

除非确实需要,否则我建议不要这样做。通常,如果数据库表更改是出于一个非常好的理由并且应该重新考虑应用程序设计......如果您有可以疯狂增长列的表,那么您的数据库设计可能不是很好并且肯定没有正式化(我假设标准 SQL 数据库)。

考虑到,sub_type 并不是一个很好的定义,我假设您将它用作分类的示例...不要尝试制作银弹数据结构,因为您会发现它带来更多它解决的问题。如果一个给定的关联数据表发生变化,一个好的设计改变一个类并不是什么大不了的事,因为对所有类都有好处,它几乎不比直接 SQL 查询更好。

【讨论】:

    【解决方案2】:

    编辑

    使用如下查询从数据库中获取类型/子类型/源的元组:

    SELECT table1.Type, table1.SubType, table2.Source from table1 JOIN table2 on table1.type_id = table2.type_id;
    

    结束编辑

    在不知道如何使用数据的情况下,您可以执行以下操作:

    class MyData{
        HashMap<String, String> columnData;
    }
    

    当插入 columnData(代表单个 Type/SubType/Source 元组)时,它会像这样完成:

    columnData.put("Type", type);
    columnData.put("SubType", subtype);
    columnData.put("Source", source);
    

    这样,当新列添加到数据库时,您不需要更改类结构。

    然后,在主应用程序中,您可以使用:

    List<MyData> list;
    

    当然,这个答案可能会根据这些数据的使用方式而改变。

    【讨论】:

    • 我们如何映射 Type-Sub-Type-Source 即我们如何根据类型和子类型查找/检索源,在大多数情况下子类型可以为空?列表的输入是类型和子类型。并想检索源?
    • 鉴于您在问题中说 Type_id 对程序不可用,我将使用 SQL 查询生成 Type/SubType/Source 元组:SELECT table1.Type, table1.SubType ,table2.Source from table1 JOIN table2 on table1.type_id = table2.type_id。然后可以将这些元组提供给程序。另外,请在问题中说明您想根据类型/子类型查找/检索源。
    猜你喜欢
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多