java - 数据库表结构设计

查看:486
本文介绍了java - 数据库表结构设计的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

业务需求描述如下:

如上图所示,定义了一组规则,有区域规则,城市规则,机房规则,数量规则,比例规则,类型规则。设置规则的时候,可以将上述规则进行组合,生成一条规则集(由上述规则并集得到)。那么这样可以编辑好多规则集,形成一个list列表。如下图所示:

那么我们定义的规则集就可以生成一组的规则集列表,当生成一个订单,用户可以填写一些规则,那么服务端根据传过来的规则,匹配规则列表中的规则,选择出一堆否和条件的规则,然后按照优先考虑不同快递公司,优先某几种规则,来进行匹配相应的规则,进行物流配送。

请问这个相关的表结构该如何设计?

PS:我的表结构设计是这样的:
条件表 规则表
1.条件表中,存放单独的规则条件,他们可以组合成一条规则集。
2.规则表中,存放组合好的规则。

当web端,选了相应的规则之后,我先将前端的规则进行拆分,从条件表中分别进行匹配,然后匹配得到各种集合,然后用SQL中的in语句,拿得到的这些集合去规则表中去匹配。

第一个问题:
总觉得这样设计效率不高?有没有更好的方案呢???

PS:在表结构设计中,类似这种问题叫作:java 规则引擎设计。运用场景还是蛮广泛的,比如,好多电商都有风控的场景,就是一些规则来判定他的一个订单是不是刷单,它会有很多规则,那么根据一条订单的特征,生成一组规则组合,然后用订单规则匹配规则组合,算出当前的订单有多大概率是刷单的,如果刷单概率太大,就到人工审批环节,人工确认刷单后,对相应的商家要进行封号处理。

所以,第二个问题:
特别好奇一些电商或者O2O平台的,风控规则是如何设计和实现的呢?

===============================================================================
后期的发展是这样的,需求方做了让步,不想让80%的工作量带来10%的价值,所以修改了规则匹配算法,只做最精确匹配,匹配失败就不匹配了。

解决方案

感谢邀请。@菩提旭光
对于问题1,说说我粗鄙的一些看法,我觉得你的设计是没有问题的。
表1:规则表
表2:规则集表
表2每一条记录时表1里的规则任意组合而成
假设表2中有一天记录是规则1和规则4组成,那么我们可不可以在表2中既存表1的规则描述又存表1的id呢,形如
规则ID 规则描述
1 数量>100
2 数量>10
3 本地
4 异地
规则集ID 规则集描述 规则ID连接
1 数量>100 异地 14
2 数量>10 本地 23
当然前提是表2中规则ID连接一定要从小往大旁,这样我们在查询的时候不要用like或者in了,直接用=,效率会更高吧。当然这个也是有一定弊端的,当规则改变之后,规则ID连接也需要跟着变动了

不知道我理解有没有问题。

这篇关于java - 数据库表结构设计的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆