数据库表结构设计

news/2024/7/1 3:08:13

数据库表结构设计

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

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

一、数据库

简而言之就是 存储数据的一个容器
常见的数据库软件有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,TIME
6.可以确定表字段的长度的,用char
7.表字段长度,根据业务数据定

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,整理到这吧!

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


http://lihuaxi.xjx100.cn/news/1518661.html

相关文章

HOT100打卡—day11—【贪心】—最新9.5(剩3题)

1 121. 买卖股票的最佳时机 121. 买卖股票的最佳时机 AC代码&#xff1a; class Solution { public:int dp[100010]; int maxProfit(vector<int>& prices) {//找每个元素左边最小的 就是左右两个数组的单边版本。(正好是官方题解的第二种版本)int ans 0;int min…

java:操作cookie

背景 cookie 是一种客户端会话技术&#xff0c;将数据保存到客户端。主要流程就是&#xff1a; 1、服务器把数据设置到cookie并返回给浏览器 2、浏览器自动保存 3、浏览器下一次发送请求自动携带cookie给服务器 我们主要来看一下 java 是怎么操作 cookie 的。 cookie介绍 特…

EDA - 初探事件驱动

文章目录 事件驱动架构概述事件驱动架构的关键特点认知误区事件驱动架构的四种模式事件通知优点缺点小结 事件承载状态转移优点缺点 事件溯源优点缺点 CQRS &#xff08;Command Query Responsibility Segregation&#xff09; 事件驱动架构的适用场景组件的解耦执行异步任务跟…

【Leetcode Sheet】Weekly Practice 5

Leetcode Test 823 带因子的二叉树(8.29) 给出一个含有不重复整数元素的数组 arr &#xff0c;每个整数 arr[i] 均大于 1。 用这些整数来构建二叉树&#xff0c;每个整数可以使用任意次数。其中&#xff1a;每个非叶结点的值应等于它的两个子结点的值的乘积。 满足条件的二…

c语言flag的使用

flag在c语言中标识某种状态或记录某种信息&#xff0c;可以通过修改flag中来控制程序流程,判断某种状态是否存在或记录某种信息 操作:(1)初始化 (2)赋值 (3)判断 (4)修改 (5)去初始化 #include <stdlib.h>int power_state_check;int main() {int i 0;power_state_check…

Flutter实现ControlExecutor进行多个异步任务执行时监听状态并可指定最后执行的异步并在指定的异步执行完毕后结束executor并回调。

1.场景 当有多个接口请求时&#xff0c;且接口调用不是同时进行时&#xff0c;而且接口调用有可能时链式的&#xff0c;中间也有可能加入别的逻辑&#xff0c;但是需要在第一个接口调用时打开等待框&#xff0c;在最后一个接口调用完成时关闭等待框类似需求时&#xff0c;可以…

图像识别技术在智能交通领域的革命

导言&#xff1a; 智能交通领域一直以来都面临着交通安全和效率的挑战&#xff0c;而图像识别技术的快速发展正为这一领域带来了革命性的变革。本文将深入探讨图像识别技术在智能交通领域的应用&#xff0c;以及它所带来的潜在影响。 一、图像识别技术在智能交通中的应用 车辆…

电脑安装 MIUI+

windows电脑&#xff0c;打开命令框&#xff0c;输入下面命令 winget install Xiaomi.MIUI 如果是小米笔记本&#xff0c;还可以通过 小米帮助中心-小米商城 (mi.com) 进行下载安装