今天在项目的代码中发现了一个语句:
BEGIN PROC_CREATE_USERRECORD(:userid, :menu, :detail, :login_ip); END;
ORACLE数据库,之前没有接触过,看到这段代码之后感觉不明觉厉,问了下同事,原来是存储过程,所以查了查存储过程。
啥是存储过程
谷歌说,数据库的存储过程,本质上是一个可编程的函数,他在数据库中创建并保存。
普通的SQL语句是先编译再执行的,而存储过程是数据库编译好之后储存在数据库中的,所以会比一些SQL语句执行效率更快。
然后在@刘水镜 的BLOG中看到了触发器的概念,然后就稍微地了解了下触发器。
触发器是什么鬼
blog里说,触发器是一种特殊的存储过程,它的执行不由程序调用或者手动操作,而是由事件触发的。
事件比如说别的语言的onclick,onmouseover,比如说sql的insert,select。
查到了这些之后我产生了疑问,作为一个初级的PHPer,我通常都是尽量把所有的操作和逻辑都写在PHP程序里,现在看到DB中还有这些操作,我就不明白了,到底什么操作应该写在程序里,什么样的操作应该写在数据库里呢?
然后万能的SF告诉了我答案。
业务逻辑写在数据库还是自身应用程序?
看了这篇问答的所有回答,总结下感觉还是应该 简单的放在数据库,复杂的放在程序里。
数据库的存储过程、触发器、函数等功能为我们提供了便利,但是不可否认的是它也着实存在着很多的弊端,比如不易于调试、维护和优化。所以在实际开发过程中,应该尽量只把对数据简单或一成不变的约束(或者约定俗称的约束)放在数据库中,而把对状态(对数据的抽象)的操作放在应用程序中。这样可以在保证数据合理性的前提下,规避数据库操作的缺点,真正提高性能和可维护性。