分类 id name parent_id
1 A 0
2 B 1
3 C 2
数据库这样的分类,现在商品选择了分类之后c,要在商品列表显示出分类为 A/B/C 这样的效果,如何设计合理
如果在分类表存A/B/C这样的一个字段,那么修改一个分类名就会有很多条记录修改,不合理
如果在查询商品时再去查询也不合理
(分类会很多,商品列表也可能很多)
分类 id name parent_id
1 A 0
2 B 1
3 C 2
数据库这样的分类,现在商品选择了分类之后c,要在商品列表显示出分类为 A/B/C 这样的效果,如何设计合理
如果在分类表存A/B/C这样的一个字段,那么修改一个分类名就会有很多条记录修改,不合理
如果在查询商品时再去查询也不合理
(分类会很多,商品列表也可能很多)
对分类表而言:
分类表中需要添加一个字段, 记录分类id的路径,比如对C分类而言记录1/2/3, 对B分类记录1/2, 对A而言记录1.
这样无论分类如何变化,都是不需要动分类表的.
对商品表而言:
因为要在商品列表中显示分类, 最好是在获取商品列表的时候,不再查询分类表,不然挺烦的.
因此, 在设置商品分类的时候(比如选择C分类),将C分类的id记录下来, 同时也可以添加冗余字段,将要显示的分类(比如C分类), 则将A/B/C记录下来.
这样虽然会出现一些分类数据不准确的情况, 但是对分类而言, 修改分类本身是小概率的事情,出现一些误差其实也没什么大问题.
在访问商品详情时,为获取更准确的分类信息, 则可以通过分类id查询分类表获取, 这是一个比较简单的操作.如果一定要追求列表分类的准确性,这一步其实有文章可做, 对比分类是否一致,如果不一致, 接下来(日志记录或者异步任务进行更新)...
总之需求和实现之间总得会有一些妥协
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
分类修改不是一个经常性的操作,至于数量多少并不是考虑的重点
增加 路径字段
A/B/C
,修改时的批量 UPDATE 相比带来的便利性是可以接受的