表数据是根据业务来分,还是根据代码查询方便来分?

1. 问题描述?

最近遇到一个比较纠结的问题,可能也算不上问题,就是心中有些纠结。

我现在所做的游玩安检项目,游客目前来源有以下3种:
1.景区工作人员提前将明天要来的人员录入系统,第二天 游客刷身份证 来安检。
2.游客到了景区,扫二维码申请临时通行证,工作人员审核通过,可以凭二维码安检进去。
3,游客有长期年卡,刷年卡 安检进入景区。

因为需求一开始只有 来源1,所以有一张表A记录 录入的游客信息,一张表C记录安检时间 等信息,C表的link_id 和A表的主键关联。
后来新需求是 来源增加2,3 ,并且系统有单独的操作和查看界面。现在我是 新建表B存来源2的数据,表D来存来源3的数据,因为他们各自有各自的查看和操作页面,理论上这也没啥问题

但是还有一个安检记录页面,需要展示安检记录以及对应来源表字段的一些信息,那么查询时候就
需要
FROM 表C
left join 表A on ‘A.id = C.link_id AND C.ctype = 标志A’
left join 表B on ‘B.id = C.link_id AND C.ctype = 标志B’
left join 表ADon ‘D.id = C.link_id AND C.ctype = 标志D’
这样感觉查询比较麻烦,如果我将三个来源数据存在一张表的话 这部分查询就方便一些,不用关联那么多表,并且目前B,D表和A存在几个相同的字段。

但是如果以后在增加来源4,来源5的话,如果字段差别比较大,放在一张表好像也不好。

各位大佬有啥好的建议,你们觉得放在一个表好 还是分开好?

UKNOW
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

年卡和临时通行证都有独立属性。临时通行证可能还需要定期删除(可能还需要做数据查询统计),年卡一样。所以分开是有必要的。而且页面也是分属不同的页面,分开逻辑更加清晰。而且很明显,安检记录信息是固定不变的,该表该做冗余就冗余,这样就不需要联表查询了或者不需要联很多张表。

2年前 评论
UKNOW (楼主) 2年前
讨论数量: 23

尽早分,并且我觉得你的关联查询可以通过「远程一对多」实现吧,这看起来并不复杂

2年前 评论
UKNOW (楼主) 2年前
UKNOW (楼主) 2年前

三张表吧,c表加个type字段确认是哪个表的id

2年前 评论
UKNOW (楼主) 2年前
deatil (作者) 2年前
一句话儿 2年前
deatil (作者) 2年前
一句话儿 2年前

感觉还是得看业务和场景,就目前来看,感觉更新像是核销功能,A表:游客表 C表:游客id, type:来源, status: 是否核销。不同来源,差别字段都在A表冗余。不知道行不行哦。

2年前 评论
UKNOW (楼主) 2年前

业务上建议使用一张表来管理,就类似有个通行证表,1,2,3不管有多少种业务类型在完成后统一写一条通行证记录,闸机只验证记录只和这一张表做关联

2年前 评论
UKNOW (楼主) 2年前
deatil 2年前
aaccbb (作者) 2年前
UKNOW (楼主) 2年前

年卡和临时通行证都有独立属性。临时通行证可能还需要定期删除(可能还需要做数据查询统计),年卡一样。所以分开是有必要的。而且页面也是分属不同的页面,分开逻辑更加清晰。而且很明显,安检记录信息是固定不变的,该表该做冗余就冗余,这样就不需要联表查询了或者不需要联很多张表。

2年前 评论
UKNOW (楼主) 2年前

“分而治之” -- 始终坚信这个原则

2年前 评论
UKNOW (楼主) 2年前
bigdaxin (作者) 2年前

我的想法是分开的话会比较好,毕竟业务线不太一样。另外这个也可以不用关联查询,拆分成几条简单的 SQL 就好。先查一次 C 表,然后再把其他表A、B、D的 ID 列出来单独 IN 查询,最后再手动拼接数据

2年前 评论
UKNOW (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!