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

数据库设计

时间:2023-02-22 09:57:27浏览次数:50  
标签:事务 范式 读取 数据库 索引 设计 主键

ACID 原则

  • 原子性:要么都成功,要么都失败
  • 一致性:事务前后的数据完整性要一致
  • 隔离性:多个用户并发的访问数据库时,数据库为每一个用户开启的事务不能被其他事务的操作所干扰,事务之间相互隔离
  • 持久性:事务一旦提交则不可逆,被持久化到数据库中

脏读 幻读 不可重复读

  • 脏读:一个事务读取了另一个事务未提交的数据
  • 不可重复读:在一个事务内读取表中的某一行数据,多次读取的结果不同
  • 虚读(幻读):在一个事务内读取到了别的事务插入的数据,导致见后读取不一致

索引

索引是帮助MySQL高效获取数据的数据结构。

索引就是数据结构

索引分类

  • 主键索引 (primary key)

    • 唯一的标识,主键不可重复,只能有一个列作为主键
  • 唯一索引 (unique key)

    • 避免重复的列出现,唯一索引可以重复,多个列都可以标识为唯一索引
  • 常规索引 (key/index)

    • 默认的,可以用index或key来设置
  • 全文索引 (fulltext)

    • 在特定的数据库引擎下才有 MyISAM
    • 快速的定位数据

在一个表中,主键索引只能有一个,可以有多个唯一索引

数据库的设计

  • 收集信息,分析需求:分析业务和需要处理的数据库的需求
  • 概要设计:设计关系图 E-R图

(未完,待续)

设计个人博客

  • 收集信息,分析需求

    • 用户表(用户登录和注销,用户的个人信息,写博客,创建分类)
    • 分类表 (文章的分类)
    • 文章表 (具体的文章的信息)
    • 有链表 (友链信息)
  • 标识实体(把需求落实到每一个字段)

三大范式

关系型数据库设计:三大范式的通俗理解 - 景寓6号 - 博客园 (cnblogs.com)

  • 第一范式

原子性:要求数据库的每一列都是不可分割的原子数据项,就是你的数据库的每一列信息都不可以再拆分,比如数据库有一列家庭信息可以拆分为人口,家庭地址,学校信息里有学历,大几,研几可以被拆分,就不符合第一范式

  • 第二范式

先得满足第一范式,第二范式需要保证数据库表中的每一列都和主键相关,不能只与主键一部分相关,每张表只描述一件事,内容得和主键有关

  • 第三范式

先得满足第一和第二范式

,第三范式需要确保数据库表中的每一列数据都和主键直接相关,而不能间接相关,个人理解在这主要是为了解决表的冗余问题

但是实际生产中,需要注意

  • 关联查询的表不得超过3张表
    • 考虑商业化需求和目标。数据库的性能更加重要
    • 在规范性能问题的时候,需要适当的考虑规范性
    • 故意给表增加一些冗余字段,就能在查询的时候夺标查询变成单表查询
    • 故意增加一些计算列(从大数据量降低为小数据量的查询:索引)

标签:事务,范式,读取,数据库,索引,设计,主键
From: https://www.cnblogs.com/Zx-3-6-0-/p/17143258.html

相关文章

  • 数据库连接池druid和JdbcTemplate
    使用数据库连接池的原因1.之前每一次访问数据库都需要获取连接,经过操作后再释放连接。消耗资源,代码量多。  2.获取连接的操作是向系统底层申请资源,是非常耗时的,使用......
  • idea连接数据库,驱动问题
           选本地maven仓库的jar包就好        ......
  • CDC设计实例-01
    CDC设计实例ClockGatingCell&GlitchFreeClockSwitch(门控单元和动态切换时钟)一个电路有多个时钟输入进来,希望在工作当中能够动态切换时钟;比如CPU根据工作负载(A......
  • ECharts连接数据库的具体实现
    相关描述我们由之前的实例可以得知,要是不连接数据库的话,只是需要套用一下ECharts的相关模板即可,这部分内容我在前几篇中已经叙述过了;现在,我们需要实现的是,将数据库里面的......
  • ssm学习笔记23001-mybatis接入和数据库连接实现一个插入数据的操作
    mybatis:是什么,用来干嘛的,同类竞品中有何种优势?mybatis在idea中的引入:1、创建一个空工程2、创建一个空的maven文件:会自动生成一个pox文件,打包类型配置为jar,添加mybat......
  • 审批流程的设计
    应用场景在项目开发中,有时会遇到一些审批流程的需求,流程大同小异,可以根据需求进行设计开发。表结构示例CREATETABLE`tt_audit`(`id`int(10)NOTNULLCOMMENT'......
  • 设计模式之动态代理
    JDK动态代理:publicinterfaceSubject{publicvoidshopping();} publicclassPersonimplementsSubject{@Overridepublicvoidshopping(){......
  • ORACLE数据库相关操作
    表操作--截断表TRUNCATETABLETABLE_NAME;--删除表DROPTABLETABLE_NAME;--查询表SELECT*FROMTABLE_NAME;--添加一条记录INSERTINTOTABLE_NAME(COLU......
  • C#的string是一种糟糕的设计吗?
    前言    最近有人在某平台提问“C#的string是一种糟糕的设计吗?”,他认为官方为字符串做了很多内部优化处理,这种处理增加了理解成本,为什么不能提供char[]指针处理方案呢......
  • clickhouse(数据库-表-表字段相关操作)
    1、查看数据库版本selectversion();2、创建数据库createdatabasetmp;--创建数据库指定引擎,Ordinary是默认引擎,可以不指定,Ordinary引擎下面可以创建任意引擎表cre......