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

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

作者:渣一个 时间: 2021-02-05 09:43:11
渣一个 2021-02-05 09:43:11
【摘要】本篇为第一篇。讲解传统系统的表结构设计(Java开发)。 
讲讲如何避免数据库设计的一些坑,方便后期的开发与维护。 
以前经常能够看到,数据库范式,现在说数据库三大范式的少了。 
三大范式我以前也很严格的弄过,但是后来发现,还是灵活好啊,为什么,业务变动太快了啊,按照范式来,结构变更顶不住。 
下面我就说一说设计数据库表要注意的一些地方吧。我不是DBA,只是Java后端开发,以下是根据我的个...

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

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

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

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

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

外键、触发器

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

自增id

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

创建时间&修改时间

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

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

创建人&修改人

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

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

大文本字段

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

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

表与表的关联

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

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

单库单表单系统写原则

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

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

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

总结

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

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

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

转自:https://developer.aliyun.com/article/756465?spm=a2c6h.14164896.0.0.57b651aac6I4G7

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:剑指-21.变态跳台阶

下一篇:SSM(6)-动态代理-InvocationHandler-Proxy

您可能感兴趣

  • 用MFCODBC编写数据库应用程序

    1、 使用MFC访问ODBC数据源EMIAL:zzh1415@21cn.com3.1    概述VisualC++的MFC类库定义了几个数据库类。在利用ODBC编程时,经常要使用到CDatabase(数据库类),CRecordSet(记录集类)和CRecordView(可视记录集类)。 其中: CDatabase类对象提供了对数据源的连接,通过它你可以对数据源进行操作。CRecordView...

  • 使用OLEDB编写数据库应用程序

    使用OLE DB5.1    概述OLE DB的存在为用户提供了一种统一的方法来访问所有不同种类的数据源。OLE DB可以在不同的数据源中进行转换。利用OLE DB,客户端的开发人员在进行数据访问时只需把精力集中在很少的一些细节上,而不必弄懂大量不同数据库的访问协议。OLE DB是一套通过COM接口访问数据的ActiveX接口。这个OLE DB接口相当通用,足以提供一种访问数据的统一手段,而...

  • Web搜索引擎设计和实现分析

    胡朝晖(浙江大学计算机系) 王海瑛(宁波海峰塑化有限公司)---- 一、引言 ---- 随着Internet的飞速发展,人们越来越依靠网络来查找他们所需要的信息,但是,由于网上的信息源多不胜数,也就是我们经常所说的"Rich Data, Poor Information"。所以如何有效的去发现我们所需要的信息,就成了一个很关键的问题。为了解决这个问题,搜索引擎就随之诞生。 ---- 现在在网...

  • 应用于移动电话的WML(Wireless Markup Language)开发

    本文作者:Jani J vinen 翻译整理:崔凯---- 众所周知,delphi有创建HTML文件的能力。然而,你知道吗?delphi也能用来创建一些新的WAP(Wireless Application Protocol) 设备所需要的WML文件。 ---- 这篇文章中,你将学习到如何创建一个快速的,使用一个wap电话或者是一个模拟系统的定制查询系统。现在来让我们来超越一下我们自己,来,让...

  • 硬盘主引导记录结构

    硬盘主引导记录结构 硬盘的主引导记录在硬盘的0磁头0柱面1扇区。主引导记录由三部分组成:(1)主引导程序;(2)四个分区表;(3)主引导记录有效标志字。详见表1。 表1:主引导记录结构位置内容 0000H-00D9H 主引导记录代码区00DAH-01BDH 空闲区 01BEH-01CDH 分区1结构信息01CEH-01DDH 分区2结构信息 01DEH-01EDH 分区3结构信息01EEH-...

  • 用树型结构表示科目代码的一种高效算法

    用树型结构表示科目代码的一种高效算法 松本电工实业有限公司电脑部 舒嵩嵩 ---- 在很多常见的财务软件中,科目代码一般都用树型结构来显示。要实现这一点,通常的做法是用多个(嵌套)循环,甚至递归等算法,将科目表中的代码"织"成树,但这样不但算法复杂,而且执行效率低。本人在实际的开发应用中,摸索出一种简单高效的算法,在此和盆托出,只在抛砖引玉,找出最佳解决方案。下面介绍在Delphi中的实现方...

  • VxD设计中的两个关键问题

    虚拟设备驱动程序(VxD)设计中的两个关键问题   陈国友   在虚拟设备驱动程序(VxD)的设计中,两个尤为关键,且又令人困扰的问题是VxD的虚拟化和VxD与应用程序间的通信机制。下面,对这两个问题作一详细的探讨。   一、VxD的虚拟化   由于Windows允许同时运行多个任务,所以出现多个进程试图同时访问同一物理设备的情况时,如果多个应用程序通过同一个DLL驱动程序(注意和虚拟设备驱...

  • 用Delphi开发DirectX控件

    用Delphi开发DirectX控件 整理编辑:China ASP  Microsoft推出的DirectX使我们在Windows9x下开发游戏软件便利了许多。一般在介绍DirectX 的资料里都讲的是如何用VC++来开发,其实inprise公司的语言也可以用来开发基于DirectX的游戏软件。我们这里用的是DirectX控件,它有Delphi3和Delphi4不同的版本。在http://w...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
后端开发如何设计数据库系列文章(一)设计传统系统表结构(Java开发)介绍:华为云为您免费提供后端开发如何设计数据库系列文章(一)设计传统系统表结构(Java开发)在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多后端开发如何设计数据库系列文章(一)设计传统系统表结构(Java开发)的相关内容。| 移动地址: 后端开发如何设计数据库系列文章(一)设计传统系统表结构(Java开发) | 写博客