在我看來,PostgreSQL數組數據類型的功能與標準的一對多和多對多關係有很大的重疊。什麼是PostgreSQL陣列數據類型的正確用例?
例如,一個名爲users的表可能有一個名爲「favorite_colors」的數組字段,或者可能有一個名爲「favorite_colors」的單獨表和「users」和「favorite_colors」之間的聯接表。
在什麼情況下可以使用數組數據類型來代替全面連接?
在我看來,PostgreSQL數組數據類型的功能與標準的一對多和多對多關係有很大的重疊。什麼是PostgreSQL陣列數據類型的正確用例?
例如,一個名爲users的表可能有一個名爲「favorite_colors」的數組字段,或者可能有一個名爲「favorite_colors」的單獨表和「users」和「favorite_colors」之間的聯接表。
在什麼情況下可以使用數組數據類型來代替全面連接?
數組不應該類似於關係。它應該包含與一行非常緊密相關的索引值。例如,如果你有沒有和足球比賽的結果的表,比你不需要做
id team1 team2 goals1 goals2
,但會做
id team[2] goals[2]
因爲在這個例子中,大部分也會考慮正常化這分成兩張桌子會很愚蠢。
因此,總而言之,如果您不關心如何建立關係,以及在哪裏添加字段如field1 field2 field3
,那麼總之我會使用它。
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]);
一個令人難以置信的方便使用情況標籤:
CREATE TABLE posts (
title TEXT,
tags TEXT[]
);
-- Select all posts with tag 'kitty'
SELECT * FROM posts WHERE tags @> '{kitty}';
我想舉兩個upvotes對於這個答案,如果有可能;-) – Arsen7
另一個例如,涉及基於機器的翻譯。 (Sort of)http://stackoverflow.com/q/4967012/562459 –
如果使用數組數據類型,那麼如何輕鬆提取所有匹配中一個團隊的性能數據? – hllau