现业务需求共有5张表
role(角色表)、tag(标签表)、role_tag(角色标签表)、file(文件表)、file_tag(标签文件表)
其中 角色和标签为多对多关系、文件与标签为多对多关系
标签表 为动态维护的树形结构
标签文件表大体结构:
业务需求:根据选择的标签条件(多选)同时符合条件(and关系)筛选需要的文件
有没有什么好的设计方案,按照现在这种结构感觉很笨重。而且数据量大的情况下很慢。
对于这个数据库设计问题,建议可以考虑进行以下优化:
对于标签表的动态维护的树形结构,可以使用父子关系模型进行存储和查询,这样可以方便地查询某个标签的所有子标签信息,从而提高查询效率。
对于业务需求中根据选择的标签条件(多选)同时符合条件(and关系)筛选需要的文件,可以通过对标签文件表进行联合查询来实现。具体地,可以先获取所有符合条件的标签列表,然后根据标签列表进行联合查询,以获取文件表中符合条件的文件信息。为了提高查询效率,可以建立标签文件表的复合索引,加速查询过程。
可以考虑将表中数据进行分片存储,减少单个表的数据量,从而优化查询性能。
总之,要做出高效的数据库设计,需要充分考虑业务需求,选择合适的存储方案和查询策略,合理建立索引等。同时,定期进行数据库优化,清理冗余数据等操作,也可以有效地提高数据库性能。