我有一个使用MySQL后端的PHP应用程序。这是一个内部应用程序,只有大约一百个用户 - 我们每秒都没有收到数千个请求或类似的东西。
目前在我们的数据库中,我创建了所谓的“主”视图。这些视图连接所有查找表并执行任何基于行的计算。例如,在表中我们将存储引用member_id
表的members
。在视图中,我将从members
表中提取所有列。我为所有查找表执行此操作。对于基于行的计算,这些通常是简单的计算,例如两个日期之间的天数差异。我有这些主视图,因为它使编写查询(尤其是报表)变得非常简单,因为我的所有连接都已经完成,并且已经进行了任何简单的计算。
我的问题是 - 这是最好的方法吗?例如,我不是在视图中执行所有这些计算,而是将这些计算移到我的班级。所以,在上面的例子中,我不是在视图中有一个列来计算两个日期之间的差异(flock_age
),而是在我的类中编写一个方法来执行这个计算:
<?php
class FlockEx extends Flock
{
public function getFlockAge()
{
$date1 = new \DateTime($this->getDatePlaced());
$date2 = new \DateTime($this->getDatePickedUp());
$difference = $date1->diff($date2);
return $difference->days;
}
}
而不是加入所有这些查找表,我只是创建这些类的新实例:
<?php
$flockdb = new FlockDB();
$flock = $flockdb->getFlockById(4);
$memberdb = new MemberDB();
$member = $memberdb->getMemberById($flock->getMemberId());
...
有“最好”的方法吗?或者最简单的方法是什么?
答案 0 :(得分:2)
应使用数据库来利用加入和聚合。这是它擅长的地方。 影响连接或的计算需要连接/聚合作为计算的工件通常应在数据库本身中完成。
对于低延迟/负载/基数操作,或者当相同的基本数据集基数/大小相似时,它通常只是不重要。
在这种情况下,date-diff(同一记录中两个字段之间的数学运算)可以在客户端上完成;但如果连接依赖于它,则可能不一致。
答案 1 :(得分:0)
我在数据库中尽可能多地报告。我是一个巨大的OOP支持者,但是通过数百或数千个数据库调用和对象创建只是为了获得与单个SUM()sql调用提供的数字相同的数字,这简直是愚蠢的。
另外:您的问题可能会因为您要求提出意见而被关闭。不要亲自接受。
答案 2 :(得分:0)
始终在DB端自己进行数据库计算。它也将为您带来巨大的性能提升。
了解一些数据库概念,例如PROCEDURE
&amp; FUNCTION