数据库设计(触发器,游标,视图,函数)
环境准备:
Microsoft SQL Server Management Studio 18 2012以上;
一、触发器
是一个特殊的存储过程,是由数据库自己在某种场景下触发的;自然是去执行一些业务逻辑;
A.事发前----Insert,插入一条数据之前,可以指定一个知性逻辑
B.事发之后—Update,触发点什么动作;user 表冗余公司表的公司名称,公司名称修改后,需要在使用了公司名称的表中去更新数据;就可以使用触发器;
建议:建议大家少用,一定要注意嵌套式触发器
坑:系统性能,容易造成死循环;
二、游标
游标是从一个数据结果集中获取某一个数据;比较冷门;
在工作使用过的刷个1–(看文档)—基本上没用过
三、视图
在系统中,可以说是必备的;专用用来做查询操作;
一个虚拟的表,由一条复杂的Sql语句来完成的;----主要是一个种补救措施;
缺陷:性能没有保障;
四、函数
更多的是使用的系统函数;
建议—建议大家最多就是去使用系统函数;也可以自定义函数,字段在使用函数以后,不会索引;----函数毁索引
五、字段类型
表和表之间同一字段----一定要定义为同一个类型;如果同一字段类型不一致,语句查询会报错,肯定需要来函数处理----会影响性能—不走索引;
六、字段可空
数值类型的 不要可空;
in查询 not in查询 会没有结果,,一般给个默认值
也有特殊场景:可以为空;创建时间
默认值:创建时间----当前时间,存金额(不要设置默认值)
七、统计字段
完全是为了我们程序开发者便捷而存在的,数据不丢失;
创建时间、创建人、最后更新时间、最后更新人、state、isEnable
假删除/软删除–state----如果要删除,不是直接把数据给干掉了,没有delete语句,只是把数据状态修改,表示当前数据不可用了,当前数据不丢失;
软删除后,查询的时候,需要增加判断条件;
设计:
权限=通过角色配置的权限+临时权限
求并集—视图
展示界面的时候没有的权限是不能展示出来,在操作的时候需要拦截验证权限;----业务操作不能完全信赖客户端;
如果表太多,需要确定权限------必然会影响性能;
如何解决呢?
1.缓存(程序缓存)----推荐----关联查询只查询一次;查询之后就缓存起来;后续就直接到缓存中去取;如果权限重新配置了,记得刷新缓存;
2.还可以把设置到的权限数据保存到一个表(还是缓存)中去(保存到用户中的某一个字段中)
多级菜单:
怎么保存?ParentId(父级Id),当前按钮信息保存一个父级Id,如果要获取菜单,就可以通过最高级,获取到最后一集;
多级code拼接、层级都是违背了范式,但是这里的情况,我比较推崇大家这样做;