Postgresql

PostgreSQL 多維數組 - 在這種情況下可以使用還是設計錯誤?

  • April 20, 2017

我有一個名為列表的表。對於每個列表,使用者可以上傳 5 張圖片。在表格清單中,我有一個多維數組images text[][]。每個多維元素都將持有[ a base64 string, filename of image].

我唯一一次對images[][]數組進行搜尋是如果使用者刪除了圖像,我會在images[][]數組中搜尋圖像的文件名並將其刪除。

我真的很想避免只為圖像提供一張桌子。任何圖像都不會屬於一個以上的列表 我無法證明外鍵查找的成本確實沒有任何好處。

在 PostgreSQL 文件中讀到

數組不是集合;搜尋特定的數組元素可能是數據庫設計錯誤的標誌。

因為我唯一一次搜尋特定數組元素是當使用者刪除圖像時……這是否構成數據庫設計錯誤?我真的希望對列表圖像使用非規範化。

如果您想避免固定最大圖像的任何成本,並將磁碟佔用量保持在最低限度,請不要使用數組,這會為數組類型增加 24 字節的成本,類似於一行的成本。

將 5 個單獨的列添加到該行。一些具有 NULL 值的空列幾乎沒有成本。搜尋起來更加尷尬(您必須查看每一列),但您說這與案例無關。

如果圖像的數量是動態的,我會建議使用 1:n 表進行標準化設計images(無論如何這不是一個壞主意)。

畢竟,如果您需要偶爾搜尋,則可以選擇bloom index。手冊:

當表具有許多屬性並且查詢測試它們的任意組合時,這種類型的索引最有用。傳統的 btree 索引比bloom 索引更快,但它可能需要許多 btree 索引來支持所有可能的查詢,其中一個只需要一個bloom 索引。但是請注意,bloom 索引僅支持相等查詢,

或者一個覆蓋 5 列的 ARRAY 表達式的 GIN 索引。

關於儲存的相關答案:

引用自:https://dba.stackexchange.com/questions/171463