Postgresql
正確使用表中的數組?同一欄位和記錄的多個元素
考慮到另一個程序中的一些使用者輸入,我有一組處理優先級每天都在變化。每個優先級都有一個項目和一組分配給它的名稱。名稱可以跨優先級重複,並且每個優先級通常有多個名稱。有沒有更好的方法來組織我的優先級表?我是否出於正確的原因使用該陣列?請注意,
name_id
我priorities
表中的欄位是一個數組。該數組可以是 2500 個元素長。我在 PostgreSQL 中這樣做。很高興提供更多細節。表
names
:+---------+------+ | name_id | name | +---------+------+ | 1 | bob | | 2 | joe | | 3 | ben | +---------+------+
表
items
:+---------+--------+ | item_id | item | +---------+--------+ | 1 | sticks | | 2 | stones | | 3 | cars | | 4 | buses | +---------+--------+
表
priorities
:+----------+---------+---------+ | priority | item_id | name_id | +----------+---------+---------+ | 1 | 1 | [2,3] | | 2 | 3 | [1] | | 3 | 4 | [1,2,3] | +----------+---------+---------+
這不遵循第一範式(1NF)。您的
priorities
表應包含每行priority
,item_id
和name_id
:+----------+---------+---------+ | priority | item_id | name_id | +----------+---------+---------+ | 1 | 1 | 2 | | 1 | 1 | 3 | | 2 | 3 | 1 | | 3 | 4 | 1 | | 3 | 4 | 2 | | 3 | 4 | 3 | +----------+---------+---------+
這將使
name_id
從priority
/item_id
組合中輸入或刪除 a 變得更加容易。所有 3 個欄位都應構成主鍵,以防止重複輸入。如果您需要
name_id
在數組中,那麼您始終可以為此目的創建一個視圖。