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

C# 使用两列主键和另一列规范化表,c#,database-design,ado.net,datatable,database-normalization,C#,Database Design,Ado.net,Datatable,Database Normalization,MyDataTable有3列:A、B和C。没有一列保证有唯一的条目,在非常重要的情况下,每一列都有非唯一的条目 {A,B}的组合保证是唯一的。由于ADO.NETDataTable允许使用多列作为主键,因此我使用A和B作为主键 A vs B表示一个默认值为0的矩阵,因此我可以保证B的条目来自有限的池,并且对于A的每个条目,都会出现每个可能的{A,B}(即,表中会精确地出现唯一A值的数量*唯一B值的数量行) 我的问题分为两部分: 1) 如何规范化这一点,使我有一个键,没有更新异常(我不确定,但我想我

My
DataTable
有3列:A、B和C。没有一列保证有唯一的条目,在非常重要的情况下,每一列都有非唯一的条目

{A,B}的组合保证是唯一的。由于ADO.NET
DataTable
允许使用多列作为主键,因此我使用A和B作为主键

A vs B表示一个默认值为0的矩阵,因此我可以保证B的条目来自有限的池,并且对于A的每个条目,都会出现每个可能的{A,B}(即,表中会精确地出现
唯一A值的数量*唯一B值的数量
行)

我的问题分为两部分:

1) 如何规范化这一点,使我有一个键,没有更新异常(我不确定,但我想我想要一个)?(除非我弄错了,简单地添加一个带有非冗余整数的额外“ID”列将允许更新异常)

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


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

一个键不必是一个单列就可以满足3NF。它可以是多个列——在本例中是(A,B)——也可以是您给出的维基百科链接中的示例


但是,如果希望使用单个列键,则可以使用自动生成的ID创建一个新列(例如:SQL server中的
IDENTITY(1,1)
),并在列(a,B)上创建一个唯一索引您可以使用
DataColumn.Expression
属性根据其他列的值自动生成列的值


你不能通过让别人做你的家庭作业来学习。@克里斯宾特,你为什么认为这是家庭作业?