将数组存储为字段值或将数组值存储为记录是不是一个好主意?

Oli*_*J90 8 sql database postgresql database-design

在我的应用程序中,我有"文章"(类似于帖子/推文/文章),标有描述性预定义标签:即"困难","简单","红色","蓝色","商业"等

这些可用标签存储在一个表中,称之为"标签",其中包含所有可用标签.

每篇文章都可以使用多个标签进行标记,可通过自定义管理界面进行编辑.

简单地将每个实体的标签捆绑到每个标签的ID的字符串化数组中并将其与文章记录一起存储在我的"文章"表中可能很诱人:

id | title | author | tags
---+-------+--------+-------------
1  | title | TG     | "[1,4,7,12]"
Run Code Online (Sandbox Code Playgroud)

虽然我确定这是一个糟糕的主意,原因有很多,有没有合理的理由去做?

wmo*_*365 9

我想你应该阅读有关数据库规范化的内容并自行决定.简而言之,您的提案存在许多问题,但您可能认为可以与他们共处.

最明显的是:

  1. 如果在行(1)中添加其他标记会怎样?您是否必须首先解析,检查它是否已经存在然后更新行tags.append(newTag).
  2. 更糟糕的是还在删除标签?搜索标签存在,重新创建标签.
  3. 如果标签要更改名称 - 也许是一些审核过程怎么办?
  4. 更糟糕的是,不同的人如何不同地指定标签名称 - 这很难合理化.
  5. 如果您想根据标签查询数据怎么办?您的查询变得比它需要的复杂得多.
  6. 演示:客户端必须解析标记才能使用它.分隔符字段怎么样?改变这一点,所有客户都必须改变.

简而言之,所有这些操作变得更加困难和繁琐.规范化旨在克服这些问题.做你所说的IMO的唯一原因可能就是你将数据捕获为一次性而且只是信息性的 - 也就是说,对用户而言是有意义的,而不是系统本身.这有点像说它最好避免(再次,IMO).