gpt4 book ai didi

php - 何时使用映射表

转载 作者:行者123 更新时间:2023-11-29 04:48:46 26 4
gpt4 key购买 nike

在 MySQL 中,如果我有有限数量的永远不会改变的类别,我应该将它们创建为它们分类的表中的 bool 字段,还是应该使用映射 table ?如果是,为什么?


案例 A:

t_stuff

id (int) 
name (string)
category_a (bool)
category_b (bool)
category_c (bool)
category_d (bool)
category_e (bool)
category_f (bool)

案例 B:

t_stuff

id (int)
name (string)

t_类别

id (int)
name (string)

t_stuff_category

id (int)
stuff_id (int)
category_id (int)

虽然 A 看起来不像 B 那样“好”,但就所需的查询而言,它似乎确实简单了很多?

编辑:我觉得我应该补充一点,我需要做的就是:

  • 获取所有内容行
  • 获取属于某一特定类别的所有行
  • 获取一个具有特定 id 的行

最佳答案

切勿使用案例 A。它违反了关系数据库的原则。了解 normalization .

假设您要查找 category = 1id,您需要检查每一列以防 A:

SELECT id 
FROM t_stuff
WHERE category_a = 1
OR category_b = 1
OR category_c = 1
OR category_d = 1
OR category_e = 1
OR category_f = 1

这种设计不仅难以查询,而且还是聚合的噩梦。如果您想获取特定 id 的类别的 COUNT(*) 怎么办?

B 的情况下,您只需查询一个属性:

SELECT stuff_id 
FROM stuffCategory
WHERE category_id = 1

要获得 COUNT(*),您只需替换 id

此外,您不需要t_stuff_category 下的id。 (stuff_id, category_id) 的复合主键就足够了。

关于php - 何时使用映射表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14415919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com