myql笔记三(表设计)

如何设计好一张表呢?
1 设计的表达到什么要求?
1.1 首先能满足业务需求;
1.2 增删改查性能尽可能高;
1.3 扩展方便;
1.4 命名规范;

2 明确该表的使用场景?
对每日数据增量和数据全量进行评估;
对表的操作根据业务进行评估,是查询频繁还是修改频繁等;

3 设计注意事项
3.1 范式规范;
第一范式:对属性的原子性,要求属性具有原子性,不可再分解;
第二范式:对记录的唯一性,要求记录有唯一标识,即实体的唯一性,即不存在部分依赖;
第三方式:对字段的冗余性,要求任何字段不能由其他字段派生出来,即不存在传递依赖。

3.2 根据范式规范设计满足需求的表结构后,再根据业务场景优化;
1 冷热数据分表;
经常更新的数据字段,不经常更新的字段新建一张表;

2 数据量大垂直分割;
数据多,根据日期或业务id分表;
如果业务上只使用最近几日的数据,可以不用分表,只需要保留最近的数据;
(怎么保留近几日的数据有哪些方案呢,后面文章再讲)

3 索引设计;
索引类型的选择,唯一,普通,组合索引;
字段太长,限制索引的长度;
查询条件字段建索引,设置为非null避免索引失效;
索引数据类型的选择tree和hash;
索引相关的内容挺多的后面单独讲。

4 业务字段冗余来减少表关联;
反范式设计就是加冗余字段,改动概率比较小字段适合加冗余字段,减少关联多表查询。

5 选择合适的字段类型;
id的选择:自增主键(使用bigint);UUID;雪花算法等;
数字类型:金额单位可以转为分,使用bigint类型;
日期:使用DATETIME, 而不是TIMESTAMP(TIMESTAMP 的上限值 2038年,时区转换性能问题) 和 INT 类型;
字符串:CHAR 和 VARCHAR 虽然分别用于存储定长和变长字符,有的业务是隐私信息,如密码、手机等信息需要加密考虑长度;
json:无须预先定义列,适用不经常更新的静态数据存储,可以使用索引,mysql8.0进行了优化;

6 字段长度根据业务设置;
字段类型应该根据所需存储的数据长度来选择
如果存储的值太大,建议字段类型修改为text,同时抽出单独一张表;

7 关联关系在业务层面约束,不要设置数据库外键;
外键约束缺点:增删改时每次检查约束的性能问题;数据库分割灵活性;约束检查时死锁死循环等;

8 每个表都需要添加通用字段,如主键,创建和更新时间,创建人等;

9 命名规范,不要用使用mysql的保留字段,字段注释写清楚,使用英文和驼峰或者下划线分割的方式让人见名知意。

总结:上面是个人开发中的总结,实际情况根据公司业务来定就行。另外对线上表的操作一定要谨慎,选择在业务低峰期进行操作,减少锁表的可能性等,有从库的话记得观察从库的同步情况防止主从同步延迟。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取多行文本内容,去掉首尾空格、去掉空字符串,解析为文本数组

核心代码 // 获取多行文本内容,去掉首尾空格、去掉空字符串,解析为文本数组 getMultiLineTexts(textareaValue) {return textareaValue.split("\n").map((v) > v.split("\t").join("").trim()).filter((v, i, ar) &g…

@RabbitListener 注解详解

前言: RabbitListener 注解是 Spring AMQP 提供的注解,用于简化 RabbitMQ 消息监听器的创建,我们在方法上添加 RabbitListener 注解,就可以将方法注册为消息监听器,监听 RabbitMQ 的消息,本篇我们来分析一…

数据库的操作:SQL语言的介绍

一.前言 SQL是一种结构化查询语言。关系型数据库中进行操作的标准语言。 二.特点 ①对大小写不敏感 例如:select与Select是一样的 ②结尾要使用分号 没有分号认为还没结束; 三.分类 ①DDL:数据定义语言(数据库对象的操作(结…

std::atomic::fetch_add使用

fetch_add是一个原子操作,这个操作获取一个原子类型的当前值,将给定的递增值添加到这个原子值,然后返回原始的未递增的值。 将val添加到这个原子值中,并返回操作前的值。 整个操作是原子性的(原子性的读-修改-写操作&a…

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:error是设置我们失败的logo 设置的文字上…

I/O复用之 epoll使用详解 Linux编程

epoll 是 Linux 内核提供的一种用于多路复用 I/O 事件通知的机制,专为高效处理大量并发连接而设计。它被广泛应用于网络服务器和高性能应用中,主要用于监控多个文件描述符(如套接字、管道、文件等)上的事件(可读、可写…

MyBatis ——在java层面对MySQL数据库进行操作

目录 MyBatis 是一款优秀的 持久层框架,用于简化JDBC(java操作数据库)的开发; 使用MyBatis 查询所有用户数据的过程 Lombok是一个实用的]ava类库,能通过注解的形式 简化 JavaBean的代码 注解: 引入Myb…

【Leetcode152】乘积最大子数组(动态规划)

文章目录 一、题目二、思路三、代码 一、题目 二、思路 (0)读懂题意:题目的“连续”是指位置的连续,而不是说数字的连续,这是个大坑。 (1)确定状态:定义两个状态来记录当前子数组的…

Python 爬虫项目实战(一):爬取某云热歌榜歌曲

前言 网络爬虫(Web Crawler),也称为网页蜘蛛(Web Spider)或网页机器人(Web Bot),是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓…

MySQL笔记2(DQL查询语言【条件、分组、排序、限制、子查询、左右连接、内连接、联合查询】)

DQL数据查询语言与项目高级查询实战 先安装数据库并创建一个库 并创建以下数据 /*创建部门表*/CREATE TABLE dept( deptnu INT PRIMARY KEY comment 部门编号, dname VARCHAR(50) comment 部门名称, addr VARCHAR(50) comment 部门地址 );/*某个公司的员工表*/ CREATE TABLE…

Python闭包示例代码

代码示例: def outer_function(x):def inner_function(y):return x yreturn inner_functionclosure_example outer_function(5) result closure_example(3) # 输出为 8在这个示例中,outer_function 是一个包含内部函数的闭包。让我们逐步分析它的工…

金融业开源技术 术语

金融业开源技术 术语 1 范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

安全设备类型

一、隔爆型 隔爆型定位设备是将可能产生火花、电弧和危险温度的零部件都放置在一个隔爆外壳内。当内部发生爆炸时,外壳能够承受爆炸压力而不损坏,并且不会使内部爆炸传播到周围的爆炸性环境中。隔爆型产品通常比较坚固耐用,但相对来说体积和重…

「ComfyUI」比 joy_caption 更好用的提示词反推模型!

前言 距离我们上次介绍 joy_caption 还没几天呢,这就又出新模型来与 joy_caption 一争高下了。 今天我们要介绍的是:Florence-2-X-PromptGen-v1.5,是在 Florence-2 的基础上进行精细调优的一款高级图像标注工具,专门为生成和标注…

Flutter框架——2.状态-路由-包-资源

文章参考了Flutter中国开源项目发起人杜文(网名wendux)创作的一本系统介绍Flutter技术的中文书籍《Flutter实战第二版》,网址:第二版序 | 《Flutter实战第二版》 https://book.flutterchina.club/#第二版变化 文章目录 一、状态管…

【C#跨平台开发详解】C#跨平台开发技术之.NET Core基础学习及快速入门

1. C#与.NET的发展历程 C#是由Microsoft开发的现代编程语言,最初伴随着.NET Framework发布。随着技术的进步,特别是针对跨平台开发的需求,Microsoft推出了.NET Core,这是一个开源且跨平台的框架,支持Windows、macOS和…

项目实战 ---- 商用落地视频搜索系统(8)---优化(2)---查询逻辑层优化

目录 背景 技术衡量与方案 一种可实现方案 可实现方案及设计描述 可能存在的问题 一种创新实现方案 方案的改良设计 策略公式 优化的实现 完整代码 代码解释 异常场景的考量 处理方式 运行注意事项 运行结果 结果优化对比与解释 背景 在项目实战 ---- 商用落地…

发票真伪识别接口费用-发票真伪查验接口-发票验真示例

发票信息核验是一个重要的财务和会计过程,涉及到对发票上的信息进行验证,以确保其真实性和准确性。在数字化时代,这一过程企业通常想通过调用发票查验接口的方式实现自动化管理模式。 发票查验接口费用不同的服务提供商会有不同的收费标准&a…

利用数据分析提升SEO排名的7种方法

我们都听过“大数据分析”这个词。科技让我们能够清晰地了解我们的活动和内容的表现——向我们提供了关于受众的宝贵信息,甚至可以精确到他们在Google和其他搜索引擎上使用的具体搜索词。 你已经在你的业务中使用数据分析了吗?如果是,你有利…

LeetCode 每日一题 2024/9/2-2024/9/8

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 9/2 3153. 所有数对中数位不同之和9/3 2708. 一个小组的最大实力值9/4 2860. 让所有学生保持开心的分组方法数9/5 3174. 清除数字9/6 3176. 求出最长好子序列 I9/7 3177. 求…