Sql server 增加构成复合键一部分的字段的正确方法是什么

Sql server 增加构成复合键一部分的字段的正确方法是什么,sql-server,auto-increment,relational-database,Sql Server,Auto Increment,Relational Database,我有一组表,它们的主键由其他表的外键组成(复合键) 因此,属性(作为一个非常精简的版本)可能如下所示,请注意,我只显示了组成键的属性-组合键旁边存储的还有其他属性: A[aPK] 1:M B[bPK, aFK] 1:M C[cPK, bFK, aFK] 作为数据,这可能看起来像: A[aPK]: 1 2 B[bPK, aFK]: 1, 1 2, 1 1, 2 2, 2 C[cPK, bFK, aFK]: 1, 1, 1 2, 1, 1 1, 2, 1 2, 2, 1 1, 1, 2 2,

我有一组表,它们的主键由其他表的外键组成(复合键)

因此,属性(作为一个非常精简的版本)可能如下所示,请注意,我只显示了组成键的属性-组合键旁边存储的还有其他属性:

A[aPK] 1:M B[bPK, aFK] 1:M C[cPK, bFK, aFK]
作为数据,这可能看起来像:

A[aPK]: 
1
2

B[bPK, aFK]:
1, 1
2, 1
1, 2
2, 2

C[cPK, bFK, aFK]:
1, 1, 1
2, 1, 1
1, 2, 1
2, 2, 1
1, 1, 2
2, 1, 2
1, 2, 2
2, 2, 2
正如您所看到的,每一行都是唯一的,尽管将最左边的属性设置为自动编号看起来是这样的:

C[cPK, bFK, aFK]:
1, 1, 1
2, 1, 1
3, 2, 1
4, 2, 1
5, 1, 2
6, 1, 2
7, 2, 2
8, 2, 2
它将不再需要第二列和第三列作为复合键的一部分,这将破坏对象并为我提供一个自动递增的主键

我已经在MSSQL DBMS中运行了它,我正在寻找在每个表中添加新元组时增加最左边的列的最佳方法

我不能使用Auto Increment Identity Specification选项,因为它不知道它是复合键的一部分

我也不(认为我)想使用任何聚合函数,例如:MAX(field)+1,因为这将对多个用户输入数据、回滚等产生不利影响。不过这里可能有一个不错的基于触发器的选项,但我不确定

这一定是一个常见的问题,所以我希望有人有一个可爱的解决方案

作为可能影响答案的一个方面,我在c#MVC应用程序中使用Entity Framework 1.0作为我的ORM

我不能使用自动增量 标识规范选项 不知道这是一个 复合键

它是独一无二的;它不必是复合键的一部分。但是其他两列应该是复合外键,如
(bFK,aFK)引用B(bPK,aFK)

您可以将cPK声明为主键,如果需要,还可以在(cPK、bFK、aFK)上声明一个额外的唯一约束