2010-12-10 57 views
0

我正在设计一个数据库(SQLite,SQL Server和DB2),其中一个表包含一个必须是唯一的32kB blob。该表通常会保存约20,000行。如何执行大(BLOB)数据库字段的唯一性

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

1 - 使blob成为唯一索引。

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

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

回答

1

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

我可能会创建两列到散列值,MD5和SHA1(通常在客户端语言中都支持)。然后添加一个覆盖这两列的独特的复合索引。两个哈希碰撞的可能性非常小,特别是考虑到您预期的表格大小。但是,您仍然应该有一个恢复策略(可以像设置其中一个值为0一样简单)。

+0

Thx!你对两个哈希值的阐述是最有价值的! – Batibix 2010-12-10 17:36:13

相关问题