假设一个表有id,a,b 3个field
其中id是primary.
然后a,b在一起必须无重复.
比如(a,b)为(1,1)和(1,2)是可以的
但是(a,b)为(1,1)和(1,1)就重复了有个方法就是设a,b为primary.如果不止是两个field在一起不重复呢? 这样可能有很多个field成为primary. 似乎不是好方法吧.
如果其中某些field是text,甚至blob呢?
效率就不高了.我想的另一个方法是.
md5每一个field的值,连成一个string,然后再md5一次.存这个为id. 这是不是常见的解决方法?
还是有更好用的?

解决方案 »

  1.   

    md5每一个field的值,连成一个string,然后再md5一次.存这个为id. 这是不是常见的解决方法?这个方法不错,第一次听说,但应该可行如果你一定要在表一级上由数据库来实现这个限制的话。大多情况下,为了均衡操作速度上的方便,这种表就不再由数据库来实现这种限制了。毕竟如你所说,给所有字段加上UNIQUE索引不太现实。
    个人建议这种情况由程序来实现,毕竟你MD5运算也是要花时间的。并且,理论上MD5还是会有碰撞情况出现的。