C# 跨数据表集合的公共主键

C# 跨数据表集合的公共主键,c#,database-design,ado.net,datatable,database-normalization,C#,Database Design,Ado.net,Datatable,Database Normalization,我有一个类,我们称它为TableOwner,它的一个字段是DataTable,其中一列是name(也是主键),一列是amount。因此有一个主键列和第二个非主键列 在我的程序中,我创建了TableOwner实例的集合。集合本质上是一个集合:从逻辑上讲,没有TableOwner的顺序,它只关心每种存在多少。每个数据表的DataTable都填充了不同的金额值,但它们都具有相同的主键 例如,假设TableOwner用于存储银行账户上的数据。每个实例代表一个帐户,那么DataTable可能会记录帐户中每

我有一个类,我们称它为
TableOwner
,它的一个字段是
DataTable
,其中一列是name(也是主键),一列是amount。因此有一个主键列和第二个非主键列

在我的程序中,我创建了
TableOwner
实例的集合。集合本质上是一个集合:从逻辑上讲,没有
TableOwner
的顺序,它只关心每种存在多少。每个数据表的
DataTable
都填充了不同的金额值,但它们都具有相同的主键

例如,假设
TableOwner
用于存储银行账户上的数据。每个实例代表一个帐户,那么
DataTable
可能会记录帐户中每种货币的数量。对于每个账户,该账户中的美元、欧元或英镑的数量可能不同,但对于每个账户,都有这三种货币的数据,即使金额为0(账户中没有货币)或
null
(可能缺少数据)。所以基本上我想要一个二维表或矩阵,但是我的类层次结构阻碍了我实现它

处理这一切的明智方法是什么?我可以想到以下方法:

1) 首先创建一个
DataColumn
,然后将其传递给
TableOwner
的所有新实例,以用于它们自己的
DataTable
。缺点:如果我后来决定要从主键中删除一行(例如用户决定“你知道吗,我不再关心欧元了,转储它们上的所有数据并删除列”),我必须遍历整个集合,并从每个
表所有者的表中逐个删除该行

2) 创建一个由所有
TableOwner
实例使用的
DataTable
(可能将其设置为静态字段)。该表将有许多列,例如Amount1、Amount2等,而不是一个amount列。每个
TableOwner
实例在初始化时创建自己的amount列,并记住其名称以备将来使用-现在删除一行是一个基本的DB操作。缺点:看起来不雅观且“错误”

正如你所看到的,两者都有缺点。有更好的办法吗


如果问题非常基本或措辞奇怪,我深表歉意,因为我对数据库了解不多。

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

所以不是

 Owner1 20$ £30 €40
你有三张唱片

 Owner | Currency | Amount
 Owner1  $          20
 Owner1  £          30
 Owner1  €          40
(其中货币符号表示单独货币表中的货币ID)

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


这是

过程的一部分,因此如果我跟踪m个对象的n个数量,该表将有n*m行和3列?是的。如果你想添加一个新类型的对象M,你可以在不改变表结构的情况下添加它!