数据库范式-表结构设计规范
引言
数据库表结构设计有一套规范。设计出的表结构应尽量避免不必要地冗余,同时要确证灵活性。只需要遵守公认的范式,就可以达到较合理地设计效果。同时,这些范式也是评价一个数据库表结构设计是否合理的标准。
范式:
1NF、2NF、3NF、BCNF,它们是一级包含一级的关系,即必须先满足第一范式,再判断是否满足第二范式。如果已经满足第二范式,再判断是否满足第三范式。1NF、2NF、3NF、BCNF是逐级递进的。只有符合范式要求的表结构设计才能说是合理的设计。
下面以学生成绩管理数据库来讲解这些范式:
1NF
表示属性值是不可分割
比如学生信息表t_student:
student |
---|
201501Mike |
student字段不满足第一范式。因为该属性值可以再分割变为:
id | name |
---|---|
201501 | Mike |
2NF
非主要的属性,必须完全依赖主要的属性,不能部分依赖
比如选课信息表:
选课人 | 课程 | 上课老师 | 教材 | 老师职称 |
---|---|---|---|---|
Mike | 数据库 | Jack | 《数据库原理》 | 副教授 |
(选课人、课程)才能确定这张表的唯一行。所以它是主属性。但是教材只与课程有关。教材并不依赖选课人。
那么问题来了,假设1万个选课行,那么教材发生修改就需要修改这1万行。而且如果某一门课,没人选,那如何插入呢?
所以这不符合2NF。解决方案是拆分成过个表。
3NF
表示非主属性不要依赖于其他非主属性
还以上述选课表为例。
选课人 | 课程 | 上课老师 | 老师职称 |
---|---|---|---|
Mike | 数据库 | Jack | 副教授 |
同样,主属性是(选课人,课程),但是老师职称跟选课人没关系。只和上课老师相关。所以这就是非主属性依赖其他非主属性。不满足第三范式。
数据库范式-表结构设计规范相关推荐
- SQL巩固以及数据库、表结构优化
SQL巩固&数据库.表结构优化 前言 对于初级程序开发工程师而言,SQL是很多人的弱项,为此我给大家来做一下总结,希望能够帮到你们. 课程说明 1.介绍项目实战开发过程中常用的MySQL函数及 ...
- 数据库间表结构对比和数据对比
概述 对于企业软件开发或实施人员,在软件实施过程中,经常会遇到了这么一个问题,我们在客户那边安装了整个ERP程序并且向数据库中导入了客户提供给我的基础资料,程序进入试运行阶段,在试运行期间,客户反映出 ...
- 把数据库的表结构导出Excel格式
把数据库的表结构导出Excel格式 话不多说先上代码! SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAXIM ...
- MySQL 对比数据库的表结构
有时候,需要对比一下测试环境和生产环境中,数据库的表结构是否有所差异.有两个常用的工具. AmpNmp.DatabaseCompare GUI 界面,支持多种数据库(MySQL.SQL Server. ...
- dbisam数据库主从表结构的使用方法
要使用DBISAM数据库主从表结构,需用到下列控件: 一个TDBISAMTable或者TDBISAMQuery控件,命名为tblMaster或者qryMaster, 一个(或多个)TDBISAMTab ...
- navicat 导出数据库的表结构
navicat 导出数据库的表结构 (1)打开navicat for Mysql,点击页面上方的"new query" (2)在"SQL Editior"中写入 ...
- MySQL数据库修改表结构
修改表结构可以使用: alter table 语句,多个修改字段之间使用逗号分隔 前几篇博文把goods表中的商品分类和品牌信息已经更改成了商品分类id和品牌id,为了使数据库中表的字段名称标准化,需 ...
- ORACLE数据库对比表结构
有时候会有某种需求:需要对比两个表的表结构是否一致,有时候甚至是整个数据库所有表的表结构对比.......表结构对比无非就是字段名.字段类型.字段数据类型.以及字段的顺序的对比.如果需要对比表结构,可 ...
- sybase数据库导出mysql_sybase导出数据库的表结构命令
在不同平台上导数据时,只能用BCP命令,但是BCP命令不能导出数据库表结构,所以需进行数据库表结构的导出. 在sybase12.5版本以上,可以用如下方式导出表结构: ddlgen –Usa –Pxx ...
最新文章
- linux dump用法,Linux命令之tcpdump命令用法介绍
- InnoDB O_DIRECT选项漫谈(一)【转】
- 不同局域网内经Internet的P2P通信技术总结
- html加载出来图片乱掉,HTML基础 img alt 图片加载失败时,出现替代文本
- C++成员变量和成员函数分开存储
- 水面的简单渲染 – Gerstner波
- JAVA企业级应用服务器之TOMCAT实战
- 数据结构(C语言版)+数据结构题集(C语言版)
- 注册google的gmail邮箱显示此手机号无法用于验证--解决
- PhalAPI学习笔记 ——— 第三章细致讲解使用PSR-4规范自定义你的命名空间
- SpringMVC -- Restful风格的API
- 2021年度汇总丨20大热门TWS耳机功能配置汇总解析
- 华为人均工资70万人人想要,可华为员工16项标准你能做到几条?
- Windows10黑体字体
- Python 基础 之 词云(词的频率统计大小成图)的简单实现(包括图片词云,词云颜色,词的过滤)
- Elasticsearch 使用java分页查询条数超过1w的解决办法 -search_after方式
- RPC远程调用(RMI的方式实现RPC、HttpClient实现RPC远程调用)
- 华为鸿蒙第一期公测,华为鸿蒙开启第二轮公测,新增7款机型,有你的吗?
- Spring【Bean的作用域与生命周期】
- 我屮艸芔茻,mongo居然可以自动删除数据
热门文章
- Linux系统安装ffmpeg + h264视频编码
- vue实现天地图行政区(新疆为例)轮廓描边(一)
- 大型网站技术架构核心原理与案例分析学习笔记(理论篇)
- opencv遍历实现灰度图转伪彩色图[C/C++][附applyColorMap方法]
- 玩诈欺的小杉(详细解析+代码)
- TCP协议中的序列号
- Java命名规则和Java命名规范
- 土拨鼠网站日记管理(分析推送二合一)】宝塔插件之自动爬取全站URL推送说明书
- SQL注入漏洞,攻防必杀技!
- IBM ServerGuide9.40 for IBM X3950 X5 安装2008 R2操作系统