【SQL Server】数据库开发指南(一)数据库设计

文章目录

    • 一、数据库设计的必要性
    • 二、什么是数据库设计
    • 三、数据库设计的重要性
    • 五、数据模型
      • 5.1 实体-关系(E-R)数据模型
      • 5.2 实体(Entity)
      • 5.3 属性(Attribute)
      • 5.5 关系(Relationship)
    • 六、数据库设计步骤
      • 6.1 需求分析阶段:数据库系统分析
      • 6.2 概要设计阶段:绘制 E-R 图
        • 6.2.1 E-R 图中的实体、属性和关系
        • 6.2.2 映射基数
          • 6.2.2.1 一对一关系
          • 6.2.2.2 一对多关系
          • 6.2.2.3 多对一关系
          • 6.2.2.5 多对多关系
        • 6.2.3 E-R 总结
      • 6.3 详细设计阶段:将 E-R 图转换为表
    • 七、数据库设计规范化
      • 7.1 数据库设计中经常出现的问题
      • 7.2 规范设计
      • 7.3 规范化和性能关系

一、数据库设计的必要性

在实际的软件项目中,如果系统中需要存储的数据量比较大,需要设计的表比较多,表与表之间的关系比较复杂,那我们就需要进行规范的数据库设置。如果不经过数据库的设计,我们构建的数据库不合理、不恰当,那么数据库的维护、运行效率会有很大的问题。这将直接影响到项目的运行性和可靠性。

二、什么是数据库设计

数据库设计是指在建立数据库之前,通过分析和规划,确定数据模型、数据结构、数据表、数据关系、数据约束等一系列数据库的组成要素,以及如何存储、检索和维护数据的方法。

数据库设计实际上就是规划和结构化数据库中的数据对象以及这些数据对象之间的关系过程。

三、数据库设计的重要性

  • 不经过设计的数据库或是设计糟糕的数据库很可能导致

    1. 数据库运行效率地下
    2. 更新、删除、添加数据出现问题
  • 良好设计的数据库

    1. 执行效率高
    2. 使应用程序更便于开发
    3. 扩展性好
    4. 维护性好

数据库设计是建立可靠、高效、易于维护的数据库系统的基础,它可以确保数据一致性,提高数据访问效率。

五、数据模型

数据模型就像是数据间联系的一个轮廓图,整个模型就像一个框架。

如果按照记录间联系的表示方式,对数据模型进行分类,可以分为:层次模型、网状模型、关系模型。前两种又称为格式化数据模型。数据模型的好坏直接影响到数据库的性能,所以数据模型的选择是数据库设计的首要任务。

5.1 实体-关系(E-R)数据模型

E-R数据模型(Entity - Relationship data model),即实体 - 关系数据模型。E-R数据模型不同于传统的关系数据模型,它不是面向实现,而是面向现实物体的。它是最常用的数据建模技术之一,用于设计关系型数据库系统。E-R数据模型是一种图形化方法,是一种用于描述实体、属性和它们之间关系的方法。

5.2 实体(Entity)

数据是用来描述现实中的物体的,而描述的对象都是形形色色的,有具体的、也有抽象的;有物理上存在的、也有概念性的。凡是可以互相区别而且可以被人们认识的事、物、概念等统统抽象为实体。多个相同的类型的实体可以称为实体集(Entity set)。因此,在E-R数据模型中,也有型与值之分;实体可以作为型来定义,每个实体可以是它的实例和值。

5.3 属性(Attribute)

实体一般具体若干特征,这些特征称为实体的属性。而每个属性都有自己的取值范围,在E-R数据模型中称为值集(value set)。在同一实体集中,每个实体的属性及其值集都是相同的,但可能取不同的值。属性对应数据库表的列。

5.5 关系(Relationship)

实体之间会有各种关系,这些关系抽象为联系。不但实体可以有属性,关系也可以有属性。

六、数据库设计步骤

数据库设计可以分为以下几个阶段

  1. 需求分析阶段:分析客户的业务需求,特别是数据方面的需求

  2. 概要设计阶段:绘制数据库的E-R图,并确认需求文档的正确性和完整性,E-R图是项目的设计人员、开发人员、测试人员,以及和客户进行沟通的重要凭据

  3. 详细设计阶段:将概要设计阶段的E-R图转换为数据库表,进行逻辑设计,确定各个表之间的主外键关系,运用数据库的三范式进行审核,并进行技术评审。最后决定选哪种数据库(Oracle、SQLServer、MySQL)来建库、建表。

6.1 需求分析阶段:数据库系统分析

需求分析阶段的重点是调查、收集、分析客户的业务数据需求以及数据的安全性、完整性需求等。

需求分析步骤:

  1. 确认业务需求

  2. 标识关系实体

  3. 标识每个实体的具有的属性

  4. 确认实体之间的关系

6.2 概要设计阶段:绘制 E-R 图

作为数据库设计者,你需要和项目组内其他成员分享你的设计思路,共同研讨数据库设计的合理性、安全性、完整性,并确认是否符合客户的业务需求。那么使用 E-R 图,这种图形化的表示方式最为直观。

6.2.1 E-R 图中的实体、属性和关系

在 E-R 数据模型中,实体被表示为矩形,属性被表示为椭圆形,关系被表示为菱形。实体代表现实世界中的一个对象或概念,属性是实体的特征或属性,而关系是实体之间的连接。

image

上面的简单 E-R 图可以看出学生和饭卡之间的关系。在上图中可以看出:用矩形表示实体实体是一般名词椭圆表示属性一般也是名词菱形表示关系一般是动词

6.2.2 映射基数

映射基数表示可以通过关系与该实体的个数。对于实体集 A 和 B 之间的二元关系,可能的映射基数有:

6.2.2.1 一对一关系

也就是 A 实体中最多只有一个 B 实体的关联,而 B 实体的最多只有一个 A 实体的关联。用 E-R 图表示:

在这里插入图片描述

6.2.2.2 一对多关系

A 实体可以与 B 实体任意数量的进行关联,B 中的实体最多与 A 中的一个实体关联。E-R 图表示:

在这里插入图片描述

6.2.2.3 多对一关系

3、 多对一:A 实体最多与一个 B 实体进行关联,而 B 实体可以和任意多个A实体进行关联。E-R 图表示:

在这里插入图片描述

6.2.2.5 多对多关系

4、 多对多:A 实体可以有多个 B 实体,而B实体也可以有任意多个 A 实体。E-R 图表示:

image

6.2.3 E-R 总结

E-R 图可以以图形化的方式将数据库的整个逻辑结构表示出来,组成部分有:

  1. 矩形表示实体集
  2. 椭圆表示属性
  3. 菱形表示关系
  4. 直线用来连接实体集与属性、实体集和关系
  5. 直线、箭头表示实体集之间映射基数

注意在上述关系图中,箭头所指的方向基数为1,也可以都没有箭头,在关系线上用1表示即可

6.3 详细设计阶段:将 E-R 图转换为表

步骤如下:

  1. 将各个实体转换为对应的表,将各属性转换为对应的列
    对于 E-R 图中的每个实体,创建一张对应的表,表名应该与实体名相同或者相似。每个表应该包含与实体相关的所有属性,这些属性应该被转换为表的列。

  2. 标识每张表的主键
    每张表都需要一个主键来唯一标识表中的每一行。通常情况下,实体中的一个属性会被选定为主键。如果没有合适的属性可以用作主键,则可以为表添加一个自增长的整数列作为主键。

  3. 将实体之间的关系转换为表与表之间的主外键关系
    对于 E-R 图中的每个关系,需要将它们转换为表与表之间的主外键关系。每个关系将在其对应的表中生成一个外键列。该列将引用另一个表中的主键列。

更多详细关于 E-R 图的画法以及介绍推荐可以参看:数据库系统设计原理–E-R模型

七、数据库设计规范化

7.1 数据库设计中经常出现的问题

  1. 数据冗余大
  2. 插入数据异常
  3. 删除异常
  4. 更新异常

7.2 规范设计

一个较好的关系数据库模型,它的每个关系中的属性一定要满足某种内在的语义条件,即要按一定的规范设计关系模型,这就是设计的规范化。

在数据库设计时,有一些专门的规则,称为数据库的设计范式,遵循这些规则,就可以创建出良好的数据库,数据库著名的三大范式理论:

  1. 第一范式(1NF)

第一范式是满足关系数据库模型所要遵循的最基本的条件范式,几关系中的每个属性必须是不可再分的简单项,不能是属性组合,即属性的取值是不可拆分的原子值。

  1. 第二范式(2NF)

第二范式是在第一范式的基础上,确保表中的每列都和主键相关。其定义是如果一个关系满足1NF,并且除了主键关系外的其他列都依赖于该主键,则满足第二范式。

  1. 第三范式(3NF)

第三范式是在第二范式的基础上进行的,第三范式的目标是确保每列都和主键列直接相关,而不是间接相关的。其定义是:如果一个关系满足2NF,并且除主键外的其他列都不传递依赖于该主键。

更多关于范式的介绍,请参阅:[ 数据库原理 ] 举例讲解数据库范式(1NF、2NF、3NF、BCNF)与不满足数据库范式的影响

7.3 规范化和性能关系

为了满足三大范式,数据库的性能可能会有一定程度的降低。所以,在实际数据库设计中,我们既要尽量满足三大范式,从而避免数据冗余和各种数据库的操作异常,同时也要考虑数据的访问性能。有时候,为了提高数据库的访问效率,适当的允许少量数据冗余咧存在,才是最适合的数据库设计方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/10046.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

和ChatGPT-4聊完后,我觉得一切可能已经来不及了

了然无味,晴空万里!和ChatGPT-4开始了一场坦诚的沟通,它全程都表现出高情商,以及不断尽量安抚我的情绪,而这,恰恰令我脊背发凉。 部分文字截取 ZM:我能不能理解每次对话就是一次你的“生命” G&…

LeetCode刷题6:二叉树篇之第 1 节

提示1:本篇先带大家了解二叉树的基础理论,后给出4道基础题目,不难,冲啊~ 算法刷题系列 LeetCode刷题1:数组篇LeetCode刷题2:链表篇LeetCode刷题3:哈希篇LeetCode刷题4:字符串篇Lee…

1678_计算机架构黄金时代_文章阅读

全部学习汇总: GreyZhang/g_risc_v: Learning notes about RISC V. (github.com) 看了一份几年前的文章,觉得还是挺有收获的,因此做一个简单的整理。 对于架构有很大影响的主要考虑四点:专用硬件的实现、高安全性的要求、开放指令…

【Pandas】① Pandas 数据处理基础

介绍 Pandas 是非常著名的开源数据处理库,我们可以通过它完成对数据集进行快速读取、转换、过滤、分析等一系列操作。除此之外,Pandas 拥有强大的缺失数据处理与数据透视功能,可谓是数据预处理中的必备利器。 知识点 数据类型数据读取数据选择…

有效的括号(力扣刷题)代码随想录刷题

给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左…

RK3568平台开发系列讲解(驱动基础篇)mmap系统调用详解

🚀返回专栏总目录 文章目录 一、什么是mmap二、mmap映射类型2.1、私有匿名映射2.2、私有文件映射2.3、共享文件映射2.4、共享匿名映射沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文将详细介绍mmap系统调用。 一、什么是mmap mmap/munmap函数是用户空间中常用的…

Nacos 性能报告

目录 一、测试目的 二、测试工具 三、测试环境 1. 环境 服务端 客户端 2. 启动参数 服务端 客户端 四、测试场景 1. 大规模服务注册后达到稳定状态 场景描述 2. 大规模服务注册达到稳定状态后,部分实例频繁发布 场景描述 五、测试数据 1. 大规模服务…

软件测试基础

软件测试的定义、软件测试的目的 IEEE:The process of running or testing the system manually or automatically by using tools, in order to verify whether it satisfies the requirements or to make clear the differences between the actual outcome and…

DDoS攻击实验笔记

DoS&DDoS简介 DoS(Denial of Service),拒绝服务攻击是通过一些方法影响服务的可用性,比如早期主要基于系统和应用程序的漏洞,只需要几个请求或数据包就能导致长时间的服务不可用,但易被入侵检测系统发现。 DDoS(Distributed D…

日撸 Java 三百行day28-30

文章目录说明day28-30 Huffman 编码 (节点定义与文件读取)1.建树过程(以图为例)2.哈夫曼树特点3.分析代码过程3.1 抽象成员变量3.2结合文章梳理思路1.读文本2.解析文本内容:3.建树4.生成哈夫曼编码5.编码6.解码4.其他4.1 java 类型强转4.2 ja…

linux线程调度策略

系统中既有分时调度,又有时间片轮转调度和先进先出调度 学习这个主要为了在linux多线程中,解决几条指令间延时在1-2ms内; 1.比如之前处理过:给一个板子发送一个can指令,接着需要给另外一个模块发送移动指令&#xff0c…

用ChatGPT怎么赚钱?普通人用这5个方法也能赚到生活费

ChatGPT在互联网火得一塌糊涂,因为它可以帮很多人解决问题。比如:帮编辑人员写文章,还可以替代程序员写代码,帮策划人员写文案策划等等。ChatGPT这么厉害,能否用它来赚钱呢?今天和大家分享用ChatGPT赚钱的5…

关键词数据分析-搜索词和关键词分析工具

要搜索热门关键词获取,可以采用以下几种方法: 使用百度指数:百度指数是一个实用的工具,可用于查看关键词的热度趋势、搜索量等数据。在百度指数中,您可以输入您要搜索的关键词,并查看近期的相关数据。这可以…

短视频矩阵怎么玩?抖音短视频矩阵运营详细攻略!

短视频矩阵的工作包括确定目标受众和平台、制定短视频内容策、短视频制作与发布,私信评论维护,短视频数据分析等。传统短视频矩阵需要大量的人力物力,操作起来比较复杂,使用短视频矩阵工具则可以提供极大的便利。      1、确定…

Vue项目中关于全局css的处理

Vue项目中关于全局css的处理步骤一:定义声明全局CSS的样式文件(common.scss)步骤二:挂载到全局封装一:对common.scss拆分封装二:新建index.scss,对elementPlus或者element-ui样式进行覆盖封装三:variable.s…

GitLab CI/CD 新书发布,助企业降本增效

前言 大家好,我是CSDN的拿我格子衫来, 昨天我的第一本书《GitLab CI/CD 从入门到实战》上架啦,这是业内第一本详细讲解GitLab CI/CD的书籍。 历经无数个日夜,最终开花结果。感触良多,今天就借这篇文章来谈一谈这本书的…

Java基础(十五):异常处理

Java基础系列文章 Java基础(一):语言概述 Java基础(二):原码、反码、补码及进制之间的运算 Java基础(三):数据类型与进制 Java基础(四):逻辑运算符和位运算符 Java基础(五):流程控制语句 Java基础(六)&#xff1…

Linux内核设备驱动设备树概念与使用

一、设备树概念以及作用 1.1设备树概念 设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(DeviceTree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比…

python入门:cl.exe‘ failed with exit status 2错误通用解决方案

文章目录 错误一错误二pypi.org独立安装正确安装错误一 error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ 这个错误在windows系统上安装python工…

Spring《三》DI依赖注入

🍎道阻且长,行则将至。🍓 上一篇:Spring《二》bean的实例化与生命周期 下一篇:敬请期待 目录一、setter注入🍉1.注入引用数据类型2.注入简单数据类型二、构造器注入🍊1.注入引用数据类型2.简单数…