6

我从来没有在 php 中创建过购物车或论坛。除了查看和分析其他人的项目或查看显示如何制作这样一个项目或如何成为这样一个项目的教程。一个人怎么会知道如何设计数据库结构来创建这样的东西?我猜测它可能是通过反复试验......

4

3 回答 3

17

您应该阅读并理解规范化的基础知识。对于大多数项目,规范化为第三范式就可以了。在某些情况下,您需要或多或少的规范化,但理解其背后的概念将使您能够思考您的数据库是如何以规范化格式构建的。

这是规范化表的一个非常基本的示例:

students
  student_id
  student_name
  student_class
  student_grade

一个包含各种数据的非常标准的表格,但我们可以立即看到一些问题。我们可以看到一个学生的名字取决于他的ID,然而,一个学生可能参与多个班级,每个班级可能会有不同的年级。然后我们可以这样考虑表格:

students
  student_id
  student_name

class
  class_id
  class_name

这还不错,现在我们可以看到我们有不同的学生,有不同的班级,但我们没有捕捉到学生的成绩。

grades
  student_id
  class_id
  grade

现在我们有了第三张表,它可以让我们了解特定学生、特定班级以及与该班级相关的成绩之间的关系。从我们的第一个初始表开始,我们现在在规范化数据库中有 3 个表(假设我们不需要进一步规范化成绩,例如 :))

我们可以从这个非常基本的例子中收集到一些东西:

  • 我们的数据都与某种键相关联(student_id、class_id 和 student_id + class_id)。这些是每个表中的唯一标识符。
  • 通过我们的键控关系,我们能够将信息相互关联(学生#4096 注册了多少个班级?)
  • 我们可以看到我们的表现在不会包含重复的数据(想想我们的第一个表,其中 student_class 对于许多学生来说可能是相同的值。如果我们必须更改班级名称,我们就必须更新所有记录。在我们的标准化格式,我们可以只更新 class_id 的 class_name)
于 2008-10-14T07:33:18.613 回答
3

您可以了解的有关数据库设计的主要技术称为数据库规范化

数据库规范化有其局限性,尤其是在您有很多事务的情况下。在某些时候,您可能会被迫去规范化

但是恕我直言,从规范化的数据库设计开始总是更好。

于 2008-10-14T07:39:04.717 回答
1

我还建议使用可视化编辑器来创建数据库模式。我最近一直在使用:http ://dev.mysql.com/workbench/

创建数据库设计后,请有更多经验的人查看并给您反馈。但是要知道,尽可能多地花在设计上的时间,你最终将不得不进行实施,并且会发现你遗漏了一些东西,或者可以用另一种方式做得更好。

所以,设计,获得反馈,但不要害怕改变。

于 2008-10-16T21:11:33.093 回答