数据库表结构设计

  • 一、数据库
  • 二、数据库类型
  • 三、设计步骤
  • 四、表设计

本来最近不想写东西的,奈何平台给推了个流量券。☺☺☺

一、数据库

简而言之就是 存储数据的一个容器
常见的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL等。这些软件具有管理、查询、更新、删除数据的功能,可以通过编写SQL语句来操作数据库中的数据。

类似于生活中我们需要喝水,水杯就是存储水的容器。

关于数据的概念,引用官方的解释:
数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。
数据可以是连续的值,比如声音、图像,称为模拟数据;也可以是离散的,如符号、文字,称为数字数据。
在计算机系统中,数据以二进制信息单元0、1的形式表示。

额,定义有点难理解,个人看法就是我们看到的,听到的所有能感知到的信息。
比如图片,视频,音频,文字,字母,数学符号等等,都是人类所创造、可传播的且服务于人的信息。

二、数据库类型

1、关系型数据库Relational Database
关系型数据库的使用最为普遍流行,排名前十的数据库里就有6个是关系型数据库,如Oracle、MySQL、微软的SQL Server、PostgreSQL、IBM的DB2以及装机量最多的数据库SQLite以及大数据库的数据库Hive

2、文档型数据库Document Database
常见的有前端开发和爬虫的最爱MongoDB、Couchbase、Firebase、CouchDB

3、键值数据库Key-value Database
键值数据库常见的有Redis、Memcached

4、搜索引擎Search Engine
比如大厂必备的Elasticsearch、日志数据库Splunk

5、宽列数据库Wide Column
分布式数据库,常见的有Cassandra、HBase

6、图形数据库Graph
常见的有Neo4j

7、时序数据库Time Series
常见的有InfluxDB

随着互联网的发展,现在数据库可区分为:关系型数据库和非关系型数据库。

三、设计步骤

1、需求分析
要求分析的任务是:通过对现实世界中所要处理的对象进行详细的调查,充分了解原系统的工作概况,明确用户的各种需求,然后在此基础上确定新的系统功能,还须充分考虑未来可能进行的扩展和变化,而不只是根据目前的应用需求进行设计。研究的重点是数据和处理。满足信息、处理、安全和完整性的要求。

2、设计概念结构
概念性结构设计是整个数据库设计的关键,它通过综合、归纳和抽象,形成一个与具体DBMS无关的概念模型
通常有四种设计概念结构的方法:

从上到下。先确定整体概念结构的框架,再逐步细化。自下而上,在此基础上,首先定义了各个局部应用的概念结构,然后对其进行集成,得到全局概念结构。逐渐扩大。先定义核心概念结构,然后向外扩展,以滚雪球的方式逐步产生其他概念结构,直到整个概念结构。综合战略。也就是自上而下和自下而上相结合。

3、逻辑结构设计(E-R图)
逻辑性的结构设计是将概念结构转化为某一DBMS支持的数据模型,然后进行优化
这个阶段,E-R图显得非常重要。需要学习每个实体定义的属性,画出总体E-R图。
各类E-R图的冲突有三种类型:

属性冲突、命名冲突和结构冲突。

从E-R图到关系模型的转换,要解决的问题是实体与实体之间的联系如何转化为关系模式,以及如何确定这些关系模式的属性和编码

4、实体设计
在逻辑数据结构模型中,物理设计是选择一个最适合应用环境的物理结构(包括存储结构和访问方法)。需充分理解RDBMS的内部特性,特别是存储器提供的存储器结构,以获取一个物理数据库设计所需的参数,以及所提供的存储器结构。
常见的访问方法有三种:

1、索引法,目前主要是B+树索引法。2、聚群方法(Clustering)。3、HASH方法。

5、执行数据库
在数据库执行阶段,设计者操作由DBMS提供的数据库语言(如sql)和主机语言,根据逻辑设计和物理设计的结果建立数据库,编制和调试应用程序,组织数据入库,并进行试运行。

6、数据库的运作和维护
资料库应用系统经过试运行,就可以正式运行。
数据库系统在运行过程中要不断的评估、调整、修改

需求分析、概念结构设计、逻辑结构设计、物理设计、数据库实施阶段,根据逻辑设计和物理设计的结果建立数据库,编制和调试应用程序,组织数据入库,并进行试运行、数据库运行和维护。

四、表设计

1、表类型

系统表:如工作流的表,不需要处理权限表:如rbac相关表,着重表的关联关系。实例表与实例表的关联,需要增加关联关系表作为连接。需要注意实例唯一码的索引。数据量一般不会很大,可以画关联关系图表梳理权限关系。业务表:业务表是否满足业务数据的存储需求,关注的点应该更多的放在数据量上。关键的唯一标志是否存在,索引是否有,重点在于索引是否生效。流程表:流程之间的关系。时间。唯一建。日志表:日志的作用,需要存储的关键信息。配置表:配置的合理性,尽量配置简化。需要注意的是配置的版本。接口表:外部对接表,数据量的长度,接口关键报文信息。

2、建表注意事项

1.要有表注释2.物理主键自增,不需设置3.基础字段,ID,业务状态,单号等(根据业务定)4.页面字段,即页面需要什么字段,就放什么字段5.冗余字段,项目编码,状态,修改人CODE,NAME,TIME,创建人CODE,NAME,TIME6.可以确定表字段的长度的,用char7.表字段长度,根据业务数据定

3、表结构设计
即在梳理清楚E-R图后,对单点表的设计处理。

基础字段: 基础字段包含ID,单号,与其余表或者业务关联的字段等页面字段: 即页面展示所需的字段,可照搬业务页面字段冗余字段: 即可有可无字段, 方便问题查找字段, 如 操作时间,操作人等

在以上三点的基础上,可将基础字段细化拆分,即基础无含义字段,有含义字段(即流程关键卡点控制)。

业务中涉及的表,实例表,关系表
依据不同的表,结合设计的三段,构造不同的表机构。

例:如设计人员与角色的表。
E-R图就很简单了,单点的关系。
存储就需要设计3张表:人员表;角色表;人员角色关系表

人员表:

CREATE TABLE `t_user` (-- 基础字段`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',-- 页面字段`CODE` varchar(50) DEFAULT NULL COMMENT '编码',`NAME` varchar(50) DEFAULT NULL COMMENT '姓名',`PASSWORD` varchar(100) DEFAULT NULL COMMENT '密码',`PHONE` varchar(50) DEFAULT NULL COMMENT '手机号码',-- 冗余字段`UPDATE_CODE` varchar(50) DEFAULT NULL COMMENT '更新账号',`UPDATE_NAME` varchar(50) DEFAULT NULL COMMENT '更新姓名',`UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新时间',`CREATE_CODE` varchar(50) DEFAULT NULL COMMENT '创建账号',`CREATE_NAME` varchar(50) DEFAULT NULL COMMENT '创建姓名',`CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',`STATUS` char(1) DEFAULT '1' COMMENT '数据状态 1:有效;2:无效',PRIMARY KEY (`ID`) USING BTREE,UNIQUE KEY `UK_CODE` (`CODE`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='人员表';

角色表:略

人员角色关系表:

CREATE TABLE `t_user_role` (-- 基础字段`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`CODE` varchar(50) DEFAULT NULL COMMENT '编码',`ROLE` varchar(50) DEFAULT NULL COMMENT '角色',-- 页面字段-- 冗余字段`UPDATE_CODE` varchar(50) DEFAULT NULL COMMENT '更新账号',`UPDATE_NAME` varchar(50) DEFAULT NULL COMMENT '更新姓名',`UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新时间',`CREATE_CODE` varchar(50) DEFAULT NULL COMMENT '创建账号',`CREATE_NAME` varchar(50) DEFAULT NULL COMMENT '创建姓名',`CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',`STATUS` char(1) DEFAULT '1' COMMENT '数据状态 1:有效;2:无效',PRIMARY KEY (`ID`) USING BTREE,UNIQUE KEY `UK_CODE_ROLE` (`CODE`,`ROLE`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='人员角色关系表';

OK,整理到这吧!

如有不正确之处,还望指正!书写不易,觉得有帮助就点个赞吧!☺☺☺