0

MyDataTable有 3 列:A、B 和 C。没有保证有唯一的条目,在非平凡的情况下,每一列都将有非唯一的条目。

{A, B} 的组合保证是唯一的。因为 ADO.NETDataTable允许使用多列作为主键,所以我使用 A 和 B 作为我的主键。

A vs B 表示一个默认值为 0 的矩阵,因此我可以保证 B 的条目将来自有限池,并且对于 A 的每个条目,每个可能的 {A, B} 都会出现(即这样表中将有确切number of unique A values * number of unique B values的行)。

我的问题有两个部分:

1)如何对此进行规范化,以便我有一个密钥并且没有更新异常(我不确定,但我想我想要一个3NF)?(除非我弄错了,只需添加一个带有非冗余整数的额外“ID”列将允许更新异常)

2)如何设置(在C#中使用ADO.NET库)这样每当我想添加一行时,我指定B和C的条目,然后它会自动生成一个合适的A值,这样我就可以“在 {A, B} 处插入 C”?A 可以是整数或字符串。

这两者是相关的,因为您对 2 的回答可能会影响 1,反之亦然。

4

2 回答 2

1

一个键不必是单个列来满足 3NF。它可以是多列——在这个例子中(A,B)——或者你给出的维基百科链接中的例子。

但是,如果您想要一个单列键,那么您可以使用自动生成的 ID 创建一个新列(例如:IDENTITY(1,1)在 SQL 服务器中),并在列 (A,B) 上创建一个唯一索引

于 2012-11-05T14:14:56.563 回答
1

您可以使用DataColumn.Expression属性根据其他列的值自动生成列的值。

http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

于 2012-11-05T14:21:07.503 回答