作为后端开发如何设计数据库系列文章(一)设计传统系统表结构

本篇为第一篇。讲解传统系统的表结构设计(Java开发)。

讲讲如何避免数据库设计的一些坑,方便后期的开发与维护。

以前经常能够看到,数据库范式,现在说数据库三大范式的少了。

三大范式我以前也很严格的弄过,但是后来发现,还是灵活好啊,为什么,业务变动太快了啊,按照范式来,结构变更顶不住。

下面我就说一说设计数据库表要注意的一些地方吧。我不是DBA,只是Java后端开发,以下是根据我的个人经验所得,至于能不能体会,看个人了。

外键、触发器

外键、触发器不要有。
有了外键、触发器,你会发现: 写代码不方便。 订正数据不方便。 迁移数据也麻烦。 总之,你要是坚持用,后续的坑等着你。

自增id

数据库表,一定要有id,而且要用自增id!
有些人喜欢用自定义的,用UUID或者其他七七八八的id,如果在架构设计,代码比较好的情况下,不会出啥大问题,但是一旦代码写的不行,极有可能就造成id重复之类的问题。
自增id另外还有一个好处,就是在数据迁移的时候,分页查询通过id来进行分页,速度会比传统分页快很多。

创建时间&修改时间

创建时间和修改时间这两个字段,每个表都要有! 注意,一定要用数据的时间戳,自动生成。不要通过代码去操作这两个字段。

有了这两个字段。你可以追溯到数据的时间点,创建和修改的时间点。极大方便你在某些情况下的排查数据问题。

创建人&修改人

建议每个表也有这两个字段。

还是和前面一个原因,出问题的时候可以追溯起因,否则遇上日志过久无法查看或者其他原因出现未知数据,都不知道数据怎么来的,需要花非常大的代价查看日志、代码等。

大文本字段

一列需要占很大空间的字段,一定要单独拎出来,不要和常用信息放一张表。

举个例子: 文章的信息和文章的内容,这一定要分成两个表。否则会给你的文章性能带来极大的挑战。因为很多情况下,查看文章列表,根本不需要查看到文章的内容。

表与表的关联

表与表之间的信息,用id进行关联,尽量不要有冗余的信息数据,否则你需要更新同一份信息的时候,需要更新多个地方。

但是在某些情况下,你确认信息不会经常变动,且该信息确实在两个表中都有会比较好,那么,放心的去冗余吧。但是注意,数据的更新用上事务。

单库单表单系统写原则

这个原则我自己想出来的,也就是说,数据库中的一张表,只能有一个系统对其进行写操作。 其他的系统如果想写这张表,那么经过调用这个系统的接口进行操作。

如果有多个系统写同一张表,可能带来的问题会很多。首先就是数据并发问题,其次就是事务问题,还有就是表结构变更问题,数据来源追溯问题等等。

如果谁有一张表数据想用多个系统来进行写,那肯定是想把团队拖垮。时间越久,债务越多!

总结

数据库设计,标准其实是在变的,不变的只是思想。

业务场景不同,实际需求不一样,不会存在一样的设计,但是通用的思想都是一样的,为业务服务,为未来服务,方便维护,方便扩展。

这条路很长,只能慢慢在路上体会了。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

 

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

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

相关文章

常见字典用法集锦及代码详解

目录前言字典的简介1. 字典对象1.1 Add 方法1.2 Exists 方法1.3 Keys 方法1.4 Items 方法1.5 Remove 方法1.6 RemoveAll 方法2. 实例2.1 实例1. 普通常见的求不重复值问题2.1.1 问题2.1.2 实例代码2.1.3 代码详解2.2 实例2 求多表的不重复值问题2.2.1 问题2.2.2 代码2.2.3 代码…

企业微信小程序_集成腾讯地图实现精准定位考勤打卡

开源项目地址:https://gitee.com/gblfy/tx-position-check-in 关于微信小程序集成腾讯地图详情,可以参考:https://blog.csdn.net/weixin_40816738/article/details/122519497

18个PPT,29个提问解答,都在这儿啦!

4月25-26日,全球首个 Apache 顶级项目在线盛会 Flink Forward 中文精华版重磅开播,聚焦 Alibaba、 Google、AWS、Uber、Netflix、DellEMC、微博、滴滴等各大互联网公司实时计算的经典场景和业务故事,由 Flink 核心贡献者们对 19 个优质 talk …

CSDN公众号新功能上线,居然还能搜出小姐姐???(文末有福利)

为了给各位打工人更好的搜索体验CSDN总是在学习新技能这次CSDN公众号又给大家带来了一项全新的搜索技能在CSDN旗下的公众号内回复消息就能自动回复想搜索的内容啦小编来给大家演示一下,在公众号内输入“mysql安装教程”,就能得到CSDN全站内关于mysql安装…

使用Blink SQL+UDAF实现差值聚合计算

本案例根据某电网公司的真实业务需求,通过Blink SQLUDAF实现实时流上的差值聚合计算,通过本案例,让读者熟悉UDAF编写,并理解UDAF中的方法调用关系和顺序。 感谢军长在实现过程中的指导。笔者水平有限,若有纰漏&#xf…

VBA - 字典实例集锦

目录 前言1. 按接收日期批量不重复编号2. 用字典实现3个ComboBox关联的三级下拉3. 填表4. 二级字典嵌套-字典统计不重复计次5. 三级字典嵌套-根据机型汇总统计数量6. 二级字典嵌套-汇总调研数据7. 字典法去重7.1 对表格中的一列数据去重7.2 对一维数组去重8. 将字典输出到工作表…

如何在SQL Server 2019中添加数据敏感度分类的命令

作者 | Jordan Sanders翻译 | 火火酱。责编 | 晋兆雨头图 | CSDN付费下载于视觉中国为了确保数据库安全性和完整性,数据库管理员日常需要运行多种操作。因此,无论在何种情况下,我们都不能忽视数据库中敏感数据的重要性。在本文中,…

支撑数千家天猫商家CRM业务,数云高弹性数据库如何做

“数据,已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素。人们对于海量数据的挖掘和运用,预示着新一波生产率增长和消费者盈余浪潮的到来”。-----麦肯锡 基于互联网和大数据和时代背景,用户在互联网上留下更多的印记…

vue中forEach循环的使用

//data为集合 data.forEach(function(item, index) {//item 就是当日按循环到的对象//index是循环的索引,从0开始 })//定义班次详细数组var bcglxiangxiList new Array();//定义班次详细对象var bcxiangxi {};//循环传递的参数bcglXiangXiListParam.forEach(ele…

全国高速恢复收费!阿里云:自由流“3大特色能力”使能智慧之路

5月6日,全国高速公路正式恢复收费。ETC普及优化程度、高速自由流收费模式等成为热点话题。随着取消省界高速公路收费站和全国ETC的普及,极大提升高速公路网通行效率,有效降低物流运输成本,减少收费站“堵车”现象,高速…

JavaScript 中,break , continue , return 的区别

break , continue , return 的区别 break :结束当前的循环体(如 for、while)continue :跳出本次循环,继续执行下次循环(如 for、while)return :不仅可以退出循环,还能够…

移动云11.11,钜惠High不停!

一年一度的双十一又来啦全民购物车已开起来!然而复杂的优惠规则催生一大批通宵达旦看直播的定金人和尾款人对这些套路,移动云统统Say NO作为一朵有服务温度的“云”,让优惠简单点让用户买想买的东西,省该省的钱五重惊喜&#xff0…

设计大数据量表结构

上篇文章讲解了传统数据库的一些设计注意点。 本篇为第二篇,在大数据量的情况下,如何去提前设计这个表结构,来达到一个比较好的效果。对于团队,对于后续的维护和扩展都带来更大的便利。 自增id 自增id还是可以有,但是…

去除字符串最后一位的几种方法

1.使用slice方法 /*** slice(start,end)* start 要截取的字符串的起始下标 如果为负数从后面开始算起 -1指的是字符串的最后一位* end 要截取的字符串的结尾下标 如果为负数从后面开始算起 -1指的是字符串的最后一位* start 和 end 都是下标*/let str "122889," str…

VBA中的字符串处理

目录 1 VBA中的字符串2 VBA中处理字符串的函数2.1 比较字符串2.1.1 比较运算符2.1.2 StrComp函数2.2 转换字符串2.2.1 StrConv函数2.2.2 Str函数2.2.3 CStr函数2.3 创建字符串2.3.1 Space函数2.3.2 String函数2.4 获取字符串的长度2.5 格式化字符串2.6 查找字符串2.6.1 InStr函…

使用Blink CEP实现差值聚合计算

使用Blink SQLUDAF实现差值聚合计算介绍了如何使用Blink SQLUDAF实现实时流上的差值聚合计算,后来在与付典就业务需求和具体实现方式进行探讨时,付典提出通过CEP实现的思路和方法。 本文介绍通过CEP实现实时流上的差值聚合计算。 感谢付典在实现过程中的…

企业微信小程序_授权登录接口获取用户userid

文章目录一、前置知识1. 阅读 企业微信小程序开发文档2. 企业微信小程序登录流程3. 微信小程序区别二、前端部分2.1. 调用登录接口2.2. 请求后端接口2.3. 项目源码三、后端部分3.1. yml配置3.2. 获取用户信息接口3.3. 获取token3.4. 工具类3.5. vo对象四、调试部分4.1. 模式切换…

我输给了一个 25 岁的男人

未来的你:小伙计你好,我是 10 年后的你,刚穿越回来,还是热乎的。现在的你:Are you sure?大哥,从你那憔悴的神色里可以看出日夜颠倒的作息和毫无爱情发酵的灵魂,随便喊个人来看看,咱…

阿里云公共DNS安全传输服务介绍(DoH/DoT)

概述 阿里公共DNS致力于为广大的互联网用户提供快速、稳定和安全的DNS解析。然而传统的DNS查询和应答采用UDP和TCP明文传输,存在网络监听、DNS劫持、中间设备干扰的风险: 网络监听风险:即便用户采用HTTPs加密的方式访问站点,DNS…

Excel VBA - 文件及目录操作

目录 一. 文件处理1.1 Name 语句1.2 FileCopy 语句1.3 Kill 语句1.4 GetAttr 函数1.5 SetAttr 语句1.6 FileLen 函数1.7 FileDateTime 函数二. 目录处理2.1 CurDir 函数2.1 ChDir 语句2.3 ChDrive 语句2.4 Dir 函数2.5 MkDir 语句2.6 RmDir 语句三. 文件读写3.1 Open 语句3.2 C…