sql是个声明式的语言,有分为DCL,DML,编程控制,权限控制等。
应用开发中很少会用到权限控制,只是在定位时可能需要对应的权限进入数据库查看内容。
编程控制现在基本也不会用,包括触发器,存储过程,简单编程等都不会用,主要就是为了防护数据库变更,国内去IOA,Oracle的特殊用法肯定很难迁移到Mysql,华为被禁用美国产软件,现在只能用Guass,细节肯定有差异。
DCL,可能是记错了,就是数据控制语句,包括操作表,视图等,视图分为逻辑试图与物理视图,物理视图是需要存盘的。视图我基本也不用,但开发过程中遇到过逻辑视图,天天想重构掉,遇到过删除了原表内容,但是视图内容无法删除的场景,不利于调试。操作表,一般会在系统初始化或者升级过程中使用,这种语句一般要验证正确才能使用。
DML,数据操作语句,这个是惯常使用的,hibernate通常读取的是完整的row,这在使用索引列数据的场景性能是有影响的。索引中除了主键,如果业务只用到索引内容,可以减少IO次数,加快速度。外键禁止使用,我是没搞明白,有点矫枉过正的意味。连接,目前有使用,但是太过于复杂,微服务重构是如果需要拆分,则需要首先解决掉这些join。过于复杂,大部分可以通过业务解决,二是join不见得快,所以我也是不建议使用的。union,上次遇到一个union的数据不能是blob,简直要命了,这可能是部分数据库功能支持问题,但也是巨坑无比。
考sql一般是要考优化的,现在大部分是将逻辑上移到业务,简单的sql优化意义不大,数据库sql引擎专门有优化的一步。
ER图可以作为设计的一种补充,倒不仅仅限制在数据库设计,考虑领域驱动设计,核心业务模型,可以用ER图来描述模型关系,虽未试过,但看到ER图,第一想法就是可以关联,看以后实践效果。
网友评论