基于3N范式的数据表设计

范式

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

关系数据库现有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。

第三范式

说明:

定义:

  设关系模式R<U,F>∈1NF,若R中不存在这样的码X,属性组Y及非主属性Z(Z不包含Y)使得X->Y,Y->Z成立,Y推不出X,则R<U,F>∈3NF。

  定义实属枯燥难懂,简单理解即为,若R<U,F>∈3NF,则每一个非主属性既不传递依赖于码,也不部分依赖于码。3NF是基于2NF的,2NF要求每一个非主属性完全依赖于任何一个候选码。

码:主码或候选码都简称为码。

完全依赖:在R(U)中,如果X->Y,并且对于X的任意一个真子集都不能保证推出Y,则Y对于X完全函数依赖。

传递依赖:在R(U)中,如果X->Y(X不包含Y),Y->Z(Y不包含Z),则称Z对X完全传递函数依赖。

举个例子:

假定学生关系表为:

Student:[学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话]

分析:

这个表结构是符号2NF的,因为从学号可以推出所有的非主属性。但是存在如下关系:

即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。

它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。

把学生关系表分为如下两个表:

  学生:[学号, 姓名, 年龄, 所在学院];

  学院:[学院, 地点, 电话]。

这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。

MYSQL:基础——3N范式的表结构设计的更多相关文章

  1. mysql基础之对库表操作

    原文:mysql基础之对库表操作 查看一下所有的库,怎么办? Mysql>Show databases; 选库语句: Use 库名 创建一个数据库: create database 数据库名 [ ...

  2. mysql基础篇 - 数据库及表的修改和删除

    基础篇 - 数据库及表的修改和删除         修改和删除 一.实验简介 本节实验中,我们将学习并实践如何对数据库的内容做修改,删除,重命名等操作. 二.实验准备 在正式开始本实验内容之前,需要先 ...

  3. MySQL基础知识——范式与事务

    几个概念 在说范式之前,要先了解几个概念: 关系模式 关系模式的5要素:R(U,D,DOM,F) 用下面这个category表来理解上面这个式子 mysql> desc student; +-- ...

  4. mysql基础(库、表相关)

    一. mysql支持的数据类型 1.1 mysql支持的数字类型: TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767 ...

  5. MYSQL基础操作之单表的增删改查

    一.添加数据. -- 1.创建表,并插入一定的数据. CREATE TABLE STUDENT( ID INT, USERNAME ), SERVLET INT, JSP INT, ADDRESS ) ...

  6. MySQL基础学习之数据表

    查看数据表 SHOW TABLE; 查看数据表详细结构 SHOW CREATE TABLE 表名\G; 创建数据表 CREATE TABLE 表名(数据名 类型,数据名1  类型2); CREATE ...

  7. MySQL 基础六 临时表 复制表结构

    1.临时表CREATE TEMPORARY TABLE test2( id INT ) SELECT *FROM test2 SHOW TABLES; INSERT INTO test2 VALUES ...

  8. mysql基础(一)——表、索引、视图

    SQL语句不区分大小写 创建数据库 create database myData 删除数据库 drop database myData 创建表 create table company ( code ...

  9. MySQL基础知识 数据库 数据表

    1.数据库结构 库 表 数据 2. sql(structured query language)结构化查询语言 管理数据库 管理表 管理数据 3.数据库 增删改查 增 create database  ...

随机推荐

  1. jenkins插件安装失败更改插件源

    看提示的日志说是下载失败,应该是网络问题 最好的办法就是更改下载源 [系统管理][管理插件][高级]升级站点项的的地址修改成 修改之后,安装了一下git的插件速度非常快,jenkins镜像地址列表ht ...

  2. 如何在 Linux 下大量屏蔽恶意 IP 地址

    很多情况下,你可能需要在Linux下屏蔽IP地址.比如,作为一个终端用户,你可能想要免受间谍软件或者IP追踪的困扰.或者当你在运行P2P软件时.你可能想要过滤反P2P活动的网络链接.如果你是一名系统管 ...

  3. C#代码用法

    1.new的用法using System;using System.Collections.Generic;using System.Text;namespace yanz{public class ...

  4. VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService 未找到与约束ContractName,无法打开项目的解决方案 SQLyog 注册码

    VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService   最近新换了系统还真是问题多多呀! ...

  5. WordPress函数:get_bloginfo()用法详解

    描述 返回你博客的信息,这些信息可以用在任何地方的 PHP 代码中.这个函数,和 bloginfo() 一样,可以用来在模板文件的任何地方显示你博客的信息. 用法 <?php $bloginfo ...

  6. 用HTML5canvas绘制一个圆环形的进度表示

    先看一下画出来的效果,如下图,这样一个圆环形的进度.  我这里使用HTML5的Canvas来要制作这样一个圆环形的进度, 首先是HTML页面,HTML5的文档标识是: 这个文档标识要比HTML4的简单 ...

  7. linux内核参数分析

    这是原来在51cto写的,现在都转到博客园来了 1.time_wait连接数过多,需要调整内核参数 http://blog.renhao.org/2010/07/setup-linux-kernel- ...

  8. UVALive - 4255 - Guess (拓扑排序)

    Guess 题目传送:Guess 白书例题 注意拓扑排序时,,入度同一时候为0的前缀和须要赋值为同一个数(这个数能够随机取.由于前缀和是累加的,每个a的数值都仅仅和前缀和之差有关).,由于此时能够看成 ...

  9. lua学习笔记(十三)

    math库     定义在math中     所有三角函数都使用弧度     指数和对数函数     取整函数     伪随机数math.random         调用时没有参数返回0~1之间的随 ...

  10. java 实现HttpRequest 发送http请求

    package com.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...