【发布时间】:2012-10-25 05:00:02
【问题描述】:
我有一个类,我们称之为TableOwner,它的一个字段是DataTable,其中有一列是名称(也是主键)和一列是金额。所以有一个主键列和第二个非主列。
在我的程序中,我创建了一个TableOwner 实例的集合。该集合本质上是一个集合:逻辑上没有TableOwner 的顺序,只关心每种存在多少。每个人的DataTable 填充了不同的金额值,但它们都具有相同的主键。
例如,假设TableOwner 用于存储银行账户上的数据。每个实例代表一个帐户,然后DataTable 可能会记录帐户中每种货币的数量。对于每个账户,该账户中的美元、欧元或英镑的数量可能不同,但对于每个账户,都有这三种货币的数据,即使金额为 0(账户中没有钱)或@987654328 @(可能缺少数据)。所以基本上我想要一个二维表或矩阵,但是我的类层次结构阻碍了我这样实现它。
处理这一切的明智方法是什么?我可以想到以下方法:
1) 首先创建一个DataColumn,然后将其传递给TableOwner 的所有新实例,以用于它们自己的DataTable。缺点:如果我后来决定要从主键中删除一行(例如,用户决定“你知道吗,我不再关心欧元,转储所有数据并删除该列。”),我必须遍历整个集合并从每个TableOwner 的表中逐一删除该行。
2) 创建一个供所有TableOwner 实例使用的DataTable(可能使其成为静态字段)。该表将有许多列,而不是一个金额列,例如 Amount1、Amount2 等。每个TableOwner 实例在初始化时都会创建自己的数量列,并记住它的名称以供以后使用——现在删除一行是一个基本的数据库操作。缺点:看起来不优雅且“错误”。
如您所见,两者都有缺点。有没有更好的办法?
抱歉,如果问题非常基本或措辞奇怪,因为我对数据库知之甚少。
【问题讨论】:
标签: c# database-design ado.net datatable database-normalization