首页 > 数据库 >Java学习笔记2(数据库的三大范式)

Java学习笔记2(数据库的三大范式)

时间:2024-08-22 12:26:35浏览次数:11  
标签:范式 依赖于 id Java sex 主键 三大 属性

什么是范式?
范式是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。

最常用的三大范式
第一范式(1NF):属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)

ps:举个例子,地址列山东省青岛市市北区,可以这样存储,但是实际上不满足第一范式,因为省市区是可以分割的。再例如phone+address列存储为一个contact列,更不满足第一范式

——————————————————————————————————————————————————————————————————————————————————

第二范式(2NF):满足第一范式;且不存在部分依赖,即非主属性必须完全依赖于主属性。(主属性即主键;完全依赖是针对于联合主键的情况,非主键列不能只依赖于主键的一部分)

如下学生成绩表(score):

stu_id(学生id)、kc_id(课程id)、score(分数)、kc_name(课程名)

表中主键为stu_id和kc_id组成的联合主键。满足1NF;非主键列score完全依赖于主键,stu_id和kc_id两个值才能决定score的值;而kc_name只依赖于kc_id,与stu_id没有依赖关系,它不完全依赖于主键,只依赖于主键的一部分,不符合2NF。

———————————————————————————————————————————————————————————————————————————————————

第三范式(3NF):满足第二范式;且不存在传递依赖,即非主属性不能与非主属性之间有依赖关系,非主属性必须直接依赖于主属性,不能间接依赖主属性。(A -> B, B ->C, A -> C)

 表中sex_desc依赖于sex_code,而sex_code依赖于id(主键),从而推出sex_desc依赖于id(主键);sex_desc不直接依赖于主键,而是通过依赖于非主键列而依赖于主键,属于传递依赖,不符合3NF。

修改后

 

什么样的表越容易符合3NF?
非主键列越少的表。(1NF强调列不可再分;2NF和3NF强调非主属性列和主属性列之间的关系)

如代码表(sexcode),非主键列只有一个sex_desc;

或者将学生表的主键设计为primary key(id,name,sex_code,phone),这样非主键列只有address,更容易符合3NF。

 

标签:范式,依赖于,id,Java,sex,主键,三大,属性
From: https://www.cnblogs.com/yssgxxy/p/18373593

相关文章

  • Java毕业设计作品(104):基于thymeleaf前后端分离 校园学校社团网站系统设计与实现
      博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书......
  • JAVA 的介绍和安装
    JAVA的介绍和安装Java的三大版本JavaSE:标准版(桌面程序,控制器开发)JavaME:嵌入式开发(忽略)JavaEE:E企业级开发(web端,服务器开发……)学习思路SE→EEJava的组成JDK、JRE、JVMJDK:javadevelopmentkit(java开发者工具)JRE:JavaruntimeenvironmentJVM:javavirtu......
  • Java线程池实现原理及在美团业务中的实践
    Java线程池实现原理及在美团业务中的实践随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一......
  • Java当中有几种方式来创建线程执行任务?
    1.继承thread类publicclassyxextendsThreads{publicstaticvoidmain(String[]args)[yxthread=newyx();thread.start();}@Overridepublicvoidrun(){system.out.println("helloyx&qu......
  • Java——三个关键字 static 2
    1.简介在Java中,static表示“静态的”,它也是一种修饰符,可以修饰属性、方法、代码块和内部类。2.特性static修饰符具有如下特性:● 被static修饰的属性(成员变量)称为静态变量,也叫做类变量;● 被static修饰的常量称为静态常量;● 被static修饰的方法称为静态方法,也叫做类......
  • 每周JAVA学习汇总
    一、抽象类(AbstractClass)抽象类定义:抽象类是指包含抽象方法的类。抽象方法没有具体实现,只有方法声明,并以关键字abstract修饰。抽象类的特点:抽象类不能被实例化,只能被继承。抽象类可以包含具体实现的方法和抽象方法。抽象类可以包含成员变量,包括非final变量。抽象类......
  • java 读取pdf写成流报错PDF contains an encryption dictionary, please remove it wi
    java读取pdf写成流报错PDFcontainsanencryptiondictionary,pleaseremoveitwithsetAllSecurityToBeRemoved()orsetaprotectionpolicywithprotect()如何解决,如果需要引入依赖,需要哪些依赖 问题原因是PDF文件被加密了,需要使用PDFBox的相关方法来处理加密。 解......
  • 暑假Java自学进度总结07
    一.今日所学:1.无限循环无限循环:循环一直进行,不会停止3种形式:1>for(;......
  • 从开发者视角解析提示词工程:大模型时代的新型编程范式
    1.引言在人工智能飞速发展的今天,大语言模型(LLM)、智能代理(Agent)、检索增强生成(RAG)、以及提示词工程(PromptEngineering)这些词语频繁出现在我们的技术讨论中。今天,我们来聊聊提示词工程,看看它怎么成为开发者手中一种新型的“编程语言”。2.传统软件开发流程回顾说到软件开发,大......
  • java创建链表异常解决
    问题解决问题解释该错误表明,在试图创建非静态类实例时,没有正确引用外部类的实例。源代码如下packagevjudge;importjava.util.Scanner;publicclasstest{//节点类publicclassNode{intdata;Nodenext;Node(intdata){......