数据库专业人士“采访”整理记录

2023-11-02 20:59

本文主要是介绍数据库专业人士“采访”整理记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在学后台,数据表设计设计就懵了,感觉并不知道如何设计,于是在QQ上问了公司的专业人士——数据库工程师。感觉学到很多,但因为用的还不够,知识上还是匮乏阶段,所以先整理记录,慢慢消化。

问:大神,问下数据库结构如下,在实际设计中会不会使用外键呢?还是单纯使用逻辑让数据保持一致?

这里写图片描述


答:独立表,像你列举的公司表,部门表这种相互关系并不大的,一般不会用外键。有外键会影响表的删除,这个关系一般只是使用逻辑来维持,而非数据库外键。

如果是一张主表,多张明细表,比如有一张用户表,关于个人联系方式方面有张表,关于个人优惠券,vip信息有张表,这种情况就要使用外键。因为此时的主表,明细表的联系很密切。如果主表删除,明细表是一定要删除的,使用外键能够帮助我们有效识别关联表,减少数据库的无效表数据。


问:大神,像上图的关联表会使用吗?听说在实际应用中为了加快查询速度不会使用关联表,这是真的吗?

答:关联表的实际用途是记录其他表的唯一值。在实际生产过程中,我们会尽力减少关联表,这样能有效提高数据库的查询性能。

有些情况下,关联数据如果查询次数多,那么也可单独建立关联表。但注意此时建表的目的依旧是为了加快查询速度,其实这张表依旧是独立表,不要对它设立外键。

从数据库实际运用的角度来说,性能永远放在首位。关联表也是要面向性能,能够提升性能就使用,不利于性能就不使用。


问:最后一个问题,您前面提到,主表明细表之间关联密切。如果删主表,明细表也要删除。从学习中,我了解到,触发器会降低系统灵活性,存储过程则不利于数据库迁移,有点纠结是否要使用它们。那么这种情况下(删除主表,同时删除明细表)选择使用触发器进行系统触发还是使用存储过程进行手动触发呢?


答:有外键就不用使用触发器了。外键能够有效帮助我们识别相关从表。

主表从表之间,这种情况最好还是不要选用触发器。因为主表从表这种关系,我们往往会使用到事务处理保持数据一致性。在有事务的情况下,从表会被锁死,主表触发器等待,出现并发问题。使用触发器可能会出现死锁。

存储过程这种方式还是不错的。它可以方便我们的修改,也不像触发器那样每次都进行修改。同种类型数据库之间,存储过程的迁移不会有困难。不同种类数据库之间,比如MSSQL和MYSQL之间,它们的存储过程格式不同,此时需要修改。

所以,就个人而言,我更偏向存储过程的方式。


问:谢谢,不愧是专业人士,我学到了好多东西,需要消化一下。


答:不用,我就是个业余的。


总结
1.要有主从表的概念,对于不常修改的数据放在主表,经常修改的数据放在从表
2.主从表之间可以使用外键进行保护,可以有效减少无效表。
3.实际生产过程中,少用关联表。如果使用过程很多,有助于提高性能,则可使用关联表。
4.触发器使用需要谨慎,存储过程是一种比较好的处理表数据的方式。

这篇关于数据库专业人士“采访”整理记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/333265

相关文章

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁