2010-12-10 59 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

相關問題