前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL库表设计小技巧

MySQL库表设计小技巧

作者头像
MySQL技术
修改于 2020-05-19 09:52:06
修改于 2020-05-19 09:52:06
2.8K00
代码可运行
举报
文章被收录于专栏:MySQL技术MySQL技术
运行总次数:0
代码可运行

前言:

在我们项目开发中,数据库及表的设计可以说是非常重要,我遇到过很多库表设计比较杂乱的项目,像表名、字段名命名混乱、字段类型设计混乱等等,此类数据库后续极难维护与拓展。我一直相信只有优秀的库表设计才能发挥出MySQL最大的性能,前面有篇文章也分享了数据库的使用规范,本篇文章主要讲几个库表设计的小技巧,希望对大家有所启发。

1.int类型的选用

整型字段类型包含 tinyint、smallint、mediumint、int、bigint 五种,占用空间大小及存储范围如下图所示:

存储字节越小,占用空间越小。所以本着最小化存储的原则,我们要尽量选择合适的整型,下面给出几个常见案例及选择建议。

  • 根据存储范围选择合适的类型,比如人的年龄用 unsigned tinyint(范围 0~255,人的寿命不会超过 255 岁);海龟就必须是smallint,但如果是太阳的年龄,就必须是int。
  • 若存储的数据为非负数值,建议使用 UNSIGNED 标识,可以扩大正数的存储范围。
  • 短数据使用 TINYINT 或 SMALLINT,比如:人类年龄,城市代码。
  • 存储状态变量的字段用 TINYINT ,比如:是否删除,0代表未删除 1代表已删除。
  • 主键列,无负数,建议使用 INT UNSIGNED 或者 BIGINT UNSIGNED;预估字段数字取值会超过 42 亿,使用 BIGINT 类型。

下面给出建表语句示范:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,下面用一张表展示下二者的区别:

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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

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)
3.存储IP值

IP值一般使用char或varchar进行存储,但是当进行查找和统计时,字符类型不是很高效。MySQL数据库内置了两个IP相关的函数INET_ATON()、INET_NTOA(),可以实现 IP 地址和整数类型的转换。转换后使用可以INT UNSIGNED 来存储IP,转换后的数字是连续的,提高了查询性能,占用空间更小。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `tb_ip` (
  `increment_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `name` varchar(100) NOT NULL COMMENT '姓名',
  `inet_ip` int(10) unsigned NOT NULL COMMENT 'IP',
  PRIMARY KEY (`increment_id`),
  KEY `idx_inet_ip` (`inet_ip`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ip测试表';

# 插入数据
insert into `tb_ip` (`name`,`inet_ip`) values 
('wang',INET_ATON('192.168.0.1')),('lisi',INET_ATON('192.168.0.2'));

# 相互转换
select INET_ATON('192.168.0.1');
select INET_NTOA(3232235521);

总结:

本篇文章分享了几个库表设计及字段类型选取的建议。这些案例都是常常见到的场景,对于int类型及时间类型的选取,本文也根据常见场景给出相关建议,希望大家读完这篇文章有所收获。其实库表设计是件复杂的事情,需要在项目前期多方人员共同规划讨论。还是那句话,只有优秀的库表设计才能发挥出MySQL最大的性能。

— END —

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
黄仁勋、扎克伯格巅峰对谈实录:万字长文揭秘Meta的未来AI图景
作为拥有600,000块H100的男人,在AI界占据着开源制高点的扎克伯格会如何看待AI的未来?
小腾资讯君
2024/07/30
1510
经济学人万字总结17年AI领域并购趋势:谷歌领跑,人才竞争白热化
大数据文摘作品 编译:新知之路、Niki、笪洁琼、Aileen 截至2017年12月,全球完成AI领域的合并与收购额高达213亿美元,比2015年多出26次交易。充斥着万众期待、大肆宣传与激烈竞争的AI领域,如同当年加州淘金热潮般蓬勃爆发。 无论是在好莱坞电影或是新闻,2017年都充斥着无数人工智能(AI)与人类思维博弈的热议。而摆在眼前的竞争并不只是在人与电脑间,而更多存在于不断疯狂烧钱、投资并寄期望于成为全球AI领导者的科技大佬之间。 世界上最大的科技公司,无论国内或者国外,比如Alphabet(谷歌的
大数据文摘
2018/05/24
5900
Facebook开源NLP建模框架PyText
Facebook AI Research宣布推出PyText的开源版本,PyText是一个NLP建模框架,每天为Facebook及其应用程序系列用户提供超过10亿次预测。
AiTechYun
2018/12/29
6440
Facebook开源NLP建模框架PyText
Facebook全年成果总结:我们在AI领域的行动从未停止
Facebook在2018年过的并不好,一连串的数据泄露丑闻打的小扎和他同事措手不及。
大数据文摘
2019/01/23
6920
Facebook全年成果总结:我们在AI领域的行动从未停止
Facebook AI 背后的神秘组织:FAIR + AML + Product Groups
Yann LeCun 是 Facebook 人工智能实验室负责人,卷积神经网络发明者。面对 Google 的 AlphaGo,他最近谈到了 Facebook 的人工智能布局,并把组织结构定义为以下架构: AI at Facebook = FAIR + Applied Machine Learning + Product Groups 即包含了: 1.FAIR,Facebook 人工智能实验室 2.Applied Machine Learning,应用机器学习部门 3.Product Groups,产
新智元
2018/03/15
1.6K0
Facebook AI 背后的神秘组织:FAIR + AML + Product Groups
动态 | Facebook 人工智能大揭秘:AI 如何变成这家社交巨头不可或缺的部分?
AI科技评论按:本文作者为 Backchannel 的 编辑 Steven Levy,AI科技评论编译发布。 当被问及是否想要用人工智能领导全球最大的社交网站时,Joaquin Quiñonero Candela 犹豫了。 犹豫不是因为这个西班牙裔又自诩为“机器学习人”的科学家没有意识到人工智能会对 Facebook 提供巨大帮助。自从2012年 Candela 加入 Facebook 以来,他一直负责用机器学习的方法改革公司的广告运营,让广告投放更加具有相关性和有效性。更重要的是,他让团队中的工程师在
AI科技评论
2018/03/12
8330
动态 | Facebook 人工智能大揭秘:AI 如何变成这家社交巨头不可或缺的部分?
专访Meta CTO:AI已是XR杀手应用,LLM开源社区竞争没有输家
他针对Meta如何将AI和XR行业融合在一起,以及Meta对于开源AI社区的竞争和发展,AI人才的流动聊了很多。
新智元
2023/12/28
1910
专访Meta CTO:AI已是XR杀手应用,LLM开源社区竞争没有输家
Facebook开源多款AI工具,支持游戏、翻译等
近日,Facebook 在年度开发者大会 F8 上宣布开源多款 AI 工具,除了 PyTorch、Caffe 等深度学习框架之外,此次开源的还包括 DensePose(可用于人体姿态估计)、Translate(可翻译 48 种语言)、ELF(可通过游戏来教机器推理)等诸多 Facebook 内部使用的库和模型。
AI科技大本营
2018/07/23
9240
Facebook开源多款AI工具,支持游戏、翻译等
【重磅】深入Facebook 两大AI核心部门,欲用开放垄断市场
【新智元导读】Facebook的“十年路线图”,人工智能成为重中之重。作为“后来者”的Facebook凭何赶超谷歌和微软等在人工智能已经遥遥领先的公司?本文深入Facebook人工智能最核心的两个部门:LeCun的FARI和Candela的AML,一个负责研究,一个负责应用,从某种程度上代表了学术和产业的矛盾,LeCun 如何平衡?文章认为,开放或封闭是Facebook能否在AI上获得成功的一个关键,更多的开源才会带来更多的人才。 Facebook的公司文化盛产口号,不少还都挺流行的,比如扎克伯格和其他高管
新智元
2018/03/22
9540
【重磅】深入Facebook 两大AI核心部门,欲用开放垄断市场
7位数年薪抢人,DeepMind与Facebook人才大战又开火
在加拿大蒙特利尔的一座共享办公大楼里,一间角落办公室里遍布着满是代码的黑色大屏幕。显示器并排堆放着,一个挨着一个,对于Facebook AI实验室(FAIR)加拿大团队的20多名研究科学家和工程师来说,几乎没有足够的空间了。
新智元
2018/12/07
4820
和谷歌抢人,挖微软墙角,Facebook AI实验室5年逆袭之路
而从2013年12月10日对外正式宣布成立AI实验室FAIR至今,Facebook真真正正做AI正好5年时间了。这家在科技创新上素来以“落后、跟随”之姿发展的公司,如今也正在期待着凭借AI再创互联网社交传奇。
镁客网
2018/12/25
4390
万字长文:详解现代AI和深度学习发展史
来源:新智元 本文约9000字,建议阅读10+分钟 本文带你了解人工智能理论起源和深度学习的演变史。 「人工智能」一词,首次在1956年达特茅斯会议上,由约翰麦卡锡等人正式提出。 实用AI地提出,最早可以追溯到1914年。当时Leonardo Torres y Quevedo构建了第一个工作的国际象棋机器终端游戏玩家。当时,国际象棋被认为是一种仅限于智能生物领域的活动。 至于人工智能理论,则可以追溯到1931-34年。当时库尔特·哥德尔(Kurt Gödel )确定了任何类型的基于计算的人工智能的基本限
数据派THU
2023/03/29
1.3K0
万字长文:详解现代AI和深度学习发展史
万字长文详解:大模型时代AI价值对齐的问题、对策和展望
人工智能价值对齐(AI alignment)是关涉AI控制与AI安全的重要问题,随着人工智能的飞速发展和广泛应用,人工智能可能带来的风险和挑战也日益凸显,由此,“价值对齐”问题开始被广泛讨论和提及。针对当下AI价值对齐领域的重要问题和研究进展,本文将围绕以下四部分内容展开:首先介绍什么是AI价值对齐问题;其次探讨AI价值对齐存在哪些风险模型;继而展示价值对齐问题的可能解决思路或解决方案;最后将提及在价值对齐领域存在的讨论和争议,并展望人工智能价值对齐的未来。
小腾资讯君
2023/10/12
1K0
让机器理解语言的魔法师——揭秘Facebook语言技术小组
将照片翻译成语言、用户消息排序、虚拟助手和聊天机器人……Facebook 的「语言技术组」正在用人工智能改变 Facebook 用户与世界的交互方式。
IT阅读排行榜
2018/08/15
4620
让机器理解语言的魔法师——揭秘Facebook语言技术小组
Facebook AI副总裁:28亿用户,算力需求每年增长10倍,怎么跟的上!
Facebook 人工智能副总裁Jérôme Pesenti,首次在公开演讲中亮相,表达了对日益增长的、创建强大AI系统所需计算能力的关注。
新智元
2019/07/16
4950
Facebook AI副总裁:28亿用户,算力需求每年增长10倍,怎么跟的上!
人物 | Yann LeCun:让Facebook学会思考的人
选自BuzzFeed 作者:Alex Kantrowitz 机器之心编译 Yann LeCun 是深度学习研究领域内一个响当当的名字。作为 Facebook 人工智能研究团队(FAIR)的领导者,他正在帮助这家世界上最大的社交网络公司创造能够理解用户发布的文本、照片和视频等内容的人工智能。近日,美国著名网络新闻媒体 BuzzFeed 发布了一篇对 Yann LeCun 的专题特写文章,从人工智能的发展历史以及机器视觉、语音和更深层次的思考等角度对 Yann LeCun 的研究经历进行了描绘,其间也穿插
机器之心
2018/05/07
4590
人物 | Yann LeCun:让Facebook学会思考的人
成立 5 周年:一文览尽 Facebook 人工智能研究院历年重要成果
AI 科技评论按:五年前,Yann LeCun 等人创建了 Facebook 人工智能研究院 (Facebook AI Research,FAIR),试图通过开放的研究环境促进人工智能的发展,进而造福所有人——他们努力的目的是为了理解智慧的本质,以便创造真正意义上的智能机器。从那时起,FAIR 便不断发展壮大、做出成果,逐渐长成一个在多个国家均设有实验室的国际性研究组织,当中包括硅谷门罗公园、纽约、巴黎、蒙特利尔、特拉维夫、西雅图、匹兹堡和伦敦。在人工智能渐渐成为 Facebook 业务核心的当下,FAIR 也随之成为 Facebook 庞大人工智能架构的一部分,从基础研究到应用研究与技术开发,致力于人工智能研发的方方面面。
AI科技评论
2018/12/25
8290
成立 5 周年:一文览尽 Facebook 人工智能研究院历年重要成果
资源 | 从TensorFlow到PyTorch:九大深度学习框架哪款最适合你?
选自CIO 作者:Mitch De Felice 机器之心编译 参与:Jane W、黄玉胜 开源的深度学习神经网络正步入成熟,而现在有许多框架具备为个性化方案提供先进的机器学习和人工智能的能力。那么如何决定哪个开源框架最适合你呢?本文试图通过对比深度学习各大框架的优缺点,从而为各位读者提供一个参考。你最看好哪个深度学习框架呢? 现在的许多机器学习框架都可以在图像识别、手写识别、视频识别、语音识别、目标识别和自然语言处理等许多领域大展身手,但却并没有一个完美的深度神经网络能解决你的所有业务问题。所以,本文希望
机器之心
2018/05/07
1K0
资源 | 从TensorFlow到PyTorch:九大深度学习框架哪款最适合你?
【十年路线图】Facebook 帝国:AI、VR将成两大支柱
扎克伯格在F8年度开发者会议上发布了Facebook未来十年规划,人工智能与AR/VR成为其远景布局中的两大支柱。规划展示了工程 + 研究的取向,可以预计Facebook会通过一些工程类的落地项目,不
新智元
2018/03/20
1.2K0
【十年路线图】Facebook 帝国:AI、VR将成两大支柱
面对内容理解的准确性和效率问题,Facebook是这样利用自我监督技术的
AI 科技评论按,在各种社交平台上,经常会出现一些违规的内容,如恐怖视频、侮辱性的言语等。如何将这些内容识别出来并进行处理对平台健康良好的运作具有重大意义。近日,Facebook 人工智能研究院发表了一篇博文,探讨了这个问题。AI 科技评论编译整理如下文。
AI科技评论
2019/05/15
4050
面对内容理解的准确性和效率问题,Facebook是这样利用自我监督技术的
推荐阅读
黄仁勋、扎克伯格巅峰对谈实录:万字长文揭秘Meta的未来AI图景
1510
经济学人万字总结17年AI领域并购趋势:谷歌领跑,人才竞争白热化
5900
Facebook开源NLP建模框架PyText
6440
Facebook全年成果总结:我们在AI领域的行动从未停止
6920
Facebook AI 背后的神秘组织:FAIR + AML + Product Groups
1.6K0
动态 | Facebook 人工智能大揭秘:AI 如何变成这家社交巨头不可或缺的部分?
8330
专访Meta CTO:AI已是XR杀手应用,LLM开源社区竞争没有输家
1910
Facebook开源多款AI工具,支持游戏、翻译等
9240
【重磅】深入Facebook 两大AI核心部门,欲用开放垄断市场
9540
7位数年薪抢人,DeepMind与Facebook人才大战又开火
4820
和谷歌抢人,挖微软墙角,Facebook AI实验室5年逆袭之路
4390
万字长文:详解现代AI和深度学习发展史
1.3K0
万字长文详解:大模型时代AI价值对齐的问题、对策和展望
1K0
让机器理解语言的魔法师——揭秘Facebook语言技术小组
4620
Facebook AI副总裁:28亿用户,算力需求每年增长10倍,怎么跟的上!
4950
人物 | Yann LeCun:让Facebook学会思考的人
4590
成立 5 周年:一文览尽 Facebook 人工智能研究院历年重要成果
8290
资源 | 从TensorFlow到PyTorch:九大深度学习框架哪款最适合你?
1K0
【十年路线图】Facebook 帝国:AI、VR将成两大支柱
1.2K0
面对内容理解的准确性和效率问题,Facebook是这样利用自我监督技术的
4050
相关推荐
黄仁勋、扎克伯格巅峰对谈实录:万字长文揭秘Meta的未来AI图景
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验