MySQL数据库实战教程-73-表的设计经典设计方案
admin
2023-07-19 23:12:02
0

前言:
【MySQL数据库实战教程-73-表的设计经典设计方案】在我们项目开发中,数据库及表的设计可以说是非常重要,我遇到过很多库表设计比较杂乱的项目,像表名、字段名命名混乱、字段类型设计混乱等等,此类数据库后续极难维护与拓展 。我一直相信只有优秀的库表设计才能发挥出MySQL最大的性能,前面有篇文章也分享了数据库的使用规范,本篇文章主要讲几个库表设计的小技巧,希望对大家有所启发 。
1.int类型的选用整型字段类型包含 tinyintsmallintmediumintintbigint 五种,占用空间大小及存储范围如下图所示:

MySQL数据库实战教程-73-表的设计经典设计方案

文章插图
存储字节越小,占用空间越小 。所以本着最小化存储的原则,我们要尽量选择合适的整型,下面给出几个常见案例及选择建议 。
  • 根据存储范围选择合适的类型,比如人的年龄用 unsigned tinyint(范围 0~255,人的寿命不会超过 255 岁);海龟就必须是smallint,但如果是太阳的年龄,就必须是int 。
  • 若存储的数据为非负数值,建议使用 UNSIGNED 标识,可以扩大正数的存储范围 。
  • 短数据使用 TINYINT 或 SMALLINT,比如:人类年龄,城市代码 。
  • 存储状态变量的字段用?TINYINT ,比如:是否删除,0代表未删除 1代表已删除 。
  • 主键列,无负数,建议使用 INT UNSIGNED 或者 BIGINT UNSIGNED;预估字段数字取值会超过 42 亿,使用 BIGINT 类型 。
  • 下面给出建表语句示范:
    CREATE TABLE `tb_int` ( `increment_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT ‘自增主键‘, `stu_age` tinyint unsigned NOT NULL COMMENT ‘学生年龄‘, `is_deleted` tinyint unsigned DEFAULT ‘0‘ COMMENT ‘0:未删除 1:删除‘, `col1` bigint NOT NULL COMMENT ‘bigint字段‘, PRIMARY KEY (`increment_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘int测试表‘;2.时间类型的选用时间字段类型可以选用datetime和timestamp,下面用一张表展示下二者的区别:
    MySQL数据库实战教程-73-表的设计经典设计方案

    文章插图
    timestamp翻译为汉语即"时间戳",它是当前时间到 Unix元年(1970 年 1 月 1 日 0 时 0 分 0 秒)的秒数,占用4个字节,而且是以UTC的格式储存,它会自动检索当前时区并进行转换 。datetime以8个字节储存,不会进行时区的检索 。也就是说,对于timestamp来说,如果储存时的时区和检索时的时区不一样,那么拿出来的数据也不一样 。对于datetime来说,存什么拿到的就是什么 。下面给出几个常见案例及选择建议 。
  • 根据存储范围来选取,比如生产时间,保质期等时间建议选取datetime,因为datetime能存储的范围更广 。
  • 记录本行数据的插入时间和修改时间建议使用timestamp 。
  • 和时区相关的时间字段选用timestamp 。
  • 如果只是想表示年、日期、时间的还可以使用 year、 date、 time,它们分别占据 1、3、3 字节,而datetime就是它们的集合 。
  • 如果timestamp字段经常用于查询,我们还可以使用MySQL内置的函数FROM_UNIXTIME()UNIX_TIMESTAMP(),将日期和时间戳数字来回转换,转换后可以用 INT UNSIGNED 存储时间,数字是连续的,占用空间更小,并且可以使用索引提升查询性能 。下面给出示范建表语句及时间戳相关转换SQL:
    CREATE TABLE `tb_time` ( `increment_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT ‘自增主键‘, `col1` datetime NOT NULL DEFAULT ‘2020-10-01 00:00:00‘ COMMENT ‘到期时间‘, `unix_createtime` int unsigned NOT NULL COMMENT ‘创建时间戳‘, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间‘, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘修改时间‘, PRIMARY KEY (`increment_id`), KEY `idx_unix_createtime` (`unix_createtime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘time测试表‘;# 插入数据insert into tb_time (unix_createtime,create_time) values (UNIX_TIMESTAMP(now()),now());# 时间戳数字与时间相互转换select UNIX_TIMESTAMP(‘2020-05-06 00:00:00‘)select FROM_UNIXTIME(1588694400)

    相关内容

    热门资讯

    电... Tajima制版软件简明教程第一节 电脑绣花制版基础知识1. 设计编辑器和设计浏览器:花样编辑器是电...
    探... 简介:本文将探讨Inkscape的另一个扩展功能:用于刺绣设计的Ink/Stitch。字数:5721...
    经... 每一个成功的房地产经纪人都需要不断地碰壁、失败、再尝试。经纪人是永久的,而客户是暂时的。经纪人永远在...
    补... 【前言】补充一些昨天的配置列表中没有出现的缺失配置。对于喜欢大品牌的粉丝,我会给予一些考虑,就是多给...
    大... 据说…听说你进技术部的话会有前辈帮你做灯光的。听说你进技术部的时候,你的前辈会拿着斯坦尼康一直追着你...
    中... 中信证券:今年第二轮上涨行情将在二季度开启流动性总体宽松的环境下,政策对基本面的支持是市场的核心驱动...
    腾... 2017年8月28日,腾讯TGP平台(腾讯游戏平台)发布官方公告:TGP品牌升级为腾讯WeGame,...
    刷... 购物“扫脸”支付、“扫脸”解锁手机、进小区“扫脸”开门、坐高铁“扫脸”……如今,越来越多的事情可以通...
    异... 1.远程网络北瑞蒲公英推出了一款新型号X5Pro,将上一代X5的无线规格从AX1800升级到了AX3...
    建... 2023年9月1日,由达实智能主办的“协同创新,共创可体验智慧空间”第四期学习研讨会顺利召开,近百位...
    琼海订购贵金属投资骗局,商城订...   网上宣传的琼海订购APP炒贵金属能赚钱是真的?投资者在琼海订购APP上亏钱了该怎么办?琼海订购A...
    全新淘金APP为什么一直亏钱,...   全新淘金APP的现货订购是骗局?投资者该怎么追回自己的交易损失?现在网上各种投资软件,宣传的小投...
    从... 大一的时候就开始接触C语言的网络编程,socket,bind,listen,accpet,recv,...
    宝... 文字 | 秘诀我到闺蜜家做客,发现闺蜜正在拖地教宝宝学说话的软件,一岁的宝宝坐在角落的游戏垫上玩玩具...
    黑... 黑鸟自行车专业骑行服务APP天气越来越冷了,大部分骑行爱好者,尤其是北方的骑行爱好者,冬天里苦于户外...
    广... 背景:我在广东某三线城市一家小公司上班,公司成立于2012年,虽然各项福利都不错,但办公电脑从201...
    如... 1.如何使用遥控器?对准DVR面板,操作遥控器遥控器配置成功后,DVR 前面板状态灯变为绿色,再次按...
    中... 北京时间8月17日12时11分,捷龙一号运载火箭在酒泉卫星发射中心成功发射,以“一箭三星”的方式将三...
    R... 2020 年年中,Tech Video 体验了几款采用 16 英寸显示屏的游戏笔记本。当时我们判断,...
    茅... 茅台微信小程序现已上线咖啡产品微软向美国政府机构开放GPT-4大型模型加州神童 14 岁成为 Spa...