首页 > 数据库 >数据库设计

数据库设计

时间:2023-05-13 14:07:40浏览次数:37  
标签:概念模式 范式 数据库 视图 设计 数据 属性

数据库概念

三层模式

系统结构:三级模式,内模式、概念模式、外模式。 内模式:管理如何存储物理数据。 概念模式:根据需求划分为一张张的表。 外模式:对应视图级别,将表进行了一次封装处理。

内模式:存储模式,数据库在物理方面的描述,定义记录类型、索引、文件组织方式(概念模式下的一张表,在内模式中可能存储在不同文件中)。 外模式:用户模式、子模式,用户与数据库系统的接口,用户用到的那部分数据的描述,如视图。 概念模式:模式,是数据库中全部数据的逻辑结构的描述,如库、表

两层映射关系

外模式和概念模式有映射关系(逻辑独立性),概念模式与内模式也有映射关系(物理独立性),因此在出现变动时,无关层不会影响。

外模式-概念模式映像:表和视图进行映射,表改了只需要改视图,不用动程序。 概念模式-内模式映像:表和物理存储的映射,DBMS自动管理。

数据模型

ER实体联系图(结构化中用的数据模型,面向对象中用类图表示数据模型),体现了数据之间的关系。

E-R模型: ERD数据图

关系模型

数据库设计_架构

目或度:关系模型中属性的个数。

候选键:唯一标识元组,且无冗余(不能有多余)的集合(可以多个属性的组合)。

主键:候选键中任选一个。

主属性与非主属性:组成候选码的属性,就是主属性。

外键:其他表中的主属性。

完整性约束

  1. 实体完整性约束:主属性不能取空值。
  2. 参照完整性:关系与关系间的引用,外键约束。
  3. 用户自定义约束。
  4. 触发器 。
关系表类型

基本关系:实际存在的表,实际存储数据的逻辑表示。查询表:查询结果对应的表。 视图表:虚拟表,其内容由查询定义(仅仅保存SQL查询语句)。

  • 视图能简化用户操作
  • 视图使用对重构数据库提供一定程度的逻辑独立性(表结构改了,只需要调整视图sql,上层应用不用改)
  • 视图对数据提供安全保护(可以设定访问权限之类)
关系代数

并集、交集、差集、笛卡尔积

数据库设计_架构_02


数据库设计

数据库如果设计不合理,往往会成为系统的“瓶颈”。

数据库设计_架构_03

数据库设计主要分为用户需求分析、概念结构、逻辑结构和物理结构设计四个阶段。

其中,在用户需求分析阶段中,数据库设计人员采用一定的辅助工具对应用对象的功能、性能、限制等要求所进行的科学分析,并形成需求说明文档、数据字典和数据流程图。用户需求分析阶段形成的相关文档用以作为概念结构设计(ERD)的设计依据。

输出:需求分析:数据流图、数据字典、需求说明书。 概念结构设计:ER模型图(与数据库无关) 逻辑结构设计:关系模型(由ER图转换而来,注意转换规则和规范化理论),即表。 物理设计:关注索引,等跟硬件、操作系统的特性。

设计规则和指南

  1. 每个基本实体、关联实体和弱实体都被实现成一个独立表(多对多关系必须要单独设计成一个关系模式(表))
  2. 数据完整性和访问完整性约束

函数依赖

规范化

非规范化问题:数据冗余、更新异常(一部分改了,一部分没改到,修改操作一致性问题)、插入异常、删除异常。

// 没有非主属性就不会违反第二、第三范式。

第一范式:属性不可再拆分。

  • 姓名:假如姓名这个属性硬要说不满足第一范式,是因为“姓名”还可以拆成“姓”和“名”。
  • 第二范式:在第一范式之上,表中的候选键能够确定表中其他属性,就存在部分依赖,不属于第二范式。
  • id、名称、名称的英文形式:其中名称就能够确定“名称的英文形式”,那就存在部分依赖,不满足第二范式。
  • 如下图,课程号就能够确定课程名了,因此存在部分依赖。

数据库设计_数据库_04

第三范式:在第二范式基础上,不存在传递函数依赖。(一般表现为,其他属性可以从非候选键中推导出来,二非候选键又刚好可以从候选键推出来)

BC范式:解决主属性的依赖问题。

反规范化:数据库设计者希望牺牲部分规范化提升性能优点:连接操作减少,查询的表变少,查询、统计变快,检索变容易。 缺点:数据有冗余,存储空间变大。有数据不一致的问题。插入更新变得困难,增删改的异常也会出现。

实现方式: 增加派生性冗余:通过某些属性能够计算得到的其他属性。 增加冗余:已有学号,增加姓名。 重新组表:为了提高效率。 分割表:把表水平切割,长沙地区的存长沙表,其他地区存其他表。

索引

提升查询效率,降低增加、删除、修改效率。一般采用B、B+树结构。

数据库设计_概念模式_05

树形结构能够提升查找效率。

视图

虚拟的表,好比已经写好的SQL,可以直接调用(可以转成物化视图)。

物化视图:将SQL语句查询的结果存成表,系统自动维护数据同步。 优点:安全(可以设置权限,只显然若干属性<针对直连数据库的系统,现代系统已经可以控制返回字段显示>)、简化操作(不用写sql)、逻辑独立、不同角度返回数据。

分区分表分库

提升系统性能。

数据库设计_架构_06

分区:表数据量很大,从物理文件上划分,下次读取时数据量变小,速度会变快。(数据库底层支持,开发人员不用考虑)范围分区:按表中的字段范围,如记录的id号分区,5000~10000存第二个区。 哈希分区:对key进行哈希运算求余,取余后看落在哪个区,分布会比较均匀。 列表分区:要分的本身是列表,如城市,可以分成上海市、北京。 分表:逻辑上是多张表了,(分区上来看,数据表还是整体)。 分库:多个表打包成一个库,完整数据库分成多个库。


并发控制

// 主要是对事务的处理事务的ACID特性

解决并发方式:封锁协议,X锁(排他性)、S锁(共享性)。

三级封锁协议

数据库设计_架构_07

两阶段加锁协议:2PL,指的是单机事务中的加锁机制,是指所有事务必须分两个阶段对数据项加锁和解锁。事务分为两个阶段,第一阶段是获得封锁,第二阶段是释放封锁

两阶段提交协议:2PC,主要用于分布式事务中,把分布式事务的提交过程分成表决执行两个阶段。


分布式数据库

在原来独立的数据库之上,加盖了全局的数据库管理,把所有库统一管理。 // 集中式数据库:Oacle、sqlserver。

特点:在集中式数据库的架构上,增加了全局的概念,通过全局来控制分片,将分片数据存储到局部数据(原集中式)。数据独立性、集中与自治共享的结合控制结构、适当增加数据冗余度、全局的一致性、可串行、可恢复。

透明性// 表示用户不需要关心数据是怎么分片的 分片透明(水平<南方节点、北方节点>、垂直、混合)、位置透明、局部数据模型透明(表结构,逻辑结构)

分布模式:管数据存在哪里。

  • 位置透明性:不管数据库存哪里。
  • 分片透明性:不管是否分片(水平、垂直),用户没有感知。

NoSQL

不仅仅是SQL,泛指非关系数据库。

数据库设计_概念模式_08


联邦数据库系统
彼此协作又相互独立的成员数据库的集合。


数据库设计_软考_09


数据库优化

数据库设计_数据库_10

标签:概念模式,范式,数据库,视图,设计,数据,属性
From: https://blog.51cto.com/u_14180597/6273662

相关文章

  • 领域驱动设计-软件核心复杂性应对之道:第六章
    第六章领域对象的声明周期接下来,我们将注意力转移到生命周期的开始阶段,使用factory(工厂)来创建和重建复杂对象,并使用aggregate来封装它们的内部结构。最后,在生命周期的中间和末尾实验repository(存储库)来提供查找和检索持久对象并封装庞大基础设施的手段。使用aggregate进行建模,......
  • DTS106TC数据库
    XJTLUEntrepreneurCollege(Taicang)CoverSheetModulecodeandTitle DTS106TC:IntroductiontoDatabaseSchoolTitle SchoolofAIandAdvancedComputingAssignmentTitle AssessmentTask001(CW):IndividualCourseworkSubmissionDeadline 17May2023at5:......
  • 用go设计开发一个自己的轻量级登录库/框架吧(业务篇)
    用go设计开发一个自己的轻量级登录库/框架吧(业务篇)本篇会讲讲框架的登录业务的实现。实现三种登录模式:同一用户只能登录一次同一用户多次登录多token同一用户多次登录共享一个token源码:weloe/token-go:alightloginlibrary(github.com)存储结构首先从我们要考虑是......
  • MySql学习日志二,数据库的笔记
    数据库的列类型【了解】数值tinyint十分小的数据1个字节smallint较小的数据2个字节mediumint中等大小的数据三个字节int标准的整数4个字节常用intbigint较大的数据8个字节float浮点数4个字节double浮点数8个字节decimal字符......
  • java基于springboot+vue的农机电招平台、农机租赁管理系统,附源码+数据库+文档+PPT,适合
    1、项目介绍该系统包括前台操作和后台管理两个部分,一方面,为用户提供首页,农机,系统公告,个人中心,后台管理等功能;另一方面,为管理员提供首页,个人中心,农机机主管理,使用者管理,农机类型管理,农机管理,农机预约管理,系统管理等功能。项目获取,看这里2、技术框架编程语言:java系统架构:B/S......
  • 设计模式-工厂模式
    工厂模式(FactoryPattern)是Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。简单来说就是:我们创建一个工厂类,然后当......
  • 数据库 共享性、自治性、可用性、分布性
    共享性:指数据存储在不同的节点数据共享自治性:指每个节点对本地数据都能独立管理。可用性: 指当某一个场地故障时,系统可以使用其他场地上的副本而不至于使整个系统瘫痪。分布性:指数据在不同场地上的存储。......
  • 数据库分库分表 (水平拆分,垂直拆分)分库分表的方式在生产中通常包括:垂直分库、垂直分表
    1.分库分表产生的背景采用单数据库存储存在以下的性能瓶颈:①IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。②CPU瓶颈:排序,分组,连接查询,聚合统计等SQL会消耗大量的CPU资源,请求数太多,CPU出现瓶颈。分库分表将数据分散存储,使得单一......
  • DedeCMS 提示信息!把数据保存到数据库附加表 `dede_addonarticle` 时出错,请把相关信息
    DedeCMS提示信息!把数据保存到数据库附加表`dede_addonarticle`时出错,请把相关信息提交给DedeCms官方。Duplicateentry'7'forkey'PRIMARY'错误原因是Duplicateentry'7'forkey'PRIMARY'解决方案:进入后台,“系统”-“系统设置”-“SQL命令行工具”运行SQL命令行:alter......
  • Django如何把SQLite数据库转换为Mysql数据库
    大部分新手刚学Django开发的时候默认用的都是SQLite数据库,上线部署的时候,大多用的却是Mysql。那么我们应该如何把数据库从SQLite迁移转换成Mysql呢?之前我们默认使用的是SQLite数据库,我们开发完成之后,里面有许多数据。如果我们想转换成Mysql数据库,那我们先得把旧数据从SQLite导出......