【问题标题】:Programming beginner- advice with designing a web app编程初学者 - 关于设计 Web 应用程序的建议
【发布时间】:2009-08-23 13:57:05
【问题描述】:

我会为了好玩而编写一些 HTML/CSS,但我正在学习一些编程技能。

我一直在阅读 PHP 和 MySQL。到目前为止,我还没有发现很难理解循环、条件语句等概念,但我想在读得太无聊和完全放弃之前陷入困境并开始开发应用程序。

我的想法...

我现在正好在准备考试,并且这些练习考试都在纸上。我想为什么不把它放到一个应用程序中,这样我就可以在电脑上参加考试了。

特点:

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

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

如果你们认为它更适合初学者,我将在 PHP/MYSQL 或 RoR 中开发它。我想我可以读/写数据库,但我不太确定站点结构、数据库设计以及通常最好的方法。

如果我的考试由 50 个问题组成,每个问题都有一个 ID。如果我删除一个问题,如何使用新 ID 更新其余问题? IE。如果我删除第 3 题,后面的所有题都需要将他们的 ID 移回 1。

编辑:

如何在我的数据库架构中表示一项考试的实例?考试和问题的关系将是一对多的,因为问题对于单个考试来说是唯一的。但既然我的目标是进行多次考试,我该如何表示呢?


如何在我的数据库架构中表示一项考试的实例?考试和问题的关系将是一对多的,因为问题对于单个考试来说是唯一的。但既然我的目标是进行多次考试,我该如何表示呢?

【问题讨论】:

  • 你确定这不仅仅是避免修改的一种方式吗?)
  • 破产了!复习太麻烦了吧? :D
  • 老实说,我认为当您将所有问题插入数据库、重新设计应用程序、删除表格、重新设计数据库时,重新插入数据(并重复至少四次) ) 你可能和其他人一样修改过 =)

标签: php mysql database-design


【解决方案1】:

好的,首先,欢迎 :) 其次:你的想法一点也不傻,事实上,你选择了学习编程的最佳方式:做一些有用且有趣的事情。

回答您的问题:为什么您需要连续的 ID 来回答问题?就数据库而言,您只需要每行有不同的 ID。

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

希望这是您正在寻找的,祝您好运!

【讨论】:

  • 哦,是的!那讲得通。我将在循环遍历它们时生成 ID。我想我需要先有头脑才能编程:p 我想这与 Rich 在下面所说的永不删除主 ID 的内容有关。
  • @Jon,而不是确切地,您应该在循环遍历它们时生成问题编号,但是一旦在 Db 中分配 ID,就应该单独留下它们,如Rich Apodaca 在他的回答中指出。
  • 我认为部分混淆可能是“ID”的含义:(i)在数据库中,每个问题的主键应该永远改变; (ii) 在用户界面中,向用户显示的问题编号应该是动态生成的,正如我在回答中所建议的那样。
【解决方案2】:

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

  1. 考试
  2. 应试者
  3. 问题
  4. 答案

其中一些将相互关联:

  1. 问题 -> 考试
  2. 考生 -> 考试
  3. 答案 -> 问题

每当您遇到这种情况时,您都需要确定关系是一对一、一对多还是多对多。问题可能属于一项考试,也可能属于许多考试。这由你决定。如果一个问题只属于一个考试,您可以在问题表中创建一个字段来保存一个 ExamID。如果一个问题可以属于许多考试,您将创建一个包含两个字段的新表:QuestionID、ExamID。这会建立您的多对多关系。

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

无论您决定构建什么应用程序,SO 始终为您服务。

【讨论】:

    【解决方案3】:

    如果我的考试由 50 个问题组成,每个问题都有一个 ID。如果我删除一个问题,如何使用新 ID 更新其余问题? IE。如果我删除第 3 题,后面的所有题都需要将他们的 ID 移回 1。

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 顺便说一句,您可能希望允许在您的问题和答案中存储和显示 HTML 等标记语言,并使用 CSS 或类似语言,以便您可以格式化文本!
      【解决方案5】:

      我同意所有其他答案,实现一个有用的应用程序是学习 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 关于如何创建数据库架构。

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

      【讨论】:

      • 感谢您的信息。我想我会坚持这个项目并从 DB Schema 开始。您链接的关于规范化的教程看起来非常有用。
      猜你喜欢
      • 1970-01-01
      • 2018-01-04
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多