将逻辑放在SQLprocedures / functions(而不是PHP / Perl)中是否可以接受?

时间:2014-07-27 10:04:06

标签: php mysql sql database-design

我正在做一个与大学相关的数据库项目,其中我被要求设计一个数据库(规范显式要求我至少引入一些SQL其中的程序和触发器)并在其上面粘贴一个小的Web界面。

如果重要的话,我正在模拟汽车租赁,我正在使用MySQL和PHP。

非常重要的是要注意项目的重点绝对是数据库。 这是一个数据库项目,期间。

现在,我想知道:我应该在SQL过程/函数中放置尽可能多的逻辑吗? 因为它是一个非常多的数据库项目,并且由于要求我已经在其中添加了一些逻辑,我的答案往往是“是”,也因为它对非常有用解耦(非常低调地说,如果有人决定写一个桌面或Android前端,那么在客户端应用程序之间有不同行为的机会就会少得多,所以这对我来说听起来不错)。

但是我抱怨的是,我从未见过有人做过IRL ,我总是看到人们用C / PHP编写逻辑,所以我想知道:正在使用SQL业务逻辑程序可以接受? 这是好的做法吗?

作为一个例子:我是否应该有一个名为RENT_OUT_CAR的SQL程序或一个名为rentOutCar(...)的PHP函数,用于租用汽车,也就是将其状态标记为“租用”,添加一个时间戳,删除它与停放的车库的关联,等等? 或者考虑COMPUTE_TOTAL_COST与computeTotalCost(),它计算向客户收取的最终价格。

谢谢大家!

P.S。:显然不允许使用ORM和花哨的东西,我 坚持普通PHP。

P.P.S。:这个问题看起来很可疑,但我认为我的操作条件非常不同:Pros and cons of putting logic in SQL?

3 个答案:

答案 0 :(得分:2)

  

但是,抱着我的是,我从来没有见过有人在做IRL,   我总是看到人们用C / PHP编写逻辑,所以我想:是   使用SQL程序可以接受业务逻辑吗?好吗   练?

任何适用于所有客户的东西,无论语言如何,都是数据库的前景。 所有客户端包括dbms附带的命令行和GUI界面。

我工作的最后一个财富100强数据库有数百个以至少二十几种语言编写的应用程序。我认为最古老的应用程序是在20世纪70年代首次投入生产。

答案 1 :(得分:0)

经常这样:是的,将逻辑放入数据库!但是不要滥用它; - )

喜欢MVC;如果你想要(它不是必须的话)并且你的ORM(或者没有使用过的ORM)允许的话,所有到“M”的bekongs都可以放入数据库。

ORMs - 我会说工具周围 - 通常'不喜欢数据库中的东西'就像程序一样,因为它们无法处理它。存储过程及其朋友是强大的工具,尤其是如果控制器和模型(即数据库)位于不同服务器之间的长距离之间。然后,当你有单一选择时,RTT可以得到一个真正的问题,以获得计算。

答案 2 :(得分:0)

如果您给出的项目是“数据库项目”,那么拥有数据库中的所有逻辑是可以接受的。正如评论中所述,MySQL支持存储的例程(函数,过程,触发器),您可以将逻辑放在那里。

至于你的问题是否应该有一个“名为RENT_OUT_CAR的SQL程序或称为rentOutCar(...)的PHP函数” - 你应该同时拥有它们。 PHP函数应该只进行查询以使用所需的参数(如果有的话)调用存储过程/函数并返回它的结果。这样,项目可以轻松迁移到可以使用数据库的另一种语言。即如果你需要在Perl / Java / etc中重写项目,你只需要重写调用存储例程并显示结果的函数。

此外,可以从另一个源(您的PHP项目用另一种语言或完全不同的语言重写)访问数据库,保留所有业务逻辑。