在我的应用程序中,我有“文章”(类似于帖子/推文/文章),它们标有描述性预定义标签:即“困难”、“简单”、“红色”、“蓝色”、“业务”等
这些可用标签存储在一个表中,称为“标签”,其中包含所有可用标签。
每篇文章都可以标记多个标签,并可通过自定义管理界面进行编辑。
简单地将每个实体的标签捆绑到每个标签的 ID 的字符串化数组中并将其与文章记录一起存储在我的“文章”表中可能很诱人:
id | title | author | tags
---+-------+--------+-------------
1 | title | TG | "[1,4,7,12]"
尽管出于多种原因我确信这是一个坏主意,但是否有合理的理由执行上述操作?
我想你应该读一下数据库规范化 https://en.wikipedia.org/wiki/Database_normalization并自己决定。简而言之,您的提案存在许多问题,但您可能会决定接受这些问题。
最明显的是:
- 如果将附加标签添加到 row(1) 会怎样?您是否必须首先解析,检查它是否已经存在,然后将行更新为
tags.append(newTag)
.
- 更糟糕的是删除标签?搜索标签,存在,重新创建标签。
- 如果标签要更改名称(也许需要进行一些审核过程)怎么办?
- 更糟糕的是,不同的人以不同的方式指定标签名称怎么办——这很难合理化。
- 如果想根据标签查询数据怎么办?您的查询变得比需要的复杂得多。
- 表示:客户端必须解析标签才能使用它。分隔符字段怎么样?改变这一点,所有客户都必须改变。
简而言之,所有这些操作都变得更加困难和繁琐。标准化旨在克服此类问题。在我看来,执行您所说的操作的唯一原因可能是您一次性捕获数据,并且它只是信息性的 - 也就是说,对用户有意义,但对系统本身没有意义。这有点像说最好避免它(再次,IMO)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)