[数据表字段设计思路争论]设计一个关于门禁路数通行次数字段的数据库设计

135 天前
 xianbing278
如题,关于门禁路数字段的设计有了分歧

需求(是一个整体需求,按段路说了):

1.门禁是一个 lock_id ,它下面还有一路,二路,三路的通行权限。
2.现在有一个通行表里面保存了某个人在某个时间对于某个门禁的一个通行有效期,有这样一条记录在就相当于它有了一个临时通行卡这个作用。
3.每一次他点击按钮开门通行时会有一个通行记录,详细到某个门路上
4.现在需要对某个门禁的某个门路有一个通行次数的权限校验


解决方案:
第一个想法:
1.某个门路的通行次数做成一个配置项可动态调整,比如 1 路=>10 次,2 路=>3 次,3 路=>4 次。然后在需要校验的地方拿配置项内允许的通行次数和通行记录比较来判断权限


第二个想法:
1.某个门路的通行次数做成数据库字段,存入通行表内,比如 lock_one_validity_count,lock_two_validity_count,lock_three_validity_count 。分别代表三个门路的可通行次数,通行一次减一次的做法


请问哪种方式更合适呢
1163 次点击
所在节点    数据库
28 条回复
ChuanlongYou
135 天前
方法二的话,会存在比 4 路更多路数的控制器吗?
xianbing278
135 天前
@ChuanlongYou 会,可能存在这种情况的
ChuanlongYou
135 天前
@xianbing278 虽然字段省事,用就是每条记录都得按照最大路数的结构存,个人感觉不是太好。我之前做的门禁系是存路为实体,和控制器是绑定关系。
Morii
135 天前
如果周期结束通行次数会重置的话,放表里会比较麻烦。扔到 Redis 做吧
xianbing278
135 天前
@ChuanlongYou "我之前做的门禁系是存路为实体,和控制器是绑定关系"不好意思,这句话没理解,能解释下是什么意思吗
xianbing278
135 天前
@Morii 会的,还有重置相关的一个规则控制。扔到 redis 做是什么样做呢
ChuanlongYou
135 天前
@xianbing278 就是表设计上是把控制器和路数拆开了。把每个门路对应着下挂的“门”,“门”去绑定控制器,做操作业务是对应着“门”,不是对“控制器”。之前这样考虑到像一个 2 路控制器,也会存在只用其中一路的情况。
xianbing278
135 天前
@ChuanlongYou 噢大概明白意思了,就是一路对应一路的控制器,二路对应二路的控制器,包括数据表,每个门对应的门路也都是以字母表形式存在。是这样吗
ChuanlongYou
135 天前
@xianbing278 可能是吧。就是把“路”给当成一个实体来做。按照我说的思路,通行记录不和控制器产生直接关系,和门有关系,用字段 door_id , 如果需要查控制器就通过 door_id 去查属于哪个控制器的 ,把路数当“门”好理解些,这是种思路。还是得按照你们的主表设计来考虑吧。
ChuanlongYou
135 天前
@xianbing278 我刚刚看了有点类似,你提供的第一种方案。
cpstar
135 天前
安装传统的关系设计,这不就是 [人(不知道有没有)-门禁(路)-限制] 的三者对应关系?一个表不就够了。然后通行记录做一个 log 表,至于超限,在 log 表里做统计,与第一个表的上限进行比对。

至于硬件控制器,肯定得需要三个,分别对应三路。
LLaMA2
135 天前
简单点问下:
你所说的一路,二路,三路是不是又是一层门

即,你的门禁嵌套是不是和常见的组织架构一样,
即,总公司(大门) ==> 分公司(一路,二路,三路) 。。。。。

依次类推

如果是,那么就有更简单的办法。

求证!
nice2cu
135 天前
类似银行的 账户余额 和 账户流水? 感觉都行的吧 数据量少 方案 1 就行 count 不影响效率。 方案二 对于部准确时 得有矫正措施
codedreamstar
134 天前
第一个想法就行, 只不过通行次数别拿记录来对比, 直接加这么个状态做.

实体
门禁卡, 门, 门禁策略, 通行记录.

用例
新增门禁卡: 添加一个门禁卡
新增门: 添加一个门
授权: 授权门禁卡相关门的门禁策略
鉴权: 检测门禁卡进入门的门禁策略评估并记录

重点说一下门禁策略, 就是简单的门禁卡和门的关联以及有效期和最多通行次数以及已通行次数, 如果需要周期刷次数就加一个次数刷新时间, 评估的时候根据刷新时间置 0 一下就行.

需要更深度更复杂的扩展可以再讨论.
yuyuf
134 天前
选第一种,扩展性好。
第二种,随便加点功能都没法用
xianbing278
134 天前
@cpstar 嗯嗯明白你的思路,一个表里面存入人对门禁路数的最大限制次数,然后使用 log 表的统计对比来实现判断。我也觉得这种方式比较好,但是他妈的不让做细化
xianbing278
134 天前
@ye4tar 不是的,我拿台灯举例吧。台灯首先有开,关两个最基本操作。然后在之上再延伸出 A 模式,B 模式,C 模式这三种模式。目前要对他能使用的模式次数做限制
xianbing278
134 天前
@nice2cu 嗯嗯
xianbing278
134 天前
@codedreamstar 多谢大哥这么明确的思路。现在是不允许往细化方向做,就只允许一个字段两个字段来的去控制,所以也是有些无奈
LLaMA2
134 天前
@xianbing278 你说的不就是和我说的一样。

先打开才能后续选择 ABC 三者其一,通俗地说,即你的门禁是一个树形结构。

有没有存在一个目的地可以从 A 或 B 都可以进入

求证

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

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

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

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

© 2021 V2EX