Sql Server 2000数据库,有一张表有几十万条数据,插入、更新都较为频繁,表中有两个列AID、BID,现在要求如果AID值相同则BID不能相同。如记录某地区的所有高校,如果是同一个高校(AID),则学生号(BID)不能重复;求教:
1、该如何实现?约束?触发器?
2、约束or触发器对性能是否有影响?本来是在程序中进行校验的,但有发生校验异常,AID和BID都相同的值插入数据库。即使只是几万条数据中出现一条这样的错误,也是令人难以忍受的错啊!
诚心求教各位!数据库sql约束;触发器
1、该如何实现?约束?触发器?
2、约束or触发器对性能是否有影响?本来是在程序中进行校验的,但有发生校验异常,AID和BID都相同的值插入数据库。即使只是几万条数据中出现一条这样的错误,也是令人难以忍受的错啊!
诚心求教各位!数据库sql约束;触发器
add constraint UQ_约束名 unique (AID,BID)
嗯,其实我很崩溃的发现我的描述有大问题!!!
汗!其实是因为有第三个字段IsTrue,当IsTrue为真时是可以重复的
然后将这个函数用到check约束中,不过这样检测性能应该不高啊
何况你更新插入还很频繁
所以完整的问题是表中四个列,KeyId(主键)、AID、BID、IsTrue,当IsTrue=1时,AID与BID不能有重复值,当IsTrue=0时,则该行数据无需校验
这个容易,AID、BID、IsTrue联合唯一,IsTrue的意义反转为IsFalse。AID、BID需要唯一时IsFalse=0;AID、BID不需要唯一时IsFalse可以给一个随机非0值,也可以用KeyId的HashValue。
create unique nonclustered index IX_TB_AID_BID on TB(AID,BID) where IsTrue=1
和10楼有相同的逻辑问题,可以保证IsTrue=1的AID/BID不重复,但不能保证IsTrue=0的AID/BID和IsTrue=1的不重复。是否符合要求,自己权衡。