我有一张标签
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
添加到 item
的 tags
字段中怎么办?代码将很难调试。
创建包含关联 ID 记录的第三个表是一个更好的选择。此外,您可以创建如下所示的 taggings
表:
ID item_id tag_id tagger_id etc
-------------------------------------------
并将元数据与每个标记一起存储。
过度依赖字符串来存储结构化数据既低效又难以维护。为了避免“字符串类型”代码,在这些情况下进一步对域建模会更好。
关于php - 这种标记方法的任何缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2901540/