在创建高级php应用程序时,您如何知道如何设计mysql数据库?

在创建高级php应用程序时,您如何知道如何设计mysql数据库?,php,mysql,database,structure,Php,Mysql,Database,Structure,我从未用php创建过购物车或论坛。除了查看和分析另一个人的项目或查看显示如何制作此类项目或如何成为此类项目的教程之外。一个人如何知道如何设计数据库结构来创建这样的东西?我猜它可能是通过反复试验来实现的…你应该仔细阅读并理解它的基本原理。对于大多数项目来说,规范化为第三范式就可以了。当您需要或多或少的规范化时,总会有一些特定的场景,但了解其背后的概念将允许您思考数据库是如何以规范化格式进行结构的 下面是一个规范化表的基本示例: students student_id student_nam

我从未用php创建过购物车或论坛。除了查看和分析另一个人的项目或查看显示如何制作此类项目或如何成为此类项目的教程之外。一个人如何知道如何设计数据库结构来创建这样的东西?我猜它可能是通过反复试验来实现的…

你应该仔细阅读并理解它的基本原理。对于大多数项目来说,规范化为第三范式就可以了。当您需要或多或少的规范化时,总会有一些特定的场景,但了解其背后的概念将允许您思考数据库是如何以规范化格式进行结构的

下面是一个规范化表的基本示例:

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个表(假设为了示例,我们不需要进一步规范化等级:)

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

  • 我们的数据都绑定到某种类型的键(学生id、班级id和学生id+班级id)。这些是每个表中的唯一标识符
  • 通过我们的键控关系,我们能够相互关联信息(学生4096注册了多少个班级?)
  • 我们可以看到我们的表现在不会包含重复的数据(想想我们的第一个表,其中的student\u class对许多学生来说可能是相同的值。如果我们必须更改类名,我们必须更新所有记录。在我们的标准化格式中,我们可以只更新class\u id的class\u name)

关于数据库设计,您可以学习的主要技术称为

数据库规范化有其局限性,特别是当您有许多事务时。在某些时候,你可能会被迫这样做


但依我看,最好从规范化的数据库设计开始。

我还建议使用可视化编辑器来创建数据库模式。我最近一直在使用:

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


因此,设计、获取反馈,但不要害怕改变。

感谢您纠正拼写错误。我的英语糟透了。。我知道:(