关于"多级目录(分类)"的一些想法 ----- 实现方法
问题是这样的:
假设我们的网站是一个购物网,现在我们对商品进行分类,分成5个大类:A、B、C、D、E;二级目录分别为 (A:A11、A12、A13)、(B:B11、B12、B13)...;然后三级目录(A1:A211、A212、A213)、(B1:B211、B212、B213)...;然后四级、五级...一直到 n 级(当然,购物网是不可能 n 级的),我只是说这个级数是动态的,你不能预知它的级数,并且分类可能出现变更——比如哪天突然将 A1 更改到 B 、B21 更改到 A1、删除 A2,这些变更我们如何处理?我们的数据如何存放?
我还是说说处理方式吧:数据我们通常是放在数据库中的,依据上面的需求,数据库的分类表的表数据可能如下:
表1、
在这种表结构中,如果需要找某个类相应级数的子类,我们只需要递规找出相应级数的子类即可。
表2、
这种表结构呢,如果要查找每级的相应子类及某个类的所有子类,就不用那么复杂了,直接查就可以了。
对比以上两种表结构,我们可以看出,
表1:插入、更新方便、删除方便,但查询就不那么方便了;
表2:查询比较方便,但插入就不那么方便了,尤其是更新、删除;
所以,在项目中,我们最好更根据自己的实际需求来选择相应的表结构。
然而,除了以上两种表结构,我们有没有更好的方式来处理这种层次性目录(分类)?我想到的只有xml了。这就是第三种数据形式了:
3、
<self_id id="A">
<child_id id="A1">
<child_id id="A211"></child_id>
</child_id>
</self_id>
在我看来,xml形式的数据很好的解决了以上两种实现方式的弊端,无论是对于查询,还是更新、删除,我们只需要对节点进行操作即可。
以上只是个人在项目中的一些想法(会不会有点纸上谈兵呢?),有什么不当的地方希望大家指出,同时,如果您有好的解决方法,也希望您告知。
假设我们的网站是一个购物网,现在我们对商品进行分类,分成5个大类:A、B、C、D、E;二级目录分别为 (A:A11、A12、A13)、(B:B11、B12、B13)...;然后三级目录(A1:A211、A212、A213)、(B1:B211、B212、B213)...;然后四级、五级...一直到 n 级(当然,购物网是不可能 n 级的),我只是说这个级数是动态的,你不能预知它的级数,并且分类可能出现变更——比如哪天突然将 A1 更改到 B 、B21 更改到 A1、删除 A2,这些变更我们如何处理?我们的数据如何存放?
我还是说说处理方式吧:数据我们通常是放在数据库中的,依据上面的需求,数据库的分类表的表数据可能如下:
表1、
self_id |
Parent_id |
… |
|
A |
0 |
… |
|
B |
0 |
… |
|
... |
… |
… |
|
A11 |
A |
|
|
A12 |
A |
|
|
… |
… |
… |
|
B11 |
B |
… |
|
B12 |
B |
… |
|
… |
… |
… |
|
A211 |
A1 |
… |
|
A212 |
A1 |
… |
|
… |
… |
… |
|
B211 |
B11 |
… |
|
B212 |
B11 |
… |
|
… |
… |
… |
在这种表结构中,如果需要找某个类相应级数的子类,我们只需要递规找出相应级数的子类即可。
表2、
self_id |
Parent_id |
… |
|
A |
0 |
… |
|
B |
0 |
… |
|
... |
… |
… |
|
A11 |
A |
|
|
A12 |
A |
|
|
… |
… |
… |
|
B11 |
B |
… |
|
B12 |
B |
… |
|
… |
… |
… |
|
A211 |
A/A11 |
… |
|
A212 |
A/A11 |
… |
|
… |
… |
… |
|
B211 |
B/B11 |
… |
|
B212 |
B/B11 |
… |
|
… |
… |
… |
这种表结构呢,如果要查找每级的相应子类及某个类的所有子类,就不用那么复杂了,直接查就可以了。
对比以上两种表结构,我们可以看出,
表1:插入、更新方便、删除方便,但查询就不那么方便了;
表2:查询比较方便,但插入就不那么方便了,尤其是更新、删除;
所以,在项目中,我们最好更根据自己的实际需求来选择相应的表结构。
然而,除了以上两种表结构,我们有没有更好的方式来处理这种层次性目录(分类)?我想到的只有xml了。这就是第三种数据形式了:
3、
<self_id id="A">
<child_id id="A1">
<child_id id="A211"></child_id>
</child_id>
</self_id>
在我看来,xml形式的数据很好的解决了以上两种实现方式的弊端,无论是对于查询,还是更新、删除,我们只需要对节点进行操作即可。
以上只是个人在项目中的一些想法(会不会有点纸上谈兵呢?),有什么不当的地方希望大家指出,同时,如果您有好的解决方法,也希望您告知。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?