2011-07-27 74 views
21

在我看來,PostgreSQL數組數據類型的功能與標準的一對多和多對多關係有很大的重疊。什麼是PostgreSQL陣列數據類型的正確用例?

例如,一個名爲users的表可能有一個名爲「favorite_colors」的數組字段,或者可能有一個名爲「favorite_colors」的單獨表和「users」和「favorite_colors」之間的聯接表。

在什麼情況下可以使用數組數據類型來代替全面連接?

回答

18

數組不應該類似於關係。它應該包含與一行非常緊密相關的索引值。例如,如果你有沒有和足球比賽的結果的表,比你不需要做

id team1 team2 goals1 goals2 

,但會做

id team[2] goals[2] 

因爲在這個例子中,大部分也會考慮正常化這分成兩張桌子會很愚蠢。

因此,總而言之,如果您不關心如何建立關係,以及在哪裏添加字段如field1 field2 field3,那麼總之我會使用它。

+1

我想舉兩個upvotes對於這個答案,如果有可能;-) – Arsen7

+0

另一個例如,涉及基於機器的翻譯。 (Sort of)http://stackoverflow.com/q/4967012/562459 –

+0

如果使用數組數據類型,那麼如何輕鬆提取所有匹配中一個團隊的性能數據? – hllau

1

The Postgresql documentation gives good examples:

CREATE TABLE sal_emp (
    name   text, 
    pay_by_quarter integer[], 
    schedule  text[][] 
); 

上述命令將創建具有 類型的文本(名稱)的列名爲sal_emp表,類型整數 (pay_by_quarter)的一維陣列,其表示員工每季度的工資, 和一個二維文本(計劃)數組,代表了員工的每週計劃 。

或者,如果你喜歡:

CREATE TABLE tictactoe (
    squares integer[3][3]); 
3

一個令人難以置信的方便使用情況標籤:

CREATE TABLE posts (
    title TEXT, 
    tags TEXT[] 
); 

-- Select all posts with tag 'kitty' 
SELECT * FROM posts WHERE tags @> '{kitty}'; 
相關問題