浅析数据库设计的三大范式

为了建立一个小的冗余和结构合理的数据库,必须遵循一定的规则在设计数据库。在关系数据库中,这种规则被称为范式,范式是一个特定的设计要求的一个总结。为了设计一个结构合理的关系型数据库,一定的范式必须遇见。

实际开发中有三种最常见的设计范式:

1。第一范式(确保每列保持原子性)

第一范式是最基本的范式,如果数据库表中的所有字段的值是不可分解的原子值,表明满足第一范式的数据库表。

第一范式的合理合规性需要根据系统的实际需要来确定。例如,一些数据库系统需要使用地址属性,和地址属性的最初设计是一个领域的数据库表。但如果系统经常访问的地址属性的城市的一部分,然后有必要把地址属性分为省、市、详细地址、等部件,所以它会很方便操作时部分地址。这个设计满足第一范式的数据库,如下表所示。


表中所示的用户信息符合第一范式的要求,便于用户对城市进行分类,提高数据库性能。



2。第二范式(确保表中的每个列与主键相关)

第二范式是在第一范式的基础上更先进。第二范式需要保证数据库表中每一列是主键,而不是主键的一部分。也就是说,在一个数据库表,只是一种数据可以保存在一个表,和许多种类的数据不能保存在同一个数据库表。

例如,我们需要设计一个订单信息表,因为订单中可能有多种商品,所以我们应该把订单号和商品号作为数据库表的主键,如下表所示。
订单信息表


这就产生了一个问题:表是一个带有订单号和商品号的联合密钥。在这种情况下,商品名称、单位和商品价格的信息与表的主键无关,但只与商品编号有关,因此违反了第二范式的设计原则。

如果我们拆分订单信息表,我们可以将商品信息分离到另一个表中,我们也可以将订单项列表与另一个表分开。


这种设计在很大程度上减少了数据库的冗余,如果你想得到订单的商品信息,可以使用商品号查询商品信息表。

三.第三范例(确保每个列与主键列直接相关,而不是间接相关)

第三范式需要确保数据表中的每一列数据都直接与主键相关,而不是间接地与主键相关。

例如,当设计一个订单数据表,你可以作为一个外键,顺序表的客户数量之间的关系建立。它是不可能将字段添加到客户的其他信息(如名称、公司等)在订单列表。如下面的两个表显示,该设计是一个符合第三范式的数据库表。


因此,在查询订单信息时,可以使用客户编号引用客户信息表中的记录,不需要在订单信息表中输入客户信息的内容,从而减少数据冗余。

以上是数据库三大数据库的介绍,希望能帮助您设计一个结构合理、冗余少的数据库。