2012-07-20 168 views
1

我一直在构建一个Web应用程序已有一年多了。这是我学习PHP和MYSQL时开始构建的第一件事情。它已经从一个非常简单的预编码应用程序编码成原始PHP,直到我每天在Codeigniter上运行的完整个人理财跟踪器。同时我还构建了其他几个小型网络应用程序,结果我比我第一次开始这个项目时经历了1年的经验,我认为我的开发开始受到基本设计的影响我在第1天做出的决定。规划和设计Web应用程序结构和逻辑

虽然代码已被重写为与codeigniter一起使用,但数据库结构仍然相同,我觉得我必须编写比需要的代码更多的代码才能解决我的数据库模式问题。

我的问题是:

  1. 是否有学习如何有效地设计数据库的任何好的资源?书籍,课程等
  2. 当我开始这个项目时,我非常“按照我编码设计”,但我觉得也许更合理的方法是在功能级别设计所有东西,以便您可以看到流程和逻辑在写一行代码之前。这种发展有没有一个特殊的名称,还是仅仅是标准的做法? (我没有正式的网络开发培训,所以我觉得我可能只是陷入了每个人都已经知道的东西)
  3. 我应该设计自己的逻辑和功能,然后设计我的数据库,还是从数据库开始,然后是逻辑和功能?

回答

2

1)有没有什么好的资源来学习如何有效地设计数据库?

了解实体关系建模。 ERwin Methods Guide是一个好的开始。

但在现实世界中,数据库不仅仅存储数据 - 它们与客户端应用程序进行交互,性能需要很好。 Use The Index Like!是关于这个话题的很好的介绍。

2)...

理想情况下,你有一组固定的需求,然后设计基于他们的模型,然后写一个基于模型中的代码。不幸的是,不断变化的需求是生活中的事实,而这个“瀑布模型”在面临不断变化的需求时是脆弱的。

在频谱的另一端是“敏捷”软件开发,强调变化。

事实是,有no sliver bullet和最佳状态通常介于两者之间。

3)我应该设计我的逻辑和功能,然后我的数据库或从数据库开始,然后逻辑和功能?

数据往往比代码寿命更长。所以我专注于首先获取数据模型。如果您必须在清洁数据和清洁代码之间做出决定,请选择清洁数据。

这就是说,尽量让你的数据模型“可演化”。不要走极端,比如实施EAV那里不是真正需要的东西,而是通过规范化来避免冗余,picking natural vs. surrogate keys sensibly,而不是人为地限制物品的数量等。

+0

感谢这样一个深度答案,真的很有用。在接受其他人的参与之前,我会再开放一段时间。 – SimonBarker 2012-07-24 15:55:21