使用两列主键和另一列来规范化表

时间:2012-11-05 13:26:26

标签: c# database-design ado.net datatable database-normalization

我的DataTable有3列:A,B和C.无保证没有唯一条目,在非平凡的情况下,每列都会有非唯一条目。

{A,B} 的组合保证是唯一的。因为ADO.NET DataTable允许使用多个列作为主键,所以我使用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,反之亦然。

2 个答案:

答案 0 :(得分:1)

键不必是单列就能满足3NF。它可以是多列 - 在此示例中为(A,B) - 或者在您给出的维基百科链接中的示例中。

但是,如果您想拥有单个列键,则可以创建一个具有自动生成ID的新列(例如:SQL Server中的IDENTITY(1,1)),并在列(A,B)上创建唯一索引

答案 1 :(得分:1)

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

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