刚参加工作的表弟问我如何设计一个表

文章目录

      • 以公司表模版为基础,确定表名,固定字段
      • 不要给字段或者表设置字符集
      • 用业务主键还是自增主键
      • 创建时间,更新时间要不要使用数据库默认的时间

表弟能问出这个问题,表哥是吃惊又欣慰。吃惊是年纪轻轻的小伙子竟然知道设计表的重要性,还知道来问表哥,欣慰的是表弟一直在思考,一直在进步!

先说说为什么设计表很重要,抽象这两个字经常出现在招聘的JD里,比如具备抽象能力,实际开发中我们也会听到领导说要设计要抽象,要不以后开发成本很高。而抽象后的映射到数据存储方面就是数据库表的设计,因此从表的设计里就可以看出来一个程序员对于当前业务的理解深度如何,抽象能力如何。接下来就来介绍设计一个表的思路

以公司表模版为基础,确定表名,固定字段

实际开发中,不要自己随便定义表字段名称等,可以先看看其他表是否有共同点,或者问leader有没有建表规范。
比如下面就是一个模版,模版中有几个注意点:

  • 表名,字段名,字段类型全小写,其余大写
  • 每个字段都要有注释
  • 自增主键,业务主键,创建时间,更新时间,逻辑删除为固定字段,每个表都有且字段名一致
CREATE TABLE `xx_xx_xx` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',`xx_xx_xx_id` bigint(20) NOT NULL COMMENT '业务主键',`xxx_xxx` varchar(32)  NOT NULL COMMENT '业务字段注释',`create_time` datetime NOT NULL COMMENT '创建时间',`update_time` datetime NOT NULL COMMENT '更新时间',`is_delete` bigint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记:0-未删除,1-删除',PRIMARY KEY (`id`),INDEX(`xxx_xxx`)
) COMMENT='xxx表';

不要给字段或者表设置字符集

一般来说变更数据库的SQL都会像代码一样提交到一个地方进行管理。统一管理的好处是可以溯源,迁移数据库时比较快,假设公司数据库要用阿里云产品切换到腾讯云产品,此时我们只要把同一管理的SQL执行一遍即可。

此时如果给每个字符集设置了字符集,可能就会导致一个同样的建表SQL在阿里云执行成功,在腾讯云执行失败,如果表多会增加很多工作量。

偷偷告诉你,不设置字符集,默认都是UTF-8,这是所有都支持的。

用业务主键还是自增主键

这个取决于表的业务,表是否需要和其他表关联,比如商品SPU表跟SKU表最好定义业务主键。如果不定义业务主键,那么在sku表里关联spu时,就没有什么业务含义。另外电商中常见的订单表,订单号中一般会包含下单的时间,这便于查看,看到订单号就知道是什么时候的订单,不需要查询数据库。

那么什么时候可以不用定义业务主键,用自增主键。假设场景是记录用户每天第一次登录的时间,此时这个记录表结构单一,只与用户表有关联关系,与其他表都没关系,此时可以不定义业务主键。

总之我觉得大部分情况下还是考虑业务场景,其实大部分公司的数据量都没有到要考虑性能的地步,一个字段的写入并不会影响太多的性能。

创建时间,更新时间要不要使用数据库默认的时间

这类时间是可以考虑使用的,好处有以下几点:

  1. 自动时间戳:不需要在代码中写入时间
  2. 减少出错:可以当作默认时间,保证正确

当然有一些特殊场景建议不要用默认时间函数:

  1. 时间需要修改计算
  2. 服务器涉及多个时区

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

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

相关文章

NeuroImage | 右侧颞上回在语义规则学习中的作用:来自强化学习模型的证据

在现实生活中,许多规则的获取通常需要使用语言作为桥梁,特别是语义在信息传递中起着至关重要的作用。另外,个体使用的语言往往具有明显的奖励和惩罚元素,如赞扬和批评。一种常见的规则是寻求更多的赞扬,同时避免批评。…

【翻译】Efficient Data Loader for Fast Sampling-Based GNN Training on Large Graphs

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 此内容为机器翻译的结果,若有异议的地方,建议查看原文。 机器翻译的一些注意点,比如: 纪元、时代 > epoch工人 > worker火车、培训、训练师 > train Effic…

c# 弹出背景透明图

1. 在窗体中添加 picturebox 控件 2. 在 picturebox 中添加 “png ” 背景透明图,或者GIF图,属性设置如下 3. 在窗体初始化中,添加如下代码 this.BackColor Color.LimeGreen; this.TransparencyKey Color.LimeGreen; 此功能可以用来展示…

只出现一次的数字Ⅱ

题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题解:对数组进行排序,排序后循环判断当前子元素与前后子元素是否相等,不相等即为只出现一次的数字 代码: public int singleNumber(i…

【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:vue项目本地开发完成后部…

一卷到底,大明哥带你横扫 Netty

上一个死磕 Java 专栏【死磕 NIO】(当然写的不是很好,争取今年将它重写一遍)是**【死磕 Netty】**的铺垫,对于我们 Java 程序员而言,我们在实际开发过程一般都不会直接使用 Java NIO 作为我们的网络编程框架,因为写出一套高质量的…

基于和声优化的BP神经网络(分类应用) - 附代码

基于和声优化的BP神经网络(分类应用) - 附代码 文章目录 基于和声优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.和声优化BP神经网络3.1 BP神经网络参数设置3.2 和声算法应用 4.测试结果:5.M…

内网渗透——隧道代理

文章目录 代理代理使用场景VPS建立隧道frpMSF木马生成监听开启frp服务端和客户端执行exe木马文件 代理 实验环境: 攻击机kali:192.168.188.133(NAT模式) 模拟的公网服务器(本机):10.9.75.239 …

.locked勒索病毒的最新威胁:如何恢复您的数据?

引言: 在数字化的时代,.locked勒索病毒代表了数字安全面临的极大挑战。这篇文章将深入探讨.locked勒索病毒的威胁本质,以及如何在数据被加密的情况下恢复,同时提供了关键的预防措施。数据的重要性不容小觑,您可添加我…

国家开放大学 模拟 试题 训练

试卷代号:21 刑法学(2) 参考试题 一、选择题(每小题的备选答案中至少有一个是正确的,请将正确答案的序号字母填入题目括号内。多选、少选均不得分。每小题3分,共21分) 1.王某驾车时不小心将李某撞至马路边沿上&…

kube-controller-manager和kube-scheduler不能正常启动

kube-controller-manager-k8s-worker01和kube-scheduler-k8s-worker01没有启动起来 原因: 解决:进入/etc/kubernetes/manifests 编辑 将镜像地址修改为 然后重启kubelet:systemctl restart kubelet.service

freefilesync文件同步软件

下载 下载链接 https://freefilesync.org/download.php 往下拉,看到下载的链接 下载windows版本 下载地址: https://freefilesync.org/download/FreeFileSync_13.0_Windows_Setup.exe 直接复制到浏览器中访问就能下载 安装 双击安装包,一路默…

Megatron-LM GPT 源码分析(二) Sequence Parallel分析

引用 本文基于开源代码 https://github.com/NVIDIA/Megatron-LM ,延续上一篇Megatron-LM GPT 源码分析(一) Tensor Parallel分析 通过对GPT的模型运行示例,从三个维度 - 模型结构、代码运行、代码逻辑说明 对其源码做深入的分析。…

zookeeper应用场景(二)

单机环境下可以利用jvm级别的锁,比如synchronized、Lock等来实现锁,如果是多机部署就需要一个共享数据存储区域来实现分布式锁 一、分布式锁实现方式 1、基于数据库实现分布式锁 可以用数据库唯一索引来实现 2、基于redis实现分布式锁 redis实现的分…

【Vue面试题二十六】、SSR解决了什么问题?有做过SSR吗?你是怎么做的?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:SSR解决了什么问题&…

回归预测 | MATLAB实现IBES-ELM基于改进的秃鹰搜索优化算法优化极限学习机的数据回归预测(多指标,多图)

回归预测 | MATLAB实现IBES-ELM 基于改进的秃鹰搜索优化算法优化极限学习机的数据回归预测(多指标,多图) 目录 回归预测 | MATLAB实现IBES-ELM 基于改进的秃鹰搜索优化算法优化极限学习机的数据回归预测(多指标,多图&a…

变分自动编码器 (VAE)02/2 PyTorch 教程

一、说明 在自动编码器中,来自输入数据的信息被映射到固定的潜在表示中。当我们旨在训练模型以生成确定性预测时,这特别有用。相比之下,变分自动编码器(VAE)将输入数据转换为变分表示向量(顾名思义&#xf…

python 练习--更新

1.判断一个列表中的数值是否全部小于某个数 方法一:利用if函数 (只要列表中有一个数字比大 就可以终止比较) n int(input("请输入需要比较的数字:")) arr1 [1,3,4,5,8] index 0 for i in arr1:if i > n:index 1continue…

服务器崩溃前的数据拯救实践

前言 在服务器的VMWARE ESXi系统环境中,我们经常需要创建虚拟机来运行各种应用程序。然而,服务器如果偶尔出现自动重启以及紫屏报错的问题,说明服务器内部出现了故障,一般情况下重启机器能够解决问题,但时间一长&…

[23] IPDreamer: Appearance-Controllable 3D Object Generation with Image Prompts

pdf Text-to-3D任务中,对3D模型外观的控制不强,本文提出IPDreamer来解决该问题。在NeRF Training阶段,IPDreamer根据文本用ControlNet生成参考图,并将参考图作为Zero 1-to-3的控制条件,用基于Zero 1-to-3的SDS损失生成…