我应该针对这个特定问题使用哪种数据结构?

时间:2011-01-12 15:39:15

标签: c# oracle data-structures

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

2 个答案:

答案 0 :(得分:2)

为什么不只使用两个班级?

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

class Type
{

  public SubTypeClass SubType  {get; set;}

  public string Id {get;set;}

}
  

我不想因为我而使用课程   试图让它变得可信。即   我们应该能够添加一个新列   在类型表和应用程序中   应该拾取新专栏

除非是真正需要,否则我会建议不要这样做。通常,如果数据库表的改变这是一个很好的理由和应用程序设计应该重新考虑......如果有一个可以成长列的表疯狂那么你的数据库设计可能不是很好,肯定不是正式的(我假设标准的SQL数据库)。

要考虑到,sub_type是不是一个真正的伟大的定义,我假设你正在使用它作为一个分类的例子...不要试图让银弹数据结构,你会发现它带来了解决的更多问题。凭借良好的设计改变一个类,如果给定相关联数据表的变化是不是这样一个大问题,作为针对所有的类,几乎没有任何工作比直接的SQL查询更好的好。

答案 1 :(得分:1)

修改

使用类似以下的查询从DB获取Type / Subtype / Source的元组:

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;

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