编程初学者 - 设计Web应用程序的建议

时间:2009-08-23 13:57:06

标签: php mysql database-design

我为了好玩而做了一些HTML / CSS,但我正在寻找一些编程技巧。

我一直在阅读PHP和MySQL。到目前为止,我还没有发现它太难理解循环,条件语句等概念,但我想陷入困境并开始开发一个应用程序,然后才开始厌倦阅读并完全放弃。

我的想法......

我正好正在学习考试,并在纸上进行这些练习考试。我想为什么不把它放到应用程序中,这样我才能在计算机上参加考试。

特点:

  • 该应用可以举行多项考试
  • 它可以随机提问或按顺序显示
  • 可以选择显示每个问题的答案
  • 确定完成考试的时间
  • 管理页面,用于添加新的考试和问题/答案

好的,你们现在可以停止笑了,我知道这比Hello World高出一步,但我想我会在某个地方开始!

我会用PHP / MYSQL或者RoR来开发它,如果你们认为它对初学者更好。我想我可以正确地阅读/写入数据库,但我不太确定网站结构,数据库设计以及通常最好的方法。

如果我的考试由50个问题组成,每个考试都会给出一个ID。如果我删除一个问题,如何用新ID更新其余的?即如果我删除问题3,以下所有问题都需要将其ID转回1。

编辑:

我如何在数据库架构中表示一个考试的实例?考试和问题的关系将是一对多,因为问题将是单一考试的独特之处。但由于我的目标是进行多项考试,我该如何表达呢?


我如何在数据库架构中表示一个考试的实例?考试和问题的关系将是一对多,因为问题将是单一考试的独特之处。但由于我的目标是进行多项考试,我该如何表达呢?

5 个答案:

答案 0 :(得分:8)

好的,首先,欢迎:) 其次:你的想法根本不是一个愚蠢的想法,事实上,你已经选择了学习如何编程的最佳方式:做一些有用和有趣的事情。

要回答您的问题:为什么您需要连续的问题ID?在数据库方面,您只需要每行具有不同的ID。

如果是显示要求,为什么不在显示期间为循环分配数字?因此,例如,当您执行foreach显示问题时,您可以保留一个索引变量,该变量在每个循环中递增,并使用它来显示序数。

希望这就是你要找的,祝你好运!

答案 1 :(得分:2)

在我看来,你最重要的是数据库的结构。您将要阅读有关db-design和规范化的一些内容。基本上,您需要在逻辑上规划应用程序中存在的不同实体:

  1. 考试
  2. 考试员
  3. 问题
  4. 答案
  5. 其中一些将与彼此联系在一起:

    1. 问题 - >考试
    2. Takers - >考试
    3. 答案 - >问题
    4. 每当遇到这种情况时,您需要确定关系是一对一,一对多还是多对多。问题可能属于一个或多个考试。这取决于你决定。如果一个问题只属于一个考试,您可以在问题表中创建一个字段来保存ExamID。如果一个问题可以属于许多考试,你将创建一个包含两个字段的新表:QuestionID,ExamID。这构建了你的多对多关系。

      老实说,对于那些编程经验很少的人来说,这可能是一项非常庞大而艰巨的任务。在我看来,你应该从更简单的东西开始,比如留言簿或迷你博客。

      无论您决定构建什么样的应用程序,SO都会为您提供帮助。

答案 2 :(得分:2)

  

如果我的考试由50个问题组成,每个考试都会给出一个ID。如果我删除一个问题,如何用新ID更新其余的?即如果我删除问题3,以下所有问题都需要将其ID转回1。

主ID不应该改变。当您删除表中的一行时,相应的主ID就会消失,但不应重新编号其他行主键。

如果您决定使用Rails,请查看Ryan Bates优秀的截屏网站Railscasts

答案 3 :(得分:1)

特定的应用程序是学习编程的一种很好的方法,即使这些应用程序已经存在(而且它们确实存在 - 但我会避免查看这些应用程序,只需创建和学习!)。

您的一个规格是问题可以按任何顺序显示。另一个是他们可以被删除。因此,很明显,编号与问题没有直接关系 - 一旦问题集及其在测试中的顺序已经确定,就应该动态生成编号。您需要考虑这些要求,这些要求为组件的设计提供了基础。用户界面应与程序逻辑绝缘,程序逻辑应与问题数据库隔离。尝试以最原始的形式在这些部分之间传递信息。这样,当你想重新设计其中一个图层时,你就不必改变整个图层。

答案 4 :(得分:1)

我同意所有其他答案,实施有用的应用程序是学习Web开发的好方法。但是,正如Jonathan所说,这不是一个非常简单的应用程序,你打算建立。那就是说,这是我的想法:

Ruby on Rails是Ruby的框架。它也可以利用MySQL。 PHP是一种编程语言(ruby用于RoR),并且不提供框架。虽然PHP有很多,CodeIgniterZend FrameworkSymfonyCakePHP等等。 框架以灵活的方式实现应用程序的常用方面,因此它们可用于各种应用程序。其中一些方面可能是身份验证,数据库访问,缓存,模板呈现等等。

框架通常是为了加速应用程序开发而编写的,如果你选择php,你可能想尝试编写自己的框架,如果你的主要目标是学习。你仍然应该看看其他框架并试一试,看看它们是什么以及它们是如何工作的。

我建议您学习一些或两个框架的教程,并研究一些您不知道的内容(MVC,编码模式等)。我发现english wikipedia非常有帮助。

您的应用程序的另一部分将是数据库。一些框架提供了某种ORM,一旦您设置了架构,它将“屏蔽”您的数据库访问。我仍然建议您查看如何查询数据库,因为您可以知道框架从数据库中检索数据时的作用。

This似乎是一个很好的资源,用于介绍mysql-server,并包含一些指向sql-tutorials的链接(用于查询db-server)。我建议this tutorial如何创建数据库模式。

我希望其中一些资源对你有用,祝你好运。