数据库设计

数据库设计:三范式

房东的猫 提交于 2019-12-28 13:15:43
数据库设计的三范式 三范式: 1.第一范式(1NF):确保每一列的原子性 (做到每列不可拆分) 2.第二范式(2NF):在第一范式的基础上,非主字段必须依赖于主字段(一个表只做一件事) 3.第三范式(3NF):在第二范式的基础上,消除传递依赖 反三范式: 反三范式是基于第三范式所调整的,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。 来源: CSDN 作者: Leon_Jinhai_Sun 链接: https://blog.csdn.net/Leon_Jinhai_Sun/article/details/103742626

MyBatis——多对一查询

亡梦爱人 提交于 2019-12-28 09:51:22
多对一的处理 多对一的理解: 多个学生对应一个老师 如果对于学生这边,就是一个多对一的现象,即从学生这边关联一个老师! 数据库设计 CREATE TABLE ` teacher ` ( ` id ` INT ( 10 ) NOT NULL , ` name ` VARCHAR ( 30 ) DEFAULT NULL , PRIMARY KEY ( ` id ` ) ) ENGINE = INNODB DEFAULT CHARSET = utf8 INSERT INTO teacher ( ` id ` , ` name ` ) VALUES ( 1 , '秦老师' ) ; CREATE TABLE ` student ` ( ` id ` INT ( 10 ) NOT NULL , ` name ` VARCHAR ( 30 ) DEFAULT NULL , ` tid ` INT ( 10 ) DEFAULT NULL , PRIMARY KEY ( ` id ` ) , KEY ` fktid ` ( ` tid ` ) , CONSTRAINT ` fktid ` FOREIGN KEY ( ` tid ` ) REFERENCES ` teacher ` ( ` id ` ) ) ENGINE = INNODB DEFAULT CHARSET = utf8 INSERT

数据库设计-范式

北城以北 提交于 2019-12-28 09:44:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率、优雅的数据库。甚至设计出错误的数据库。而想要理解并掌握范式却并不是那 么容易。教科书中一般以关系代数的方法来解释数据库范式。这样做虽然能够十分准确的表达数据库范式,但比较抽象,不太直观,不便于理解,更难以记忆。 本文用较为直白的语言介绍范式,旨在便于理解和记忆,这样做可能会出现一些不精确的表述。但对于初学者应该是个不错的入门。我写下这些的目的主要是为了加强 记忆,其实我也比较菜,我希望当我对一些概念生疏的时候,回过头来看看自己写的笔记,可以快速地进入状态。如果你发现其中用错误,请指正。 下面开始进入正题: 一、基础概念 要理解范式,首先必须对知道什么是关系数据库,如果你不知道,我可以简单的不能再简单的说一下:关系数据库就是用二维表来保存数据。表和表之间可以……(省略10W字)。 然后你应该理解以下概念: 实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,不如说“老师与学校的关系”。 属性:教科书上解释为:“实体所具有的某一特性”,由此可见,属性一开始是个逻辑概念,比如说,“性别”是“人”的一个属性。在关系数据库中

MySQL数据库设计(实验九)

本小妞迷上赌 提交于 2019-12-28 03:49:55
1、数据库设计的步骤以及在各个步骤中需要完成的内容。 2. 某汽车运输公司数据库中有三个实体集。一是“车队”实体集,属性有车队号、车队名等;二是“车辆”实体集,属性有车牌照号、厂家、出厂日期等;三是“司机”实体集,属性有司机编号、姓名、电话等。设车队与司机之间存在“聘用”联系,每个车队可聘用若干司机,但每个司机只能应聘于一个车队,车队聘用司机有聘期;司机与车辆之间存在着“使用”联系,司机使用车辆有使用日期和公里数,每个司机可以使用多辆汽车,每辆车可被多个司机使用。 分析运输公司对车队、车辆与司机的管理模式进行数据库的设计 (1)提取实体和实体之间的联系,用传统方式进行概念模型(E-R)的设计、画出E-R图:(注意:务必将E-R图进行组合) (2)将上题中的E-R图按规则转化为关系模式。 答: 车队(车队号,车队名) 司机(司机编号,姓名,电话) 车辆(车牌照号,厂家,出厂日期) 聘用(车队号,司机编号,聘期) 使用(司机编号,车牌照号,日期,公里数) 3. 已知教师关系模式T(Tno,Tname,SD,Sdname,Cno,Coursenum) 其中:Tno教师号、Tname教师姓名、SD系名、Sdname系主任名、CNO课程号、Coursenum周学时。 语义为: 一个系有多个老师,一个老师只能在一个系;每个系都有一个系主任;假设教师有重名,系主任名也可能有重名。每个教师教多门课

文章分类标签数据库设计

☆樱花仙子☆ 提交于 2019-12-28 03:29:29
文章分类对应标签数据库设计 几乎在大部分有管新闻列表项目中,都涉及文章与标签的设计,应该说比较常见、典型的例子。考虑了很多种办法,见识了三四种对应的关系,现在我来说一种最节省数据库资源的文章分类与标签数据库设计的办法 需求说明 新闻分类,标签说明 详细需求 数据表设计 在这里我们要建三张表,Acticle文章信息表,Tags标签表 和 ActMappTags映射表 1、Acticle文章信息表 id title description 1 重大利好消息来袭,光伏行业有望打破坚冰 光伏产业潜伏盘整已有较长一段时间,最新的几项利好消息或许能打破坚冰,促进产业回暖。 2 华谊兄弟5年来首次收入下滑 如何突破瓶颈还是未知数 2月23日晚间,华谊兄弟发布了2016年年报。年报显示,报告期公司实现营业总收入为34.73亿元,较上年同期下滑10.34%,归属于上市公司股东净利润为8.08亿元,较上年同… 2、tags 标签表 id tag 1 能化 2 股市 3 经济 4 公司 5 要闻 3、ActMappTags 映射表 id a_id t_id 1 1 1 2 1 2 3 1 3 4 2 4 5 2 5 4 、表与表之间的关系图 怎么查询遍历出数据 首先,我们来建表三张表。 CREATE TABLE acticle( id IfNT UNSIGNED PRIMARY KEY AUTO

数据库设计三大范式

荒凉一梦 提交于 2019-12-26 20:37:34
数据库设计三大范式 1. 第一范式 确保每列的原子性。 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式。 例如: 顾客表(姓名、编号、地址、……) ,其中"地址"列还可以细分为国家、省、市、区等 2. 第二范式 在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关。 如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式。 例如: 订单表(订单编号、产品编号、定购日期、价格、……), "订单编号"为主键,"产品编号"和主键列没有直接的关系,即"产品编号"列不依赖于主键列,应删除该列。 3. 第三范式 在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关。 如果一个关系满足第二范式,并且除了主键以外的其它列都不依赖于主键列,则满足第三范式. 为了理解第三范式,需要根据 Armstrong 公理 之一定义传递依赖。 假设A、B和C是关系R的三个属性,如果A→B且B→C,则从这些函数依赖中,可以得出A→C。 如上所述,依赖A→C是传递依赖。 例如: 订单表(订单编号,定购日期,顾客编号,顾客姓名,……) 初看该表没有问题,满足第二范式,每列都和主键列"订单编号"相关 再细看你会发现"顾客姓名"和"顾客编号"相关,"顾客编号"和"订单编号"又相关,最后经过传递依赖,"顾客姓名"也和

初识MyBatis

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-24 13:57:29
MyBatis框架   MyBatis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。其封装性要低于Hibernate,性能优秀,并且小巧、简单易学,现在应用也越来越广泛。 数据持久化概念   数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如,文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。 MyBatis框架简介   MyBatis是一个开源的数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改SQL。   MyBatis的前身是iBatis,本身是Apache的一个开源项目,2010年这个项目有Apache Software Foundation迁移到了Google Code,并改名为MyBatis。2013年迁移到Github。 ORM介绍   ORM(Object/Relational

Mybatis常见面试题总结

泄露秘密 提交于 2019-12-23 08:31:48
1、什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。 (2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 (3)通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。 2、Mybaits的优点: (1)基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。 (2)与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接; (3)很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。 (4

Hibernate详解

ⅰ亾dé卋堺 提交于 2019-12-23 02:12:19
核心API 编辑 Hibernate的API一共有6个,分别为: Session 、 SessionFactory 、 Transaction 、 Query 、 Criteria 和Configuration。通过这些 接口 ,可以对持久化对象进行存取、事务控制。 Session Session 接口负责执行被持久化对象的 CRUD 操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是 Session对象 是非 线程安全 的。同时,Hibernate的 session 不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。 SessionFactory SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了 工厂模式 。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。 Transaction Transaction 接口是一个可选的API,可以选择不使用这个接口

数据库设计范式

拜拜、爱过 提交于 2019-12-22 17:19:45
简介   关系数据库中的关系必须满足一定的要求,即满足不同的范式。   目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、 第五范式 (5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。 第一范式(1NF)无重复的列   所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能同时有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。   说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 第二范式(2NF)属性   完全依赖于主键[消除非主属性对主码的部分函数依赖]   第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列