数据库设计规范(详细)

article/2025/9/19 17:15:42

数据规范化设计

一、数据规范化

  仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构
Dr E.F.codd 最初定义了规范化的三个级别,范式是具有最小冗余的表结构
这些范式是:
1、第一范式(1st NF -First Normal Fromate)
2、第二范式(2nd NF-Second Normal Fromate)
3、 第三范式(3rd NF- Third Normal Fromate)

第一范式 (1st NF):
在这里插入图片描述
第一范式的目标是确保每列的原子性
如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
 
第二范式 (2nd NF):
在这里插入图片描述
如果一个关系满足1NF,并且除了主键以外的其他列,都依赖与该主键,则满足第二范式(2NF)
第二范式要求每个表只描述一件事情
 
第三范式 (3rd NF):
在这里插入图片描述
如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)

二、规范化实例

假设某建筑公司要设计一个数据库,公司的业务规则概括说明如下:

1、公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等
2、公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等
3、公司按照工时和小时工资率支付工资,小时工资率由职工的职务决定(例如,技术员的小时工资率与
工程师不同)
4、公司定期制定一个工资报表

如图所示(工资表):
在这里插入图片描述
如图所示(工时表):
在这里插入图片描述
表中包含大量的冗余,可能会导致数据异常:
更新异常 :
------例如,修改职工号=1001的职务,则必须修改所有职工号=1001的行

添加异常:
------若要增加一个新的职工时,首先必须给这名职工分配一个工程。或者为了添加一名新职工的数据,先给这名职工分配一个虚拟的工程。(因为主关键字不能为空)

删除异常:
------例如,1001号职工要辞职,则必须删除所有职工号=1001的数据行。这样的删除操作,很可能丢失了其它有用的数据

采用这种方法设计表的结构,虽然很容易产生工资报表,但是每当一名职工分配一个工程时,都要重复输入大量的数据。这种重复的输入操作,很可能导致数据的不一致性。
 
应用范式规范化设计
一张表描述了多件事情
在这里插入图片描述
应用第二范式规范化
在这里插入图片描述
应用第三范式规范化
在这里插入图片描述

四、规范化和性能的关系

1、为满足某种商业目标,数据库性能比规范化数据库更重要
------通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间
------通过在给定的表中插入计算列(如成绩总分),以方便查询

2、进行规范化的同时,还需要综合考虑数据库的性能


请添加图片描述


http://chatgpt.dhexx.cn/article/qGtZySyk.shtml

相关文章

数据库设计规范

注:部分参考来源于网络 1.命名规范 1.【强制】库的名称必须控制在32个字符以内,相关模块的表名与表名之间尽量提现join的关系,如user表和user_login表。 2.【强制】库的名称格式:业务系统名称_子系统名,同一模块使用…

数据库的设计规范

数据库的设计规范 一、为什么需要数据库设计二、范式2.1 范式简介2.2 范式都包括哪些2.3 键和相关属性的概念2.4 第一范式(1st NF)2.5 第二范式(2nd NF)2.6 第三范式(3rd NF)2.7 小结 三、反范式化3.1 概述…

kettle运行spoon.bat时找不到javaw文件(三种方法)

第一种:确定环境变量 此电脑右键-属性-高级系统设置-环境变量,查看jdk的变量名(我的叫JAVA_HOME) 编辑sqoop.bat, 将_PENTAHO_JAVA_HOME修改成JAVA_HOME 第二种: 修改内存 将1024、2048都改成521 第三种…

启动Kettle时报错找不到文件javaw.exe

kettle 安装过程中异常处理: kettle运行spoon.bat时找不到javaw文件 bug报错_zgrjddd的博客-CSDN博客_找不到javaw文章目录问题描述问题分析解决方法测试以下问题描述kettle运行spoon.bat时找不到javaw.exe文件问题分析说的是javaw.exe 文件,但是jdk安…

配置javaw.exe双击运行jar包

配置javaw.exe双击运行jar包 安装版JDK绿色版JDK绿色版配置方式上述配置中没有找到 javaw.exe 的特殊情况 安装版JDK 安装版JDK不用配置,在双击jar包的时候,选择Java SE平台的关联工具javaw.exe关联即可! 绿色版JDK 所谓绿色版,是指直接解压即用,不需要安装的JDK,可以使用先…

javaw.exe与java.exe_java.exe和javaw.exe的区别及使用方法

相同点:二者都是Java的虚拟机,用来执行Java程序 区别:javaw.exe运行程序时不会输出控制台信息,如果是双击打开jar文件的话(假设已经设置好了打开方式),那么根本就不会出现控制台窗口,主要用来运行带窗体的应…

java javaw javaws MC_java和 javaw 以及 javaws的區別

java ,javaw 和 javaws 的區別: 首先,所有的這些都是java的啟動裝置,java.exe經常使用,當使用命令行輸出到window的時候,會有java.exe進程,通過任務管理器可以看到。通常 我們執行一些小的java程序的時…

Windows找不到javaw

因为项目要升级,但却发现有这个问题,进不去 右键编辑 找到jdk路径 set pathD:\mcdev\jdk8\bin

64位java没有javaw.exe,2019-01-01 eclipse无法找到javaw.exe怎么处理

尝试启动Eclipse,弹出如下对话框“No Java virtual machine was found after searching the following location:”,貌似是找不到javaw.exe。 先整理下基础知识: 1. Java virtual machine:Java虚拟机,是运行所有Java程…

javaw.exe

1.问题的提出背景 安装完成Apache Tomcat6.0后验证是否安装成功,在浏览器地址框中输入:http://localhost:8080,出现下面的界面说明安装成功。 然而,每次都输入端口号8080很麻烦,所以想把端口8080改为80,这…

64位java没有javaw.exe_javaw.exe路径错误导致eclipse无法启动

错误如图: 原因: 在指定路径中没有找到javaw.exe或路径错误。 因为Eclipse启动时需要javaw.exe来启动。先查找path中各个目录以后,没有找到;就会查看固定地在eclipse的安装目录下查找。即:先找外面装了没有;若没有则找…

安装oracle提示javaw,为什么oracle 9i 安装时,setup exe javaw exe进程消失

Windows XP下安装Oracle9i问题二则 环境:WindowsXP 数据库:Oracle9i 问题一: 第一次在WindowsXP上安装Oracle9i就碰到如下错误: “您可能没有建立目录的适当权限或者磁盘已经没有空间,无法建立目录 c:....” 当时我的c…

java javac 以及 javaw

java javac 以及 javaw 1.javac2. java 和 javaw 1.javac 一个java程序运行的流程: 源码->编译(.java->.class)->运行(.class->启动jvm) javac 的目的就是编译 将.java变成.class 将高级编程语言变成字节码 字节码不…

java javaw 命令区别_java.exe和javaw.exe有什么区别

java.exe和javaw.exe有什么区别 java.exe和javaw.exe有什么区别? java.exe是运行class文件用的,即执行class文件。 而javaw.exe是干什么用的?参考我的: http://blog.csdn.net/ideality_hunter/article/details/51376006 ------javaw和java的区别,其他人的解释: http://bl…

java javaw 命令区别_java、javaw和javaws的区别

java、javaw和javaws的区别: 首先,所有的这些都是java的启动装置,java.exe经常使用,当使用命令行输出到window的时候,会有java.exe进程,通过任务管理器可以看到。通常 我们执行一些小的java程序的时候会有 java.exe进程在运行。javaw.exe对于我们也比较特殊,我们也能够通…

javaw java 区别_java和 javaw 及 javaws的区别解析

java ,javaw 和 javaws 的区别: 首先,所有的这些都是java的启动装置,java.exe经常使用,当使用命令行输出到window的时候,会有java.exe进程,通过任务管理器可以看到。通常 我们执行一些小的java程序的时候会…

mysql 命令行导入sql文件

1. 说明 有时候,使用navicat为MySQL导入sql文件时,会出现一些错误而导致数据无法导入成功,这时我们可以采用命令行的方式导入数据。以windows环境为例。 2. 步骤 a.数据表 b. 以命令行的方式登入mysql b.选择数据库进行导入 window…

SQL文件导入MySQL数据库

SQL文件导入MySQL数据库 1、MySQL设置环境变量 MYSQL_HOME:C:\Program Files (x86)\MySQL\MySQL Server 5.5 path:%MYSQL_HOME%bin 环境变量设置后,打开cmd命令窗口,输入mysql -u用户名 -p密码 登陆mysql 2、MySQL常用命令 source命令…

通过Navicate for MySQL导入SQL文件

场景:今天打算导入一个.sql 格式的外部数据文件,本来想通过在navicate界面打开.sql文件,运行将数据导入,但navicate一直出现卡段,推断该文件的数据量打开,软件打开非常吃力。 后面通过搜索,尝试…

MySQL中导入sql文件的步骤及常见问题(简单粗暴版)

1、新建数据库,字符集更改为utf8,点击确定。 2、右键点击新建的数据库,点击输入->SQL文件 3、找到相对应的sql文件,点击打开,最后刷新数据库。 常见问题:文件“xx.sql"的内容无法使用代码页936读取…