附件系统应该怎么设计比较好?

2021-12-15 12:46:17 +08:00
 dssxzuxc
假如我有 20 张以上的业务表,每张表需要一个或多个附件字段,比如 xxx 信息表,有一个证明材料字段,有个验收材料字段,都是可以上传多个附件的。那我该怎么设计附件系统比较好?
我的初步设想是,首先一个附件主表 file,一个附件从表 file_detail,一对多,从表存文件的路径和具体信息,每个业务表的附件字段存 file_id,这样就能关联起来。但是开发的时候又犯难了,上传的时候,我这么设计文件上传又没办法关联到业务表(上传和表单提交是分开的)。我想到文件上传之后,我把 file_id 返回给前端,前端提交表单再一起提交上来。但是这样又有新的问题,如果用户想要分次上传,比如两张图片,他先上传了 1 张,然后再传另 1 张,就会返回两个 file_id 过来。
我看了公司之前有个项目也涉及到附件,他是这么做的,附件表每多一个业务表就加一个字段,20 张业务表就是 20 个 idxxx 、idxxx 这样的字段,上传的时候把自己的主键存到对应字段,不过这样没办法业务表多附件字段,除非 idxxx 字段加后缀接着细分,而且数据库一堆 null 有点蛋疼。
各位有什么好的建议吗?
4111 次点击
所在节点    Java
32 条回复
nekoneko
2021-12-16 10:35:49 +08:00
@dssxzuxc #18 对呀
nekoneko
2021-12-16 10:36:59 +08:00
@zoharSoul #11 附件可能有上传者,上传时间等等信息,也就没了
zoharSoul
2021-12-16 10:37:42 +08:00
@nekoneko #22 全追加到业务表上就行
zoharSoul
2021-12-16 10:38:10 +08:00
@nekoneko #20 删除了就把业务表上的附件相关字段清掉啊
nekoneko
2021-12-16 10:52:41 +08:00
@zoharSoul #24 业务表只存了个地址,是要字符串匹配着清吗
#23 那意思就是业务表存 json 呗
nekoneko
2021-12-16 10:55:15 +08:00
@zoharSoul #24 你可能看漏了,楼主说了每张表有多个附件字段,每个字段可以有多个附件,我感觉你理解成每个字段只有一个附件了
zoharSoul
2021-12-16 11:12:02 +08:00
@nekoneko #26 嗯, 我的意思就是业务表存 json
2i2Re2PLMaDnghL
2021-12-16 11:31:50 +08:00
『关系型数据库里的数组需要转置一下存成多条记录』
(这是 RDBMS 还没几个数组类型的时候说的)

一对多就是把关系倒转,是附件表里带业务表的 ID 。
neptuno
2021-12-16 11:44:28 +08:00
上传文件是单独的功能,表单跟附件表可以一对多
dssxzuxc
2021-12-16 12:40:46 +08:00
@815979670 这个可行,附件表里加上业务 id 、业务表名、业务字段名 3 个字段,不过插入字段名只能用硬编码,查询 sql 也是用硬编码拼接,而这个字段名对于业务 entity 是多余的,因为业务表不存附件表信息,那这个字段名我只能放 vo 类里面,感觉后期维护容易写出 bug
815979670
2021-12-16 13:42:42 +08:00
@dssxzuxc 如果业务表不存附件信息的话,附件表必须存业务表名+业务 id 啊,不然怎么确定这个附件是属于那个业务表的?
至于硬编码问题,如果你们对查询接口做了同意封装,应该可以通过传参 或者取表名的方式解决。
unco020511
2021-12-16 14:07:57 +08:00
文件上传做成与业务无关的服务,后期管理和切换都方便.业务这边直接存文件 url 就行,有个表来关联 file 和业务 id,你想怎么对应都可以

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/822346

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX