数据库设计

数据库设计-概述

匿名 (未验证) 提交于 2019-12-02 23:32:01
数据库设计 定义:    在特定应用环境下,根据具体的信息需求,通过合理的逻辑结构设计和物理结构设计,构造优秀的数据库系统,达到有效的存储和管理数据。 说明:    应用环境:业务场景;   信息需求:描述实体,属性,联系的性质,数据之间的关系。 数据库设计的步骤: 主要工作: 规划 确定数据库系统的范围。 确定开发工作所需的资源(人员,硬件,软件)。 估算软件开发的成本。 确定项目进度。 需求分析 概念结构设计 抽象: 现实世界中的事物->信息世界中的实体。 现实世界中的事物的属性->信息世界中的实体的属性。 现实世界中的事物之间的联系->信息世界中的实体之间的联系。 E-R图: 局部E-R图到总体E-R图。 逻辑结构设计 E-R图->某个DBMS所支持的关系模型。 优化得到的关系模型。 物理结构设计 为关系模型选择一个合适的物理结构(包括存储结构和存取方法)。 ʵʩ 建立实际数据库结构。 装入实验数据对应用程序进行调试。 装入实际数据。 运行与维护 收集和记录实际系统中运行的数据。 检测并改善数据库运行性能。 根据新的需求进行扩充和优化。 以上仅为本人学习过程中的知识总结,若有错误,还请诸位不吝赐教。 转载请标明出处: 数据库设计-概述 文章来源: 数据库设计-概述

Mybatis缓存

随声附和 提交于 2019-12-02 22:55:19
1.一级缓存 1>. 什么是一级缓存? 为什么使用一级缓存?   在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取一些措施的话,每一次查询都会查询一次数据库, 而我们在极短的时间内做了完全相同的查询,那么它们的结果极有可能完全相同,由于查询一次数据库的代价很大,这有可能造成很大的资源浪费。   为了解决这一问题,减少资源的浪费,MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来, 当下次查询的时候,如果判断先前有个完全一样的查询,会直接从缓存中直接将结果取出,返回给用户,不需要再进行一次数据库查询了。   如下图所示,MyBatis会在一次会话的表示----一个SqlSession对象中创建一个本地缓存(local cache),对于每一次查询, 都会尝试根据查询的条件去本地缓存中查找是否在缓存中,如果在缓存中,就直接从缓存中取出,然后返回给用户; 否则,从数据库读取数据,将查询结果存入缓存并返回给用户 对于会话(Session)级别的数据缓存,我们称之为一级数据缓存,简称一级缓存 2>. MyBatis中的一级缓存是怎样组织的?(即SqlSession中的缓存是怎样组织的?) 由于MyBatis使用SqlSession对象表示一次数据库的会话,那么

mysql数据库设计

匿名 (未验证) 提交于 2019-12-02 22:06:11
数据库设计 简介 简单来说,数据库设计就是根据业务系统的具体需要,结合我们所选的数据库管理系统,为这个业务系统构造出最优的数据库存储模型.并建立好数据库中的表结构及表与表之间的关联关系的过程.使之能有效的对应应用系统中的数据进行存储,并可以高效的对已经存储的数据进行访问. 常用关系型数据库:mysql、Oracle、SQL server、PgSql 常用非关系型数据库:Mongo、Memcache、Redis 数据库设计作用 优良的设计 糟糕的设计 减少数据冗余 存在大量数据冗余 避免数据维护异常 存在数据插入,更新,删除异常 节约存储空间 浪费大量存储空间 高效的访问 访问数据低效 维护调整方便 较难调整维护 数据库设计步骤 需求分析 数据库是什么 数据库有哪些属性 数据库和属性各自的特点有哪些 逻辑设计 使用ER图对数据库进行逻辑建模 物理设计 根据使用的数据库自身的特点把逻辑设计转换为物理设计 维护优化 新需求进行表建立 索引优化 大表拆分 需求分析 1.了解系统中所要存储的数据 2.了解数据的存储特点 3.了解数据的生命周期 需求分析要搞清以下问题 实体及实体之间的关系(1对1,1对多,多对多) 实体所包含的属性有什么 哪些属性或属性的组合可以唯一标识一个实体 实例演示需求分析过程 以小型电子商务网站为例,包含的模块: 用户模块 包括属性:用户名、密码、电话、邮箱、身份证号

MyBatis从入门到精通(十四):在MyBatis中使用类型处理器

匿名 (未验证) 提交于 2019-12-02 21:52:03
最近在读刘增辉老师所著的《MyBatis从入门到精通》一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解在MyBatis中如何使用类型处理器。 在设计之初,sys_role表的enabled字段有2个可选值,其中0 代表禁用,1代表启用,而且实体类中我们使用的是Interger类型: /** * 有效标志 */ private Integer enabled; public Integer getEnabled() { return enabled; } public void setEnabled(Integer enabled) { this.enabled = enabled; } 如果要新增或者更新角色信息,我们肯定要校验enabled字段的值必须是0或者1,所以最初的部分代码可能是这样的: if (sysRole.getEnabled() == 0 || sysRole.getEnabled() == 1) { sysRoleMapper.updateById(sysRole); sysRole = sysRoleMapper.selectById(2L); Assert.assertEquals(0, sysRole.getEnabled()); } else { throw new Exception(

数据库设计三大范式

痴心易碎 提交于 2019-12-02 16:35:34
数据库设计三大范式 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。 什么是三大范式: 第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为 1NF 。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。 第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为 2NF 。 第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为 3NF 。 注: 关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性 理解三大范式 第一范式 每一列属性都是不可再分的属性值,确保每一列的原子性 两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。 如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。 显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。 第二范式 每一行的数据只能与其中一列相关,即一行数据只做一件事

Java开发数据库设计的14个技巧,你知道几个?

我是研究僧i 提交于 2019-12-02 16:33:02
1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。 这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。 〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。这就是“一张原始单证对应多个实体”的典型例子。 2. 主键与外键 一般而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。 主键与外键的设计,在全局数据库的设计中,占有重要地位。当全局数据库的设计完成以后,有个美国数据库设计专家说:“键,到处都是键,除了键之外,什么也没有”,这就是他的数据库设计经验之谈,也反映了他对信息系统核心(数据模型)的高度抽象思想。 因为:主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。 3. 基本表的性质 基本表与中间表、临时表不同,因为它具有如下四个特性: 原子性。基本表中的字段是不可再分解的。 原始性。基本表中的记录是原始数据(基础数据)的记录。 演绎性。由基本表与代码表中的数据,可以派生出所有的输出数据。 稳定性

Mybatis面试题汇总

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

数据库设计

旧时模样 提交于 2019-12-02 12:12:01
范式理论:一般的数据库要满足“第一范式(1NF)”,“第二范式(2NF)”,“第三范式(3NF)”。 书籍:数据库设计入门经典 来源: https://www.cnblogs.com/mySummer/p/11745111.html

数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器

随声附和 提交于 2019-12-02 07:33:14
第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的 互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层 已经成为架构研发人员首选的方式。水平切分数据库,可以降低单台机器的负载,同时最大限度的降低了了宕机造成的损失。通过负载均衡策略,有效的降低了单台 机器的访问负载,降低了宕机的可能性;通过集群方案,解决了数据库宕机带来的单点数据库不能访问的问题;通过读写分离策略更是最大限度了提高了应用中读取 (Read)数据的速度和并发量。目前国内的大型互联网应用中,大量的采用了这样的数据切分方案,Taobao,Alibaba,Tencent,它们大 都实现了自己的分布式数据访问层(DDAL)。以实现方式和实现的层次来划分,大概分为两个层次(Java应用为例):JDBC层的封装,ORM框架层的 实现。就JDBC层的直接封装而言,现在国内发展较好的一个项目是被称作“变形虫”(Amoeba)的项目,由阿里集团的研究院开发,现在仍然处于测试阶 段(beta版),其运行效率和生产时效性有待考究。就ORM框架层的实现而言,比如Taobao的基于ibatis和Spring的的分布式数据访问 层,已有多年的应用,运行效率和生产实效性得到了开发人员和用户的肯定

数据库设计三范式

瘦欲@ 提交于 2019-12-02 05:36:15
数据库设计范式 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些 规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。 什么是三大范式: 第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要 求,否则,将有很多基本操作在这样的关系模式中实现不了。 第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。 第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF. 注: 关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性 理解三大范式 第一范式 1、每一列属性都是不可再分的属性值,确保每一列的原子性 2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。 如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。 显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。 第二范式 每一行的数据只能与其中一列相关,即一行数据只做一件事