• 数据库表结构设计



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

    一、数据库

    简而言之就是 存储数据的一个容器
    常见的数据库软件有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无关的概念模型
    通常有四种设计概念结构的方法:

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

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

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

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

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

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

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

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

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

    四、表设计

    1、表类型

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

    2、建表注意事项

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

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

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

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

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

    例:如设计人员与角色的表。
    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='人员表';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    角色表:略

    人员角色关系表:

    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='人员角色关系表';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    OK,整理到这吧!

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

  • 相关阅读:
    1.log4j2 文件名使用不当导致的日志覆盖问题
    API调用,淘宝天猫、1688、京东、拼多多各平台获得淘宝商品详情
    Java知识点二
    【Docker】- 【入门】- 001 - 创建docker 账户 以及 上传image和部署image
    数字逻辑实践6-> 从数字逻辑到计算机组成 | 逻辑元件总结与注意事项
    【汇编】第一个汇编程序(学习笔记)
    谣言检查论文精读——5.SpotFake: A Multi-modal Framework for Fake News Detection
    【广州华锐互动】AR技术为气象站远程监控及在线指导维修提供极大便利
    韦东山D1S板子——xfel工具无法烧写bin文件到spi norFlash问题解决
    vue中倒计时(日,时,分,秒)的计算和当前时间计时读秒
  • 原文地址:https://blog.csdn.net/qq_38254635/article/details/132662078