mysql表设计

表设计流程:
(1)分库:根据模块分
(2)分表:根据流程分表
(3)冗余字段和视图设计
21个表设计准则

(1)命名规范
account_no,account_number
表名用t_user,视图用v_i,字段名:表名_字段名
外键:表名_字段名$1
主键索引:pk_name,唯一索引:uk_name,一般索引:idx_name
(2)选择合适的字段类型
选小的类型:tinyint,smallint,int,bigint
小数,金额选择:decimal,不要使用float和double。
TABLE invoices (
invoice_id INT PRIMARY KEY,
amount DECIMAL(10, 2)
);

在上述示例中,amount列可以存储最多10位数字,其中2位用于小数部分。
精确度和舍入:DECIMAL类型确保数据的精确度,不会导致浮点数的精度问题。任何插入或计算的结果都将按照指定的精度进行四舍五入。
存储的字符串长度相似,尽量使用char定长。
varchar不预先分配空间,长度不要超过5000,如果过大,建议修改类型为text,并且单独抽出一个表,用外键对应。
在一张表中,varchar指定了最大长度的和不能超过65535,超过使用text。
尽管分配了最大长度的内存,但VARCHAR列实际上只会占用实际存储的字符数加上一些额外的字节用于存储长度信息。这意味着如果您在
VARCHAR(50)列中存储了一个只有10个字符的字符串,它只会占用10个字符的存储空间,而不会占用50个字符的存储空间。
在MySQL和许多其他关系型数据库管理系统中,TEXT是一种用于存储长文本数据的数据类型。TEXT数据类型适用于存储大块文本,例如文章、评论、日志、文章内容等等。以下是关于TEXT数据类型的一些关键信息:
1.数据类型分类
:TEXT是一种文本数据类型,通常被分为不同的子类型,根据最大允许的文本长度,可以分为以下几种子类型:

  • TINYTEXT
  • TEXT
  • MEDIUMTEXT
  • LONGTEXT
    2.存储方式
    :TEXT列的数据以二进制形式存储,因此可以容纳各种字符,包括文本、二进制数据或格式化文本,如XML或JSON。
    3.用途
    :TEXT通常用于存储大段的自由文本,例如文章内容、博客帖子、评论等,以及需要较长文本描述的应用程序。
    4.性能考虑
    :由于TEXT列存储大量数据,因此在查询和检索大型TEXT列的数据时可能会对性能产生影响。在处理大文本数据时,您应该考虑合理的索引策略以提高查询性能。
    5.示例
    :以下是一个创建包含TEXT列的表的示例:
    sqlCopy codeCREATE TABLE articles (
    article_id INT PRIMARY KEY,
    title VARCHAR(255),
    content TEXT
    );

在上述示例中,content列用于存储文章的内容,可以容纳大段文本。
总之,TEXT是一种用于存储长文本数据的数据类型,它适用于需要存储大块文本的情况,如文章、评论等。根据您的需求,可以选择不同子类型的TEXT,以满足文本长度的要求。
(3)要选择毫无意义而独立不重复的数字作为主键
比如Auto_increment或者UUID,雪花算法生成的主键。
(4)字段长度选择2的幂次
(5)核心业务不使用物理删除,而是使用逻辑删除
(6)给表添加通用字段
id(主键),create_time,modified_time/update_time,version(用于乐观锁,非必须),remark(备注,非必须),modified_by(修改人,非必须),creator(创建人,非必须)
(7)表中列太多会影响性能,不超过20个
(8)尽量使用not null
(9)考虑哪些列需要加索引
一个表单索引不超过5个,过多会降低写速度。
加在区分度高的列。
(10)三大范式的合理使用
第一范式:字段的原子性
第二范式:所有列都和主键直接相关
第三范式:字段没有冗余,不存在传递依赖。
我们可以通过违反第三范式,添加和主键不是直接相关的冗余数据,从而减少表的数量。
比如:手机,单价,数量,总金额,总金额能通过单价和数量算出来。
(11)不做外键关联,外键概念需要在应用层解决。
(12)使用innodb
(13)使用utf8字符集
(14)枚举需要注释清楚
(15)时间类型的选择:
date,2023-2-2
time,8:30:23
datetime:2023-2-2 8:30:23,和时区无关
timestamp:和时区有关
year:2012
优先选择datetime
(16)不建议使用存储过程和触发器
(17)将多对多表关系,修改为一对多
通过将两个表变为三个表,从而将多对多改为一对多。
比如:学生和课程。通过新建一个学生-课程表,外键关联学生id和课程id,从而实现一对多。
(18)提前考虑分库分表
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

gorm day8

gorm day8 gorm Has Many关系gorm Many To Many关系 gorm Has Many关系 Has Many 在GORM(Go的一个对象关系映射库)中,“Has Many” 关系表示一个实体与另一个实体之间的一对多关系。这意味着一个实体(我们称之为"父"…

【闲谈】开源软件的崛起与影响

随着信息技术的快速发展,开源软件已经成为软件开发的趋势,并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点,使得越来越多的企业和个人选择使用开源软件,促进了软件行业的繁荣。然而,在使用开源软件的过…

软考 系统分析师系列知识点之信息系统战略规划方法(10)

接前一篇文章:软考 系统分析师系列知识点之信息系统战略规划方法(9) 所属章节: 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 7.4.6 战略栅格法 战略栅格(Strategic Grid,SG)法是…

基于CU,PO,RD,IPO矩阵图分析数据资产-自创

术语 数据资产:数据资产是具有价值的数据资源。没有价值的数据资源,通过采集,整理,汇总等加工后,也可以成为具有直接或间接价值的数据资产。传统企业逐渐数字化转型,尤其是互联网企业,都十分重视…

Linux标准IO库介绍

Linux 标准 I/O(Standard I/O)库提供了一组函数,用于进行高级别的文件输入和输出操作。它建立在底层文件 I/O 系统调用之上,为开发者提供了更方便、更高级别的文件处理方式。以下是一些常用的 Linux 标准 I/O 库函数: …

C#中implicit和explicit

理解: 使用等号代替构造函数调用的效果以类似重载操作符的形式定义用于类型转换的函数前者类型转换时候直接写等号赋值语法,后者要额外加目标类型的强制转换stirng str -> object o -> int a 可以 int a (int)(str as object)转换通过编译,但没有转换逻辑所以运行会报错…

小程序适配IOS底部小黑条

1、IOS底部小黑条高34px进行适配 <view class"container-px" style"padding-bottom: {{isIOS ? 68rpx : 0}};"><view class"container-wrap"></view> </view>2、使用css 兼容ios<11.2 padding-bottom: constant(s…

[NOIP2004]不高兴的津津 -- --- 牛客网

题目描述 津津上初中了。妈妈认为津津应该更加用功学习&#xff0c;所以津津除了上学之外&#xff0c;还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴&#xff0c;而且上得越久就会越不高兴。假设…

【LeetCode】455. 分发饼干(简单)——代码随想录算法训练营Day31

题目链接&#xff1a;455. 分发饼干 题目描述 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1…

C语言=和==如何区分?

一、问题 这两个符号&#xff0c;在不严格的情况下&#xff0c;都可以读成“等于”&#xff0c;但是两个“等于”在程序中有完全不同的⽤法。错误使⽤将导致程序⽆法得出正确的结果&#xff0c;⽽且有时没有错误提⽰。 那么&#xff0c;怎样正确区分这两个运算符呢&#xff1f…

《区块链公链数据分析简易速速上手小册》第3章:区块链数据结构(2024 最新版)

文章目录 3.1 区块和交易的结构3.1.1 基础知识3.1.2 重点案例&#xff1a;构建简单的区块链3.1.3 拓展案例 1&#xff1a;验证交易签名生成密钥对签名交易验证签名完整的交易签名与验证演示 3.1.4 拓展案例 2&#xff1a;监听和解析区块链事件代币合约示例&#xff08;Solidity…

Android adb使用超级大全

Android adb使用超级大全 ADB&#xff0c;即Android Debug Bridge&#xff0c;是一款强大的工具&#xff0c;对于Android开发/测试人员来说是不可或缺的&#xff0c;同时也是Android设备玩家的好玩具。本文将详细介绍ADB的使用方法。 ADB的基本用法如下&#xff1a; 命令语法…

Pb协议的接口测试

Protocol Buffers 是谷歌开源的序列化与反序列化框架。它与语言无关、平台无关、具有可扩展的机制。用于序列化结构化数据&#xff0c;此工具对标 XML &#xff0c;支持自动编码&#xff0c;解码。比 XML 性能好&#xff0c;且数据易于解析。更多有关工具的介绍可参考官网。 P…

Django form组件 - 神奇的后端直接渲染HTML

前言 之前在HTML页面中利用form表单向后端提交数据时会写一些获取用户输入的标签并且使用form标签将其包裹起来。并且很多场景下都需要对用户的输入做校验&#xff0c;比如用户输入的长度和格式等&#xff0c;如果用户输入的有误就需要在页面上相应的位置显示相应的错误信息。…

JavaScript学习之旅8------深入理解JavaScript:作用域与词法环境解析

目录 写在开头1. JavaScript作用域简介1.1. 定义作用域1.2. 作用域链1.3. 全局作用域1.4. 局部作用域1.5. 块级作用域1.6. 作用域和变量生命周期 2. 词法环境与闭包2.1. 词法环境2.2. 闭包2.3. 闭包的工作原理2.4. 闭包的应用实例2.5. 闭包的注意事项 3. 作用域与变量提升3.1. …

NOIP2003.加分二叉树

题目链接 题目描述 设一个n个节点的二叉树tree的中序遍历为&#xff08;l,2,3,…,n&#xff09;&#xff0c;其中数字1,2,3,…,n为节点编号。每个节点都有一个分数&#xff08;均为正整数&#xff09;&#xff0c;记第j个节点的分数为di&#xff0c;tree及它的每个子树都有一个…

RBF神经网络中的RBF的英文全称是什么,是用来干什么的?

问题描述&#xff1a;RBF神经网络中的RBF的英文全称是什么&#xff0c;是用来干什么的&#xff1f; 问题解答&#xff1a; RBF神经网络中的RBF是径向基函数&#xff08;Radial Basis Function&#xff09;的缩写。径向基函数是一种在机器学习和模式识别中常用的函数类型&…

数据库从入门到精通(一)数据库基础操作

mysql数据库基础操作 cmd下启动mysql数据库操作命令数据库重要的删除操作数据库增删改查操作插入数据更新数据删除数据查询数据查询指定记录in查询满足指定范围之内的条件记录not in查询不在指定范围之内的条件记录带between and 的范围查询带like的字符匹配查询(d%以d开头,%d以…

猫头虎分享已解决Bug || SyntaxError: Unexpected token o in JSON at position 1 ‍

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

手动下载spacy的en_core_web_sm模型

手动下载 首先&#xff0c;用下面连接下载模型。我下载了 .tar.gz 格式。 然后提取它并通过指定所需子文件夹的路径将其加载到代码中。为了确保路径正确&#xff0c;您应该进入包含 config.cfg 文件的文件夹。 https://github.com/explosion/spacy-models/releases 例子代码…