【问题标题】:Common primary key across a collection of DataTables跨数据表集合的公共主键
【发布时间】: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


    【解决方案1】:

    您应该有一个包含所有者、货币和金额列的表格

    所以不是

     Owner1 20$ £30 €40
    

    你有三条记录

     Owner | Currency | Amount
     Owner1  $          20
     Owner1  £          30
     Owner1  €          40
    

    (货币符号表示来自单独货币表的货币 ID)

    如果一个人没有特定货币的金额,那么就没有个人和货币组合的记录。

    这是normalisation进程的一部分

    【讨论】:

    • 所以如果我要跟踪 m 个对象的 n 个数量,表格将有 n*m 行和 3 列?
    • 是的。如果你想添加一种新类型的对象 M,你可以在不改变你的表结构的情况下做到这一点。
    • 谢谢(我也正想问这个过程叫什么)!
    猜你喜欢
    • 2012-01-26
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多