gpt4 book ai didi

sql - 我应该使用什么类型的数据结构来模拟文件系统?

转载 作者:可可西里 更新时间:2023-11-01 07:06:43 25 4
gpt4 key购买 nike

标题可能措辞奇怪,但这可能是因为我什至不知道我是否在问正确的问题。

所以基本上我要构建的是一个“面包屑”分类类型系统(如文件目录),其中每个节点都有一个父节点(根除外),每个节点可以包含数据或另一个节点。这将用于在数据库中组织电子邮件地址。我现在有一个系统,您可以在其中创建一个“组”并向该组添加电子邮件地址,但是向其中添加一个组织系统会非常好。

这(在我的脑海中)是树格式,但我不知道是什么树。

我遇到的问题是使用 MySQL 构建它。遍历内存中的树很容易,但在数据库中,这有点棘手。


树的图像:http://j.imagehost.org/0917/asdf.png


SELECT * FROM 企业:Tim's Hardware Store、7-11、Kwik-E-Mart、Cub Foods、Bob's Grocery Store、CONGLOM-O

从杂货店中选择 *:Cub Foods、Bob 的杂货店、CONGLOM-O

从大型杂货店中选择 *:CONGLOM-O

从教会中选择 *:圣伯多禄堂、圣约翰堂


我认为这应该是足够的信息,因此我可以准确描述我的目标。

最佳答案

好吧,您可以使用一些模式。哪一个是正确的取决于你的需要。

您需要选择一个节点及其所有子节点吗?如果是这样,那么一个 Nested set Model (Scroll down to the heading)可能对你更好。该表将如下所示:

| Name     | Left | Right |
| Emails | 1 | 12 |
| Business | 2 | 7 |
| Tim's | 3 | 4 |
| 7-11 | 5 | 6 |
| Churches | 8 | 11 |
| St. Pete | 9 | 10 |

那么,要找到节点下方的任何内容,只需执行

SELECT name FROM nodes WHERE Left > *yourleftnode* AND Right < *yourrightnode*

查找节点上方的所有内容:

SELECT name FROM nodes WHERE Left < *yourleftnode* AND Right > *yourrightnode*

如果您只想查询特定级别,您可以执行 Adjacency List Model (Scoll down to the heading) :

| Id | Name     | Parent_Id |
| 1 | Email | null |
| 2 | Business | 1 |
| 3 | Tim's | 2 |

要查找同一级别的所有内容,只需执行以下操作:

SELECT name FROM nodes WHERE parent_id = *yourparentnode*

当然,没有什么能阻止您采用混合方法,这种方法可以让您根据自己的喜好进行查询

| Id | Name     | Parent_Id | Left | Right | Path             |
| 1 | Email | null | 1 | 6 | / |
| 2 | Business | 1 | 2 | 5 | /Email/ |
| 3 | Tim's | 2 | 3 | 4 | /Email/Business/ |

真的,这只是你的需求问题......

关于sql - 我应该使用什么类型的数据结构来模拟文件系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3471514/

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