PostgreSQL数组数据类型有哪些正确的用例?

dan*_*dan 25 postgresql

在我看来,PostgreSQL数组数据类型的功能与标准的一对多和多对多关系重叠很多.

例如,一个名为users的表可能有一个名为"favorite_colors"的数组字段,或者可能有一个名为"favorite_colors"的单独表和一个"users"和"favorite_colors"之间的连接表.

在什么情况下数组数据类型可以使用而不是完整的连接?

mar*_*arc 20

不应该使用类似于关系的数组.它应该包含与一行非常紧密相关的索引值.例如,如果你有一张足球比赛结果的桌子,那么你就不需要做了

id team1 team2 goals1 goals2
Run Code Online (Sandbox Code Playgroud)

但会这样做

id team[2] goals[2]
Run Code Online (Sandbox Code Playgroud)

因为在这个例子中,大多数人还会考虑将其归一化为两个表是愚蠢的.

总而言之,我会在你对关系不感兴趣的情况下使用它,而在其他地方你会添加像这样的字段field1 field2 field3.


non*_*hto 8

我完全同意@marc。当您绝对确定不需要在数组中的项目与任何其他表之间创建任何关系时,可以使用数组。它应该用于紧密耦合的一对多关系。
一个典型的例子是创建一个多项选择题系统。由于其他问题不需要知道问题的选项,因此可以将选项存储在数组中。
例如

CREATE TABLE Question (
  id integer PRIMARY KEY,
  question TEXT,
  options VARCHAR(255)[],
  answer VARCHAR(255)
)  
Run Code Online (Sandbox Code Playgroud)

question_options这比创建表并通过连接获取选项要好得多。


Ros*_*mbo 5

一个非常方便的用例是标记:

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

-- Select all posts with tag 'kitty'
SELECT * FROM posts WHERE tags @> '{kitty}';
Run Code Online (Sandbox Code Playgroud)