Java基础88 数据库设计的三大范式
数据库的设计原则:建议设计的表尽量遵守三大范式
1、第一范式
要求表的每个字段必须是不可分割的独立单元
Student表: name -- 违反了第一范式
张三/二狗子
3 应改为:
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 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |
Java基础88 数据库设计的三大范式的更多相关文章
- <转>数据库设计的三大范式
为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式. 在实际 ...
- 新人浅谈__(数据库的设计__数据库模型图,数据库E-R图,三大范式)
>>>> 为什么需要规范的数据库设计 在实际的项目开发中,如果系统的数据存储量较大,设计的表比较多,表和表之间的关系比较复杂,就需要首先考虑规范的数据库设计,然后进行创建库, ...
- Java基础-MySQL数据库扫盲篇
Java基础-MySQL数据库扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据库概述 1>.什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按 ...
- spring security4.2.2的maven配置+spring-security配置详解+java源码+数据库设计
最近项目需要添加权限拦截,经讨论决定采用spring security4.2.2!废话少说直接上干货! 若有不正之处,请谅解和批评指正,不胜感激!!!!! spring security 4.2.2文 ...
- Java基础语法(10)-面向对象之三大特征
title: Java基础语法(9)-面向对象之类的成员 blog: CSDN data: Java学习路线及视频 1.面向对象特征--封装 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按 ...
- Oracle基础<1>--数据库设计
一:为什么需要使用数据库设计 数据库设计可以使数据库通过健壮的数据库结构 高效并且健康 的进行工作. 二.数据库设计原则 (数据库设计.系统设计.架构设计) 1.熟悉需求 保证之后需求的变更 不会 ...
- java基础(28):数据库、表及表数据、SQL语句
1. 数据库 1.1 数据库概述 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. 什么是数据库 ...
- SQL Server数据库学习笔记-三大范式
第一范式(First Normal Form,简称1NF):数据库表中的字段都是单一属性的,不可再分.这个单一属性由基本类型构成,包括整型.实数.字符型.逻辑型.日期型等.要求一个属性只包含一个值,多 ...
- JAVA基础知识|类设计技巧
1.一定要保证数据私有 2.一定要对数据初始化 3.不要再类中使用过多的基本类型 4.不是所有的域都需要独立的域访问器和域更改器 5.将职责过多的类进行分解 6.类名和方法名要能够体现它们的职责 7. ...
随机推荐
- Jquery Cookie操作
// 写入 $.cookie('the_cookie','the_value');// 读取 $.cookie('the_cookie');// 删除 $.cookie('the_cookie',nu ...
- join()方法跟踪
#join方法跟踪java.lang.Thread.join() 进入线程的join方法,实际上线程thread是实现的 runnable接口 class Thread implements Runn ...
- SpringBoot 6.SpringBoot使用 Log4j2 实现日志输出
一.添加 Log4j2 的依赖 <!-- 引入 log4j2 必须排除 logging --> <dependency> <groupId>org.springfr ...
- Bootstrap中datetimepicker日期控件1899年问题解决
Bootstrap中datetimepicker日期控件1899年问题解决 最近在开发项目的过程中,遇到一个很尴尬的问题.我们项目一直采用的是angular+bootstrap,日期控件用的是boot ...
- 【转】树莓派Raspberry Pi - 还原已经装过系统的TF卡
想给树莓派换个系统的话,需要先把已经装过系统的TF卡进行还原,这里使用最简单粗暴无脑的方法: 1,下载安装Win32 Disk Imager(一般已经装过一次系统后,这个东西都有) 2,下载boots ...
- PyCharm远程开发配置及一些问题的解决方案
PyCharm远程开发配置 具体请参考:https://www.jianshu.com/p/79df9ac88e96 Tips:必须要安装PyCharm专业版 实践过程中遇到的问题 背景 因项目需要, ...
- noip2018 d2t3 保卫王国 解题报告
保卫王国 电脑卡懒得把题面挪过来了. 朴素 \[ dp_{i,0}=\sum dp_{s,1}\\ dp_{i,1}=\sum \min(dp_{s,0},dp_{s,1})+p_i \] 然后直接动 ...
- java实现超大整数加减乘除四则运算
原理: 用数组存储数字,按照计算法则进行运算. 代码: package com.hdwang; import java.util.regex.Matcher; import java.util.reg ...
- [整理]C 内核源代码-学习资料
GNU C gnu项目:http://www.gnu.org/software/software.html ftp:http://ftp.gnu.org/gnu/ 托管:http://savannah ...
- [整理]解析Json需要设置Mime
IIS6.0 1.打开IIS添加Mime项 关联扩展名:*.json内容类型(MIME):application/x-javascript 2.添加映射: 位置在IIS对应站点右键属性:”主目录”-” ...