想写个特别特别简单的网盘系统? 数据库设计这样可以吗
没事想写写小项目熟悉一下 go 语言,就想到写一个不像网盘的网盘。。。 需求特别简单。。。就能上传下载文件,把目录,文件列表展示出来就行。 目前想到的数据库表设计是这样的
- 目录(比如 /ppt 这样)
- 类型(文件 /目录)
- 父目录
- 创建时间
- 最近修改时间
- 文件类型(若是文件,比如文本,图片,视频)
- 文件大小(若是文件)
- 文件 md5(若是文件)
- 文件实际存放位置(若是文件)
不考虑其他复杂的情况,这个设计可以吗,求各位大神指点
没事想写写小项目熟悉一下 go 语言,就想到写一个不像网盘的网盘。。。 需求特别简单。。。就能上传下载文件,把目录,文件列表展示出来就行。 目前想到的数据库表设计是这样的
不考虑其他复杂的情况,这个设计可以吗,求各位大神指点
如果你要列出项目 B 的重要文件夹下的全部文件,怎么查询?感觉你现在的结构不太好操作。
可以考虑目录用完整路径,也就是直接把 “/工作 /项目 A/重要 /” 字符串作为目录,不需要父目录。
文件类型可以考虑采用 MIME 标准,参考 https://developer.mozilla.org/zh-CN/docs/Glossary/MIME_type
另外,可能还需要 id 和文件名。
https://larsjung.de/h5ai/
/工作
/工作 /项目 A
/工作 /项目 B
/工作 /项目 A/重要
/工作 /项目 B/重要
/工作 /项目 A/重要 /文件 A.jpg 父目录为 /工作 /项目 A/重要
/工作 /项目 B/重要 /文件 B.jpg 父目录为 /工作 /项目 B/重要
这样子,所以如果我想查项目 B 重要文件夹下的所有文件,我就得全表查父目录为 /工作 /项目 B/重要 的所有项了,好像效率会比较低
三个字段够了,目录和文件名合并为 key,查找时用 LIKE path% 语句查询 key 前缀即可,然后所有文件都保存在同一目录下并以 sha256 命名,不要带后缀名,形如 /path/to/files/(sha256)。文件的类型可以使用第三方库根据后缀名或文件内容推断,文件类型与大小直接用 fs api 读取,数据库里没必要冗余储存。如果确实需要冗余储存建议上 redis