第一部分 数据库之表的设计

作者: 孙浩j | 来源:发表于2017-11-29 12:12 被阅读55次

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

在实际开发中最为常见的设计范式有三个:
1.第一范式(确保每列保持原子性)

第一范式是最基本的范式。
(1)列不可分
(2)有主键

根据实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。

image

2.第二范式(确保表中的每列都和主键相关)
(1)每个表只描述一件事
(2)主要针对联合主键而言,不存在部分依赖,每一列都跟联合主键有关系,而与联合主键中的其中一个键无关系

比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。

订单信息表

image

这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。

而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了。如下所示。

image

这样设计,在很大程度上减小了数据库的冗余。如果要获取订单的商品信息,使用商品编号到商品信息表中查询即可。

3.第三范式(确保每列都和主键列直接相关,而不是间接相关,不存在传递依赖)

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

比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段,因为添加后就会出现传递依赖 :
订单编号--》客户编号, 客户编号--》客户详细信息

如下面这两个表所示的设计就是一个满足第三范式的数据库表。

image

这样在查询订单信息的时候,就可以使用客户编号来引用客户信息表中的记录,也不必在订单信息表中多次输入客户信息的内容,减小了数据冗余。

相关文章

  • 数据库部分 Day56 2019-01-15

    数据库部分 1. 关系型数据库的三范式 关系型数据库在设计表时要遵循的规范 第一范式:数据库表的每一列都是不可分割...

  • 数据库 权限设计

    数据库 权限设计 -系统权限管理设计-通用权限管理设计 之 数据库结构设计 权限 用户 角色 组 用户表

  • SQL学习笔记——数据库设计三范式

    数据库设计范式:数据库表的设计依据。教你怎么进行数据库表的设计。 第一范式:要求任何一张表必须有主键,没一个字段原...

  • 商城表结构设计

    (一)购物商城数据库设计-前期准备 (二)购物商城数据库设计-商品表设计 (三)购物商城数据库设计-商品表DDL(...

  • 综合案例

    来自拉钩教育-JAVA就业集训营 1.商城案例表设计 通过对商城项目的部分表关系进行分析,完成数据库表的设计 1....

  • MySql--数据库设计三范式

    数据库设计三范式 设计数据库表的时候所依据的规范,共三个规范: 第一范式 数据库表中不能出现重复记录,每个字段是原...

  • 2018-12-03 2.4

    《2.4 系统数据库设计》 2.4(1) 一.数据库表设计和流程图 1. 数据库设计第一步 标识实体 在需求分析...

  • PowerDesigner生成数据库设计文档

    1.说明 使用PowerDesigner设计数据库表,基于PowerDesigner设计数据库表[https://...

  • PowerDesigner生成数据库刷库脚本

    1.说明 使用PowerDesigner设计数据库表,基于PowerDesigner设计数据库表[https://...

  • 数据库设计三范式与反范式

    MySql设计与优化系列笔记:一、数据库设计三范式与反范式二、MySql表设计与优化 第一范式: 1、数据库的所有...

网友评论

    本文标题:第一部分 数据库之表的设计

    本文链接:https://www.haomeiwen.com/subject/eazgvxtx.html