首页 新闻 会员 周边

同一张表字段之间相互影响,如何设计

0
[待解决问题]

比如有三个字段,ABC。A为1时,BC为必填项,A为2时,BC为非必填项。

这个需求,数据库方面,还有Controller层校验,我应该怎么写比较好呢?

或者说更广一些,就是字段之间有相互影响的关系,对于入参校验和数据库表设计,应该怎么办?

闪客sun的主页 闪客sun | 菜鸟二级 | 园豆:202
提问于:2018-07-03 11:38
< >
分享
所有回答(5)
0

一般数据不作校验,在程序中校验:在录入的时候前端JS校验一遍,然后后端代码中再校验一遍。

雨之秋水 | 园豆:649 (小虾三级) | 2018-07-03 11:42
0

首先,不是任何一层都需要做数据校验。在关键的点做数据校验是一个因素,在入口处尽早做数据校验也是一个因素。

就你的需求简单来看,是数据关联性问题,越前置这个校验,开销越小。如果在前端页面就做了检查,后面的Controller层直接不校验也是可以的,Model层数据库入库时,不校验也是可以的。如果为了前后端分离,前端做一次校验,controller再做一次校验的设计,也算是正常可以接受的。

所以,这个根本不是一个数据库表设计的问题,如果在数据库上做关联校验,反而是非常糟糕的做法,其一是它是最后一层,如果出错,要向上抛错误信息,穿透整个多层系统到前端,这太可怕了。现行设计中,很多人已经放弃了数据库外键等校验方法,因为灵活性和未来的维护性会有问题。

rinson | 园豆:293 (菜鸟二级) | 2018-07-03 14:16
1

楼上说的基本正确。

1、数据库不做处理。

2、前端页面数据验证。

3、Controller 必须再次验证数据有效性,因为前端是可以被篡改的。

爱编程的大叔 | 园豆:30839 (高人七级) | 2018-07-03 15:53
0

数据库设计:A 非空,BC 允许空或非空+默认值,一般数据库不做逻辑处理; 前端:用JS根据A的值校验BC; Controller:根据A的值校验BC(这里需要再校验一次)

大豆男生 | 园豆:608 (小虾三级) | 2018-07-04 15:09
0

上面说的很对哦,你用外键维护起来十分的麻烦,还是在前端和controller进行校验

流年煮雪 | 园豆:219 (菜鸟二级) | 2018-07-06 10:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册