数据库范式

纵然是瞬间 提交于 2019-11-27 22:07:55

数据库范式

  • 第一范式
  • 第二范式
  • 第三范式
  • 反范式化
第一范式

原子性:要求属性具有原子性,不可再分解

举例:

比如根据需求可以将时间拆成年月日

CREATE TABLE kpi2_tempgrade (
kpi2_tempGrade_userId varchar(30) NOT NULL,
kpi2_tempGrade_name varchar(30) DEFAULT NULL,
kpi2_tempGrade_year int(4) NOT NULL,
kpi2_tempGrade_month int(2) NOT NULL,
kpi2_tempGrade_grade varchar(1) DEFAULT NULL,
kpi2_tempGrade_score float(5,3) DEFAULT NULL,
PRIMARY KEY (kpi2_tempGrade_userId,kpi2_tempGrade_year,kpi2_tempGrade_month)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

第二范式

唯一性:要求记录有惟一标识,即实体的惟一性,即不存在部分依赖

举例:

比如多对多关系的表

考核人表

CREATE TABLE kpi2_checkperson (
kpi2_checkperson_id varchar(30) NOT NULL,
kpi2_checkperson_name varchar(20) DEFAULT NULL,
PRIMARY KEY (kpi2_checkperson_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

中间表

CREATE TABLE kpi2_viewscope (
kpi2_viewScope_userId varchar(50) NOT NULL,
kpi2_viewScope_checkuserId varchar(50) NOT NULL,
PRIMARY KEY (kpi2_viewScope_userId,kpi2_viewScope_checkuserId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

被考核人表

CREATE TABLE kpi2_members (
kpi2_members_id int(5) DEFAULT NULL,
kpi2_members_userId varchar(30) NOT NULL,
kpi2_members_name varchar(10) DEFAULT NULL,
kpi2_members_departmentsId int(3) DEFAULT NULL,
kpi2_members_checkDepartmentsId int(3) DEFAULT NULL,
kpi2_members_checkPersonId varchar(30) DEFAULT NULL,
kpi2_members_identity int(1) DEFAULT ‘0’,
PRIMARY KEY (kpi2_members_userId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

第三范式

冗余性:要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖

举例:

成员表

CREATE TABLE kpi2_members (
kpi2_members_id int(5) DEFAULT NULL,
kpi2_members_userId varchar(30) NOT NULL,
kpi2_members_name varchar(10) DEFAULT NULL,
kpi2_members_departmentsId int(3) DEFAULT NULL,
kpi2_members_checkDepartmentsId int(3) DEFAULT NULL,
kpi2_members_checkPersonId varchar(30) DEFAULT NULL,
kpi2_members_identity int(1) DEFAULT ‘0’,
PRIMARY KEY (kpi2_members_userId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

每月分数详情

CREATE TABLE kpi2_detailkpi (
kpi2_detailKpi_userId varchar(30) NOT NULL,
kpi2_detailKpi_name varchar(6) DEFAULT NULL,
kpi2_detailKpi_year int(4) NOT NULL,
kpi2_detailKpi_month int(5) NOT NULL,
kpi2_detailKpi_score float(5,3) DEFAULT NULL,
kpi2_detailKpi_grade varchar(2) DEFAULT NULL,
kpi2_detailKpi_comment varchar(255) DEFAULT NULL,
kpi2_detailKpi_taskId varchar(50) DEFAULT NULL,
kpi2_detailKpi_behaviorId varchar(50) DEFAULT NULL,
kpi2_detailKpi_extraId varchar(50) DEFAULT NULL,
kpi2_detailKpi_referScore float(5,3) DEFAULT NULL,
PRIMARY KEY (kpi2_detailKpi_month,kpi2_detailKpi_year,kpi2_detailKpi_userId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

反范式化

有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!