【问题标题】:MySQL Structure for tree with different typesMySQL不同类型树的结构
【发布时间】:2020-08-06 09:43:20
【问题描述】:

我的任务是构建一个树形结构。我对这件事没有经验,想知道我的方法是否有任何明显的问题。

所以我有一个必须保持不变的大型文件表(以及关于该文件中经常使用的数据的字段),并且我正在创建一个包含文件夹的结构,因此文件夹可以包含 X 个文件和 X 个文件的文件夹。但文件不能有子文件。

对于我认为我必须处理 null folderId 或 fileId 的结构,但除此之外我认为还可以。

所需的输出是树结构将通过 REST API 延迟加载,因此用户可以单击一个节点并使用 ID 检索其所有子节点。我不确定我的设计是否理想,所以我正在征求一些反馈意见。

我打算像这样构建我的表结构(提前抱歉格式错误):

文件表

  • 身份证
  • 版本
  • 文件

文件夹表

  • 身份证
  • 姓名

项目表

  • 身份证
  • FolderId 外键
  • FileId 外键

树表

  • 身份证
  • ParentId 树表外键
  • 项目 ID 外键

【问题讨论】:

  • 你的问题我不清楚!最好添加一些输入和所需输出的示例。
  • @majidhajibaba 嘿,感谢您的评论,我刚刚更新了我的帖子。

标签: mysql database data-structures tree hierarchy


【解决方案1】:

我想只用一张桌子

DirObject

具有以下字段:

  • 身份证
  • ParentId #Link to parent object -- parent 应该是“文件夹”类型
  • ObjectType #文件夹或文件
  • 版本
  • 所有者用户
  • 所有者组
  • 权限
  • 最后更新
  • 文件大小
  • 状态
  • 路径

更新:

由于您需要单独的文件表,请尝试以下操作:

文件夹

  • 身份证
  • ParentId #链接到父文件夹
  • 所有者用户
  • 所有者组
  • 权限
  • 最后更新
  • 状态
  • 路径

文件

  • 身份证
  • FolderId #Folders 表中的外键
  • 所有者用户
  • 所有者组
  • 权限
  • 最后更新
  • 状态
  • 路径

注意:

Path 的值应该和普通目录的工作方式一样 \folder1\folder2\folder3\文件名

当您想要获取某个文件夹的大小时,这会有所帮助。 您的查询看起来像

SELECT SUM(FileSize) from db.files where path like '\path\of\folder\%';

【讨论】:

  • 感谢您的回复。这种方法可行,但我的文件表需要与树分开,这是我遇到的主要困境。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 2017-12-08
  • 1970-01-01
相关资源
最近更新 更多