Java基础88 数据库设计的三大范式

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

数据库的设计原则:建议设计的表尽量遵守三大范式

1、第一范式

要求表的每个字段必须是不可分割的独立单元

 Student表:    name       -- 违反了第一范式
            张三/二狗子  
应改为:
4 Student表:    name      oldName   -- 符合第一范式
               张三      二狗子

解析:如上所示,当name这个字段有两种属性值的时候,就应当再加一个字段,将其分开

2、第二范式

在第一范式的基础上,要求每张表只表示一个意思,表的每个字段都和表的主键有依赖

 Employee表:员工编号  员工姓名  部门编号  订单名称(应改为订单编号,且再加一张订单表)   -- 符合第一范式,但违反了第二范式

 应改为:
Employee表:员工编号 员工姓名 部门编号 订单编号 -- 符合第二范式
订单表:订单编号 订单名称

解析:如上所示,“员工编号”、“员工姓名”、“部门编号”可作为一张表,表示一个意思;“订单名称”也可作为一张表,表示另一个意思。且“员工姓名”、“部门编号”可依赖主键“员工编号”;“订单名称”应该再创建一张订单表,依赖于订单表的主键“订单编号”。

3、第三范式

在第二范式的基础上,要求每张表的主键之外的其他字段都只能和主键有直接决定依赖关系

 Employee表:员工编号(主键)  员工姓名   部门编号  部门名称  -- 符合第二范式,但违反了第三范式(数据冗余高)  [部门名称字段 数据冗余了]

 应改为:
Employee表:员工编号(主键) 员工姓名 部门编号 -- 符合第三范式(降低数据冗余)
部门表:部门编号(主键) 部门名称

解析:如上所示,员工编号(主键)可直接决定“员工姓名”、“部门编号”,但 不能直接决定“部门名称”;否则就违反了第三范式(依赖关系重复了,且造成数据冗余),应该再创建一张部门表,由主键“部门编号”来决定“部门名称”

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/10549839.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java数据库

“Java基础88 数据库设计的三大范式” 的相关文章

thinkphp3.2如何使用if不等于语句 - 编程语言

这篇“thinkphp3.2如何使用if不等于语句”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“thinkphp3.2如何使用if不等于语句”文章吧。...

用empty来代替检查size()是否为0

对于所有的标准容器,empty是一个常数时间的操作,但对于一些list实现,size花费线性时间。...

centos安装g++

yum install gcc gcc-c++...

重要概念之函数式编程

什么是函数式编程?函数式编程(Functional Programming, FP)就是利用纯函数实现细粒度的函数,然后再通过函数的组合把细粒度的函数组合成功能更强大的函数。函数式编程中的 "函数" 不是程序中的函数(方法),而是数学中的函数(映射关系),例如 y=sin(x) 中 x 和 y 的关...

2022第十三届蓝桥杯省赛C/C++B组 真题题解

目录 A.九进制转十进制 B.顺子日期 C.刷题统计 D.修剪灌木 E.X 进制减法 F.统计子矩阵 G.积木画 H.扫雷 I.李白打酒加强版 J.砍竹子 特别说明本文章运用了万能头文件#include <bits/stdc++.h>会降低代码的运...