|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在ORDERBY操作中,MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。(虽然如此,在涉及多个数据表查询里,即使有索引可用,那些索引在加快ORDERBY方面也没什么作用)。有一个陈旧的争辩,是关于在那里存储使用程序营业逻辑的:是在使用程序自己的营业逻辑层中仍是在数据库层中。使用程序逻辑层的相对撑持者提出,数据库的独一目标就是保留数据,以备使用程序所用。倡始用数据库来存储营业划定规矩的人则保持以为,营业划定规矩最好存储在数据库中,由于数据也存储在那边,划定规矩在那边更简单运转。而在我看来,关于存储使用程序的逻辑来讲,没有一个“最好的中央”——它真正取决于您正在办理的营业成绩。
链接数据库存储历程
假如您更喜好将全体或一部分营业逻辑存储在数据库中的话,那末晓得SQLServer中的一种被我称功课务划定规矩链接的手艺是很有优点的。基础头脑就是您能够在数据库中运转一系列的存储历程,这是以在您必要的时分,分歧历程的元数据存储在一个数据库表格中为基本的。如许做的优点就是,划定规矩都存储在数据库的程序中,而且由于存储历程的运转是以一个表格中的值为基本的,以是您能够改动程序实行的按次,还可以很简单地翻开或停止营业划定规矩。让我们来看一个例子,如许观点会更明晰。
营业划定规矩链接实例
要用我想用的体例在数据库中实行营业划定规矩,就必需界说元数据。上面这些信息将会以数据库表格的情势被保留:存储历程的称号、营业划定规矩运转的按次、所运转营业程序的范例和营业划定规矩是不是举动等。列表A中包含了创立表格的剧本。
在列表B中,我在BusinessLogic表中加载了数据。这些数据是稍后我将用来处置营业划定规矩的。RunSequence是实行存储历程的实践按次(历程被存储在LogicProcedure字段中)。表格中还包括了一个唆使符,用来暗示营业划定规矩是不是为举动的。存储这个数据让我可以改动划定规矩运转的按次,大概在必要的时分翻开或停止划定规矩,而无需对代码做出变动。要向营业逻辑体系中增加划定规矩也非常复杂,由于所需做的就是向数据库中增加程序,然后在元数据表格中增加必要的数据就能够了。
在列表C中,我创立了营业划定规矩程序(例子中包括的程序长短常复杂的;可是,在实际情形中,假如必要的话,它们能够很庞大)。一切的程序中包含了不异的输出参数;这是营业划定规矩链接的一个小小的范围性。
接上去就是处置营业划定规矩的代码了。在列表D中,我用一个指针在表格中迭代,该表格中的纪录都保留着元数据。当能够用一种分歧的轮回布局来完成统一个逻辑时,用指针要复杂一些。不论是怎样完成的,都必要用某品种型的迭代轮回和实行所必要的营业程序。运转这个代码将实行每个文章后面所界说的四个存储历程。
在列表D中,有两个次要惹人注重的中央。第一个就是用来从表格中检索纪录的select语句,所检索的纪录中包括了处置营业划定规矩的信息。从这个复杂的查询中,我能够为任何范例的营业处置从BusinessLogic表中前往行。我还能包管划定规矩是举动的,而且依照它们必要实行的按次前往。
第二个就是实行营业划定规矩的体例。当指针迭代时,它从BusinessLogic表中检索将要被实行的存储历程的称号,然后将其贮存在一个逻辑变量中。EXECUTE命令同意用户实行存储历程,即便该存储历程的称号被贮存在一个变量中。在这类体例下,挪用存储历程还使得我可以向存储过程当中输出所需的参数。
这使我回到了先前关于营业程序具有不异数目的输出参数这一点。我可以以一种相称静态的体例运转营业程序,这取决于在程序运转时BusinessLogic表中贮存了甚么。可是,如今我还没有一种办法能够静态地向营业程序输出参数。
一种复杂的办理举措就是包管一切的营业程序承受不异数目的参数,不论用不必它们。这类手艺包管我们一直为营业程序供应所需的参数。也有其他的办法能够完成这些所需参数的输出,可是那些不是这篇文章所要会商的。
简明重述
假如您的使用程序在数据库中贮存它的任何一个或全体营业逻辑,那末有大概它就是被我称功课务划定规矩链接的一个候选者。这类办法同意存储历程在数据库中顺次运转,而且让您可以在必要的时分翻开或停止这些营业划定规矩。利用这类办法的一些潜伏缺点包含数据平安(实行营业程序的数据贮存在一个表格中),和向营业逻辑程序输出参数的非静态性。假如您以为关于您的营业成绩来讲,这类办法利年夜于弊的话,我勉励您实验一下这类办法。
TimChapman是肯塔基州路易维尔市一家银行的SQLServer数据库办理员,他有凌驾7年的行业履历。他还经由过程了微软SQLServer2000和SQLServer2005的认证。
对于update操作,event中依次记录旧行,新行的值。 |
|