如何强制大(BLOB)数据库字段的唯一性

时间:2010-12-10 16:46:53

标签: database database-design

我正在设计一个数据库(SQLite,SQL Server和DB2),其中一个表包含一个必须唯一的32kB blob。该表通常包含大约20,000行。

我可以想到两个解决方案,

1 - 使blob成为唯一索引。

2 - 计算blob的哈希索引,将其用作非唯一索引,并编写强制blob唯一性的代码。

解决方案1更安全,但存储空间开销和性能损失是否足以使解决方案2成为更好的选择?

1 个答案:

答案 0 :(得分:1)

我会选择#2,部分原因是节省空间的措施,但更多是因为某些DBMS不允许LOB上的索引(想到了Oracle,但这可能是旧的限制)。

我可能会为哈希值创建两列,MD5和SHA1(在客户端语言中通常都支持)。然后添加一个涵盖这两列的唯一组合索引。两个哈希发生碰撞的可能性极小,特别是考虑到您预期的桌子尺寸。但是,您仍然应该有一个恢复策略(可能就像将其中一个值设置为0一样简单。)