我尝试在这里用外行术语来解释标准化。首先,它适用于关系数据库(Oracle、Access、MySQL),因此它不仅仅适用于 MySQL。
规范化是为了确保每个表具有唯一的最小字段并消除依赖关系。想象一下,您有一个员工记录,每个员工都属于一个部门。如果将部门与员工的其他数据一起存储为字段,则会遇到问题 - 如果删除部门会发生什么?您必须更新所有部门字段,并且有可能出错。如果某些员工没有部门(也许是新分配的?)怎么办?现在将会有空值。
因此,简而言之,规范化是为了避免字段为空,并确保表中的所有字段仅属于所描述的数据的一个域。例如,在员工表中,字段可以是 id、姓名、社会安全号码,但这三个字段与部门无关。只有员工 ID 描述了该员工属于哪个部门。所以这意味着员工所在的部门应该在另一个表中。
这是一个简单的标准化过程。
EMPLOYEE ( < employee_id >, name, social_security, department_name)
正如所解释的,这没有标准化。标准化形式可能看起来像
EMPLOYEE ( < employee_id >, name, social_security)
这里,Employee表只负责一组数据。那么我们在哪里存储员工属于哪个部门呢?在另一个表中
EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )
这不是最佳的。如果部门名称变了怎么办? (这种情况一直在美国政府中发生)。因此最好这样做
EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )
有第一范式、第二范式和第三范式。但除非你正在学习数据库课程,否则我通常只会选择我能理解的最标准化的形式。