PHP/Mysql : A db entry needs to store multiple values for categorization (cat, 子目录、标签)

标签 php mysql sql database-design categories

我面临的这个问题对您来说可能听起来微不足道,但我想知道,除了 ENUM 类型之外,还可以使用什么来在单列中存储类别、子类别和多个标签的数值?

场景:

  • 数据库条目需要有类别(id=4)、子类别(id=43)和标签(id=78、id=85、id=98、id=112等)

  • tbl_entry 有一个“类别”列或类似列,旨在保存这些值 (4,43,7,85,98,112,...)
  • ENUM 真的适合并推荐的存储方式吗?

    但是,我正在考虑完全省略这样的列并应用类似于 Wordpress 的解决方案 - 创建分类法(cat、subcat、标签),然后在另一个名为“关系”的表中将我的条目的 ID 与它配对正确的分类法。此解决方案的问题是 50,000 个条目会产生如此多的关系行(1 个用于 cat,1 个用于 subcat,但最多 20 个用于标签)。

    您能否详细说明建议的方法和/或建议新的方法?

    编辑

    下面是不惜一切代价避免在单个列中存储多个值的建议。认可并赞赏!

    我正在考虑为 cat、subcat、标签创建 3 个单独的表。 此外,通过这种方式,我可以使用 Martin Fowler 的模式“数据映射器”和“表继承”来处理我的应用程序的这方面(条目分类)。

    最佳答案

    如果您想单独访问多个值,切勿在单个列中存储多个值 - 这是一个等待发生的事故!

    只需忘记 multi-id 列,但它可能会被实现:想想需要什么来查找具有某些标记的所有行:您需要以文本方式解析所有行的 multi-vlue 字段,丢弃大部分其中:每个查询都变成带有计算的全表扫描 - 最坏的情况。

    执行此操作的规范方法是使用具有关系的连接表,可能会生成大量记录,但可以以非常快的方式访问这些记录,因为它们实际上只是索引。

    将其分解为类别联接表和标签联接表可能会也可能不会进一步加快速度,具体取决于您的业务逻辑仅需要其中之一的频率。

    关于PHP/Mysql : A db entry needs to store multiple values for categorization (cat, 子目录、标签),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22114426/

    相关文章:

    mysql - 如何将当前时间与 MySQL 中的时间变量进行比较

    php - UTF8 编码的字符串在 MySQL 中无法正确显示

    MySQL - 查询以获得特定结果

    php - Behat:Goutte/Guzzle 通过 cURL "Warning: curl_setopt_array(): 3607 is not a valid File-Handle resource"下载文件

    mysql - 包含 UTF8 字符的旧条目错误地保存在 UTF8 数据库中

    php - 无法弄清楚一个复杂的 SQL 查询

    python - 获取4天内创建的每组记录中的 'top'记录

    php - 如何将带有 formgroup 值的图像/文件上传到 API?

    php - PHP 中同名的不同元素

    php - 执行 php 文件 onClick