关于SQL-Server的多主键约束问题
上个星期开发时发现一个问题~~在用Nhibernate的时候,一表多约束的问题卡了一天时间,可能是基础不好~对联合主键和Nhibernate使用不熟练,搞了一天,浪费了一天。Nhibernate使用联合主键十分复杂(个人觉得!),而且偶师兄也强烈反对使用联合主键。
联合主键实际上也不适合我的需要(只是不知道乱78找,看到了这个东西,觉得可以在当前项目上,就研究了一下。)
其实一开始对这个概念也挺模糊的,找了一大堆资料之后,总结如下(如有错误请指正)
联合主键是把一个表的主键和外键(或其他任意2个或2个以上的键作为联合主键,当然需要符合主键的约束。)就是生成新的主键(概念上),作为引索。
主要适用于多用户的文件管理。(例如简单的网络硬盘)
id为表主键,username用户名要进行约束(避免重复),FileName为上传的用户自定义文件名,每个用户自己的文件名是不能重复的。
这样的结构
表1:user表
id(PK_key/FK)
username(U)
1
aaa
2
bbb
表2:file表
id(PK_key)
u_id(U)
FileName
1
1
test.jpg
2
1
abc.jpg
以上的数据是合理的,而且无违反任何约束。
然而数据如果是这样:
id(PK_key/FK)
username(U)
1
aaa
2
bbb
id(PK_key)
u_id(U)
FileName
1
1
test.jpg
2
2
test.jpg
这样子就不能对FileName做单一约束。
解决方案有两种:1联合主键联合u_id和FileName。
2用多键约束。
由于联合主键在Nhibernate上实在难用,也不好用。要生成一个新的实体类。而且操作复杂。感觉上很无谓。而且Nhibernate也不推荐。Nhibernate的定义如下:
联合ID(composite-id)
页:
[1]