lmwtzw6u5l0 发表于 2015-7-4 08:28:42

关于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]
查看完整版本: 关于SQL-Server的多主键约束问题