数据库表结构设计

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库表结构设计 的相关文章

  • 正确显示mySQL一对多查询结果

    我有两张桌子 TRIPS tripID clientID and LEGS legID depart arrive tripID TRIPS 与 LEGS 具有一对多关系 因为有多个legID s per tripID 我需要以以下格式显示
  • 在 OS X 10.7 中找不到 Mysql 命令

    我无法让我的 mysql 在 os x 10 7 上启动 它位于 usr local mysql bin mysql 当我输入时 我得到命令未找到mysql version在终端中 我试过这个无法从 mac 命令行访问 mysql http
  • 使用 Hibernate 和 Apache DBCP 的 MySQL 连接池问题

    看来我的应用程序有问题 当应用程序在启动后闲置很长时间 我不确定确切的时间 时 我会在日志中收到以下错误消息 我使用 Spring Hibernate MySQL 和 ApacheDBCP 进行连接池 ERROR org hibernate
  • 语言翻译语法

    我正在尝试为我的项目添加另一种语言 我们知道语言可以表现出主语和谓语的差异 例如 英语 Mustafa和他的朋友去看电影ahmet today 土耳其 Mustafa布昆 阿卡达西ahmetile birlikte sinemaya git
  • PHP:使用输入和输出参数(不是“INOUT”)调用 MySQL 存储过程

    我想从 PHP 调用 MySQL 中的存储过程 该过程需要输入and输出参数 not INOUT 参数 举一个简单的例子 假设我在 MySQL 中有以下存储过程 DELIMITER DROP PROCEDURE IF EXISTS test
  • ASP.NET API:尚未为此 DbContext 配置数据库提供程序

    我正在尝试从我的 Net Core API 项目连接到 MySql 数据库 这是我的上下文类 public class MyContext DbContext public MyContext public MyContext DbCont
  • MySQL:你能指定一个随机限制吗?

    有没有办法在 SQL MySQL 中随机化限制数字 我希望能够做的是在查询中获取随机数量的结果以在插入子查询中使用 而无需任何服务器端脚本 我希望能够作为假设说明运行的查询是 SELECT id FROM users ORDER BY RA
  • 如何在 Laravel 中编写联合查询?

    我正在使用 laravel 5 0 并且我有 mysql 查询 SELECT surat masuk id surat surat masuk nomor surat FROM surat masuk WHERE EXISTS SELECT
  • 自动将所有mysql表转储到单独的文件中?

    我想将每个 mysql 表转储到单独的文件中 手册指出其语法是 mysqldump options db name tbl name 这表明您事先知道表名称 我现在可以设置知道每个表名称的脚本 但是假设我在路上添加了一个新表并且忘记更新转储
  • 执行许多插入重复键更新错误:未使用所有参数

    所以我一直在尝试使用 python 2 7 15 使用 mysql connector 执行此查询 但由于某种原因 它似乎不起作用并且总是返回错误 并非所有参数都被使用 表更新有一个主键 即 ID 这是我尝试运行此 SQL 的查询 sql
  • php 崩溃后 mysql 表被锁定

    我有一个 MySQL DB 和一个 innoDB 表 我有一个 php 页面 用于连接 锁定表 进行一些更新 然后解锁表 PHP 页面通过 wamp 与 apache 一起提供 php页面将文件上传到数据库 我决定通过上传一个大小大于分配给
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • 物理写入文件已满 - mysql 错误

    我正在使用xampp 每次启动mysql时 我都会在xampp中收到以下错误 Error MySQL shutdown unexpectedly 13 16 14 mysql This may be due to a blocked por
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7
  • PMA 4.5.2.0 file_exists():open_basedir 限制生效

    从 PPA 在我的 Ubuntu 服务器上安装 phpMyAdmin 后 https launchpad net nijel archive ubuntu phpmyadmin https launchpad net nijel archi
  • Sql:计算随时间的增长

    我几周前发布了这个问题 但我认为我没有清楚地提出这个问题 因为我得到的答案不是我想要的 我认为最好重新开始 我正在尝试查询数据库以检索一段时间内唯一条目的数量 数据看起来像这样 Day UserID 1 A 1 B 2 B 3 A 4 B
  • 使用MySQL计算单个表中借方和贷方的余额

    下面的 MySQL 表包含带有关联金额的借方或贷方 操作 如何选择具有非零 余额 的所有 CLIENT ID 我尝试将表连接到自身以计算所有借方和贷方总额 但有些东西无法正常工作 CLIENT ID ACTION TYPE ACTION A
  • 如何修复 InterfaceError: 2003: 无法连接到“127.0.0.1:3306:3306”上的 MySQL 服务器(11001 getaddrinfo 失败)

    我的MySQL连接成功但是遇到这个界面错误 import mysql connector db mysql connector connect host 127 0 0 1 3306 user root passwd teja databa
  • Laravel Group By 和 Order By 不起作用

    我尝试制作一个Laravel 5 8项目 项目中的数据是这样的 id purch name prcvalue 1 10234 Nabila 100 2 10234 Nadeera 450 3 10234 Nabila 540 4 10234
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE

随机推荐

  • React面试题汇总

    1 面试官 说说对 React 的理解 有哪些特性 React遵循组件设计模式 使用虚拟 DOM 来有效地操作 DOM 遵循从高阶组件到低阶组件的单向数据流 React 特性有很多 如 JSX 语法 单向数据绑定 虚拟 DOM 声明式编程
  • 【深度学习】 - 作业7: 图像超分辨率重建

    课程链接 清华大学驭风计划 代码仓库 Victor94 king MachineLearning MachineLearning basic introduction github com 驭风计划是由清华大学老师教授的 其分为四门课 包括
  • web端上传图片时 图片被旋转问题

    有些时候在web端上传图片会遇到这种情况 正向的图片 上传预览时就被旋转了 发生这种情况是因为 照片中包含很多属性来记录拍摄信息 想要读取这些属性 需要引入EXIF 可在npm上搜索exif js下载 EXIF中 包含一个Orientati
  • Qt内存管理及泄露后定位到内存泄漏位置的方法

    Qt内存管理机制 Qt使用对象父子关系进行内存管理 在创建类的对象时 为对象指定父对象指针 当父对象在某一时刻被销毁释放时 父对象会先遍历其所有的子对象 并逐个将子对象销毁释放 Qt内存管理代码示例 QLabel label new QLa
  • Linux 查找文件(find命令/locate命令)

    目录 一 find 我的东西在哪 二 更快速地定位文件 locate命令 一 find 我的东西在哪 随着文件增多 我们有时候记住某个文件放在哪个文件夹下了 此时搜索工具显得非常有用了 而find就是这样一个命令 可以帮助我们在指定范围内查
  • 多对一的4种查询方式

    多对一的概念在数据库中是十分常见的 下面将以多个学生对应一个老师的例子介绍4种多对一的查询方式 一 建立数据库 首先建立2种表 一种是teacher表 其中包含的字段有id 主键 name 一种是student表 其中包含的字段有id 主键
  • rsa加密

    public static class RSAHelper private static string privateKey private static string publicKey public static string GetP
  • LLMs的自动化工具系统(HuggingGPT、AutoGPT、WebGPT、WebCPM)

    在前面两篇博文中已经粗略介绍了增强语言模型和Tool Learning 本篇文章看四篇代表性的自动化框架 HuggingGPT AutoGPT WebGPT WebCPM Augmented Language Models 增强语言模型 T
  • log4j Layout简介说明

    转自 log4j Layout简介说明 下文笔者讲述log4j的简介说明 如下所示 log4j Layout的功能 log4j Layout主要用于日志数据格式化 它有以下三种形式 HTMLLayout 将日志格式化为HTML表格形式 ht
  • 记录uni-app开发原生android插件,调用不了,没有返回值的问题。返回值为{}的问题。返回值为空的问题

    1 引入了原生插件但是调用不了没有返回值 这种情况大多数是开发原生插件的时候引入了aar库 但是打包的时候没有引入 把需要引入的库放在生成的文件目录下就可以比如 开发了一个叫t1 module 的插件 引入了一个printer lib 3
  • vivado时序分析 实例

    vivado时序分析实例 建立余量 保持余量 实例分析 建立余量 保持余量 实例分析 环境 Vivado 2019 2 芯片型号 xc7z020clg484 2 举例子说明怎么使用Reporte Timing Summary 建立源工程 m
  • locust 性能测试工具(V2.8.6)

    locust 性能测试工具 特点 安装 验证 Demo 编写 locustfile 配置 分布式生成负载 在调试器中运行测试 在 Docker 中运行 使用 Terraform AWS 运行分布式负载测试 不使用 web UI 运行 自定义
  • c语言程序延时参数500,C语言精确延时设计

    我现在就用两种方法来实现 一种是while 语句 另一种是for 语句 这两种语句均可产生汇编语句中的DJNZ语句 以12MHZ晶振为例 说明 在编写C程序时 变量尽量使用unsigned char 如满足不了才使用unsigned int
  • Spark学习笔记:OutOfMemoryError-Direct buffer memory (OOM)

    之前也遇到过几次关于OOM 堆外内存溢出 的问题 但都只是大体上看了看 没有细致的总结 目前了解的还不是特别清楚 只好总结一下我觉得可行的处理方案 另外贴一些原理 首先是当时的一些处理方案 第一次OOM 第一次遇到这个问题时 上网查 发现很
  • 磁盘格式化了怎么恢复里面文件

    磁盘格式化了怎么恢复里面文件 磁盘格式化了数据能恢复吗 电脑磁盘是我们生活中经常打交道的一种存储介质 我们的电脑每天在工作和学习中都要读写大量的数据 因此我们经常要清理电脑磁盘保证电脑的运行速度和内存充足 那么如果电脑磁盘被格式化了该怎么恢
  • yocto编译linux社区5.10版本的坎坷

    作为菜鲲的我 基于meta intel的bsp进行修改 精简后的linux intel 5 10 bb内容如下 require recipes kernel linux linux yocto inc FILESEXTRAPATHS pre
  • add_subdirectory(子文件夹名)用法

    add subdirectory 子文件夹名 表示对子文件夹项目进行cmake编译
  • redis命令之哈希表类型hdel命令用法详情

    哈希表 HDEL命令 命令 hdel key field field field 同时删除N个field 对于不存在的field会被忽略 并返回被删除的field的个数 当在该key下的最后一个field也被删除掉的话 再通过hget ke
  • 设计模式(2)之单例模式

    外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img AHenjiIs 1610326440502 https img shields io badge link 996 icu red svg 单例模式 顾名思义就是
  • 数据库表结构设计

    数据库表结构设计 一 数据库 二 数据库类型 三 设计步骤 四 表设计 本来最近不想写东西的 奈何平台给推了个流量券 一 数据库 简而言之就是 存储数据的一个容器 常见的数据库软件有MySQL Oracle SQL Server Postg