PHP / MySQL:基于创建大型网站数据库的正确方法

时间:2009-04-23 17:51:45

标签: php mysql database-design data-structures mysqli

我正在创建一个电影网站,IMDB.com就像..我真的很喜欢PHP和编程,但我当然有一些书和StackOverflow:)

我已经做了很多工作,但现在我每页有超过600行代码(仅限PHO)和20多个数据库表,仅用于存储和确定电影数据(多对多关系)

大多数代码都是用于插入/获取数据和循环的MySQLi查询(预处理语句)。没什么好看的,只是基本的PHP / MySQL。

我有一些问题:

  • 建议为每个SQL查询使用MySQLi预处理语句,或者更好的方法是将旧MySQL用于内部PHP /数据库查询,并仅为用户输入保留预准备语句?

  • 要获取所有电影数据并显示它,我需要从超过16个不同的表中获取数据。我每个表使用一个MySQL查询(更多一些)和许多循环。这是网站需要工作的正确方法吗?我的意思是......这是正常的???

  • 如何简化代码以简化阅读?我可以将所有这些查询分配给外部文件吗?我可以创建函数来处理每个表查询吗?

希望你能帮助我,也许你还有一些关于正确建立这样一个网站的建议。

谢谢!

5 个答案:

答案 0 :(得分:3)

正如上面提到的那样,我也会指出你使用一个抨击MVC设计模式的框架。除此之外,大多数框架都内置了ORM,但如果不是,您可以查看Symphony或EZPDO是另一个很好的ORM,可以与(M)VC中的模型绑定。

CodeIgniter是一个非常快速且轻量级的MVC框架,它允许您快速引导,但您可能还想查看ZF(ZendFramework)。 ZF有一个很棒的框架功能集,整体上非常灵活。

除此之外,请务必将您的读取和写入分别用于或者模型或您对所选ORM的调用。这将允许您将数据从属于多个MySQL Box以获得更高的性能,但允许您使用一个数据库引擎开始。

添加使用Memcached的功能,以便您可以缓存数据/对象而不是访问数据库。

使用缓存时,请考虑如何使数据库更新的缓存失效。换句话说,如果从数据库中选择要在视图中显示的数据并且数据没有更改,则不需要每次都访问数据库,而是从内存中提取数据。一旦数据实际发生了变化,您就会想要使该缓存无效,因此它不会过时,然后重新缓存新数据。

memcached:http://www.danga.com/memcached/'

-facebook也有一个版本

CodeIgniter - http://codeigniter.com/

EZPDO - http://www.ezpdo.net/blog/?p=2

ZendFramework - http://framework.zend.com/

答案 1 :(得分:1)

考虑为您的网站查看或使用网络框架。

的symfony CakePHP的 笨

是一些更主流的。如果有的话,向他们学习。

答案 2 :(得分:1)

  1. 准备好的语句适用于您自己的内部查询。对于所有查询,您都将采用强化方法。

  2. 这取决于你所展示的内容。但我会说你通常可以使用连接从更多的表中获取所需的数据。你得到的数据要少得多,以获得正确的数据,听起来你的所有数据都以某种方式连接到你正在展示的那部电影上。

  3. 正如Peter D评论的那样,我建议使用Web框架来学习如何从视图中分离出数据库处理。你现在使用的是面向对象的方法吗?看看其中一些框架实现的MVC模式,这将使你顺利。

答案 3 :(得分:1)

像Peter D之前提到的那样,将这一个添加到要使用的框架列表中。 Zend框架http://framework.zend.com 开源和免费。

  
      
  1. 建议使用MySQLi ...
  2.   

绝对是MySQLi,但这本身就是一个很大的问题,如果你开始编码,你需要掌握T-SQL的基本知识来理解差异。

  
      
  1. 获取所有电影数据......
  2.   

这取决于很多事情。数据库的大小。想要的结果,即需要显示的信息,查询的响应时间与在用户视图中显示的响应时间。你知道JOIN,UNION吗?

  
      
  1. 如何将代码简化为......
  2.   

对所有这些问题都是肯定的。 www.w3schools.com/php/如果它可以提供任何帮助并学习MVC模式。这些天对很多编程语言很有用。也许一个框架可以帮助你

答案 4 :(得分:1)

对此问题:

  

“获取所有电影数据并显示它   我需要从以上获取数据   16个不同的表。我使用一个MySQL   查询每个表(更多一些)和   很多循环。这是正确的方法   一个网站需要工作?我的意思是..这个   是正常的???“

否。如果我理解正确,您应该使用某种类型的JOIN,具体取决于您从数据库中检索的数据。获取大量数据的结果,然后仅选择您想要的PHP部分比让数据库完成排序/检索您想要显示的记录/信息的工作要慢得多。

我强烈推荐一本有点过时但非常容易理解的书,一般涵盖PHP和MySQL /数据库:http://www.dmcinsights.com/phpmysql2/ - 它涵盖了很多“实践”技术以及代码,所以它是很高兴学习。

显然有第三版有更新的信息,但我没有看过它。