如何修改Media Wiki数据库以支持带文件夹结构的文件集合?
解决方案:为媒体元数据数据库添加集合型实体支持
一、数据库设计方案
1. 新增集合实体表
创建media_collection表,存储游戏、软件、种子这类集合的整体信息:
collection_id:主键,唯一标识集合name:集合名称(如游戏名、软件名)type:集合类型(枚举值:game/software/torrent)average_rating:整体评分(浮点型,支持用户打分后计算平均值)description:集合描述created_at/updated_at:时间戳
2. 新增集合-文件关联表
创建collection_file_association表,用来关联集合与下属文件,同时标记文件属性:
assoc_id:主键collection_id:外键,关联media_collection表file_id:外键,关联现有媒体文件表(若为非媒体文件,可留空或存文件唯一标识)file_path:文件在集合内的完整路径(如GameFolder/Data/Video/intro.mp4)is_metadata_visible:布尔值,标记是否为需展示元数据的媒体文件(true=可跳转元数据页,false=仅显示文件名)
3. 复用现有媒体文件表
无需修改现有媒体文件表,通过collection_file_association表的file_id关联,直接复用单个媒体文件的元数据记录。对于非媒体文件(如游戏配置文件),file_id可设为null,仅通过file_path记录名称和路径。
二、前端展示逻辑
1. 集合详情页渲染文件夹结构
- 从
collection_file_association表中查询当前集合的所有文件记录,按file_path拆分目录层级(如用/分割路径),递归构建目录树。 - 渲染目录时,先展示文件夹节点,再展示下属文件节点。
2. 文件节点交互逻辑
- 若
is_metadata_visible为true:将文件名渲染为链接,指向该媒体文件的元数据页面(通过file_id跳转)。 - 若
is_metadata_visible为false:仅渲染纯文本文件名,无跳转链接。
3. 集合整体评分功能
- 在集合详情页顶部添加评分控件(如星级评分),用户提交评分后,更新
media_collection表的average_rating字段(可通过计算所有用户评分的平均值实现)。
三、扩展性说明
- 集合类型
type字段采用枚举,后续可轻松新增其他集合类型(如影视合集)。 file_path字段支持任意层级的目录结构,能覆盖复杂的游戏/软件文件目录。
内容的提问来源于stack exchange,提问作者Spare-Spray6508
相关产品推荐
相关产品推荐

