php - 这种标记方法的任何缺点

标签 php database mysql tags

我有一张标签

的表格
ID      tag
---     ------
1       tagt
2       tagb
3       tagz
4       tagn

在我的 items 表中,我使用的是序列化格式的标签,逗号分隔

ID       field1       tags
----     ------       -----
1        value1       tagt,tagb
2        value2       tagb
3        value3       tagb,tagn
4        value4

当我需要查找具有此标签的项目时,我计划对标签进行反序列化。但我实际上不确定该怎么做,以及是否最好在标签和项目之间使用第三个关联表。

最佳答案

一般来说,人们会尝试利用关系数据库的力量来发挥自己的优势。换句话说,每次访问任何标记功能时都对 string 进行序列化和反序列化,这不仅效率低得令人难以置信,而且由于其他原因也是糟糕的设计。

例如,如果不小心将(未定义的)标签 tagc 添加到 itemtags 字段中怎么办?代码将很难调试。

创建包含关联 ID 记录的第三个表是一个更好的选择。此外,您可以创建如下所示的 taggings 表:

ID    item_id    tag_id    tagger_id    etc
-------------------------------------------

并将元数据与每个标记一起存储。

过度依赖字符串来存储结构化数据既低效又难以维护。为了避免“字符串类型”代码,在这些情况下进一步对域建模会更好。

关于php - 这种标记方法的任何缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2901540/

相关文章:

ios - 'INSERT INTO' 突然返回错误 'PRIMARY KEY must be unique'

mysql - Ruby On Rails、MySQL windows 8.1 64位 mysql gem 令人沮丧

php - 每次用户刷新页面时,从 URL 运行 PHP 脚本

php - 正则表达式匹配空格但跳过部分

javascript - Google 登录错误 400。为目标域生成登录提示的权限被拒绝

mysql - 每个键选择两行最近的时间

php - 使用 codeigniter 更新

php - 使用 PHP SSH 进入机器

sql - 找不到数据类型地理

sql - 如何快速 self 加入(与不同的相同)?