当前位置: 首页 > news >正文

数据库物理结构设计-定义数据库模式结构(概念模式、用户外模式、内模式)、定义数据库、物理结构设计策略

一、引言

如何基于具体的DBMS产品,为数据库逻辑结构设计的结果,即关系数据库模式,制定适合应用要求的物理结构

1、在设计数据库物理结构前,数据库设计人员首先

  • 要充分了解所用的DBMS产品的功能、性能和特点,包括提供的物理环境、存储结构、存取方法和可利用的工具
  • 同时要了解应用需求,对数据库的操作方式和处理频率、时间响应方面的要求
  • 了解数据库存储设备的特性,如磁盘存储区的划分原则,磁盘块的大小以及I/O特性等

2、数据库的物理结构包括数据库的存储结构和存取方法 

  • 数据库存储结构设计

在磁盘上,数据以文件的形式组织,文件又是由记录组成,用一个记录表示一个数据对象,比如一个元组在磁盘块中的连续字节存放 

数据库存储结构的设计,就是要解决数据文件中记录的存储问题,使得应用所要访问的记录尽量存储在同一磁盘块上数据操作所需的磁盘I/O操作最少

  • 数据库存取方法设计 

数据库存取方法的设计,就是要解决如何尽快找到所需记录,找到记录所在磁盘块的磁盘I/O操作次数最少

3、数据库的存储管理,主要由DBMS来完成,数据库管理人员所要做的,主要是如何利用好DBMS提供的功能

4、在物理结构设计阶段,数据库设计人员用SQL语言描述关系数据库的三级模式结构通过定义数据库及数据库中的表以及表上的索引等来确定数据库的文件组织结构、文件存储结构和文件存取方法,并在创建数据库时制定数据库的存储策略

二、定义数据库的模式结构

数据库的三级模式结构定义,需要确定逻辑结构设计阶段得到的关系数据库模式在DBMS中存储的逻辑结构 

  • 包括数据库名称、库文件名称
  • 库中表的名称、表中各属性的名称及其数据类型
  • 确定用户视图名称及其属性名称
  • 以及索引名称等 

(1)名称的定义要符合标识符的命名规则,为便于对数据库进行操作和维护,一般用英文单词来代替表名和属性名 

(2)数据类型一般从DBMS中提供的数据类型中选择

(3)对字符类型,还要确定是CHAR类型还是VARCHAR类型以及字符的最大长度

二、定义概念模式

对学校信息管理系统案例的逻辑设计所得的关系数据库模式

1、首先用SQL的表定义语句来定义各基本关系表,即数据库的概念模式 

(1)定义的学生表student,若表中所有字符串类型都是CHAR类型,则存储的学生记录为定长记录。若考虑到少数民族的姓名的存储,将姓名属性SNAME的类型改为VARCHAR类型,则存储的学生记录为变长记录,数据文件中不同记录的长度大小不同,这就是文件组织结构问题

 数据库设计人员应根据需求分析的结果,确定关系表采用定长记录存储还是变长记录存储

同理其他关系表,如课程表lesson、班级表class、教师表teacher等

(2)在定义基本关系表时,还要定义表中的完整性约束,包括外键及其参照表

 (3)有时还需定义外键的更新策略,而不采用DBMS的默认策略。比如,定义一个学生的子实体集研究生表postgraduate时,主键为学号,同时定义学号是关系的外键,还可以定义外键的更新策略为当对学生表student的主键学号SNO进行删除或修改时,研究生表的学号SNO要做级联的删除和修改,来体现研究生实体与学生实体之间的ISA联系

(4)通过定义完整性约束以及外键的更新策略等,可以保证数据库中存储的数据的一致性和有效性。

三、定义用户外模式

用户外模式的定义主要是定义视图,以适应不同用户对数据的需求,更便于对数据的操作。

比如,为了让用户认为研究生是一个独立的关系,可单独对其进行操作,则可以定义一个视图,来体现研究生关系与学生关系间的继承性,可创建视图s_postgraduate

包含学生表student和研究生表postgraduate进行连接后的所有属性,这样,用户就可以直接在对研究生的所有信息进行查询和更新操作了。在DBMS中,数据存储在学生表和研究生表中,同时存储视图的定义 

四、定义内模式

  • 索引是DBMS采取的主要存取方法,DBMS可基于索引制定优化查询计划,提高数据查询的效率。
  • 而且通过创建索引可确定数据文件的存储结构。所以,索引的设计属于内模式的设计内容

比如,在创建学生成绩GRADE表的同时,基于主键创建聚集索引,可生成一个顺序存储文件,文件记录在磁盘上按学号SNO和课程号LNO属性的值顺序存储在磁盘上,实现了学号SNO相同的元组,按课程号连续存储,从而可高效完成按主键进行的查询,当然也可以在经常用于查询的其他属性列上创建聚集索引。在创建表时,一般DBMS默认按主键创建聚集索引。

而如果在创建学生成绩GRADE表的同时基于主键创建非聚集索引,可生成一个堆存储文件,文件记录在磁盘上按元组插入的顺序进行存储,学号相同的元组可能分散在不同的磁盘块中,虽然不能按主键进行高效的范围查询等,但仍可以利用索引,对某一主键值的元组进行快速访问。在已创建了聚集索引的情况下,仍可在关系表上基于经常做查询的属性列创建非聚集索引。

这里提到的顺序存储文件和堆存储文件就是文件的两种存储结构。对于教学信息管理系统,根据数据查询需求和索引的创建原则,可默认基于主键创建聚集索引。同时,由于经常利用课程名来进行查询,所以还可以在课程关系上基于课程名使用CREATE INDEX语句定义非聚集索引

五、定义数据库

定义完数据库的三级模式结构,可预估各关系表的大小、索引所需的空间等来估算数据库的大小,然后就可以定义数据库,确定存储该数据库的数据文件和日志文件大小以及在DBMS中的逻辑文件名和磁盘上的物理文件名

比如我们要创建的教学信息管理系统数据库需作为一个整体对应至少两个磁盘文件,一个数据文件(.mdf)和一个日志文件(.ldf),数据文件包含数据对象例如表、索引和视图等日志文件包含恢复数据库中事务所需的信息,还可以定义次要文件(.ndf)来存储用户数据,可为数据库的磁盘文件指定存储的磁盘目录

创建数据库时还可利用DBMS产品提供的存储管理技术,如在SQL Server上,可利用其提供的文件组技术,把特定数据存储到指定的物理文件中。

比如可定义教学信息管理系统数据库TMS,数据库包含一个PRIMARY主文件组两个用户定义文件组TMS_FG1和TMS_FG2,主文件组和TMS_FG1文件组分别只对应一个磁盘文件TMS_FG2用户文件组对应两个文件。主文件组包含主数据文件,用户文件组包含次要数据文件。

我们可将经常做连接查询的学生表student和学生成绩GRADE表创建到TMS_FG1中,实现两个表中的数据在同一文件中的聚集存储,还可以将存储大量班级选课信息的election表创建到文件组TMS_FG2,将同一表中数据存储在两个磁盘的不同物理文件中,可实现数据的并发操作,提高数据的存取效率

 为了更好地进行数据库物理结构的设计,数据库设计者有必要了解所用的DBMS的存储管理技术

六、物理结构设计策略

为了提高系统的性能,数据库的物理结构设计应该根据应用系统查询处理要求生成顺序存储文件、堆存储文件或聚集文件等

  • 通过改变存储结构提高存取效率。利用DBMS提供的存储管理技术将数据的易变部分与稳定部分、经常存取部分和存取频率较低的部分分开存放。比如对于数据备份和日志文件备份,由于数据量很大且只在故障恢复时才使用,可以考虑存放在容量大、访问速度较慢的三级存储介质上
  • 通过完善数据布局,减少访问磁盘的I/O操作的次数。将日志文件与与数据库对象放在不同的磁盘上,将表和索引放在不同的磁盘上,将较大的表放在两个磁盘上
  • 有效利用驱动器的并发存取能力,加快存取数据的速度,改进系统的性能

七、小结

完成数据库的物理结构设计后,就可以在选定的DBMS上进行数据库的实施了

1、实施前,数据库设计人员可能还需要对DBMS提供的一些影响存取时间和存储空间分配的系统配置变量、存储分配参数等根据应用环境进行优化配置

2、然后再建立数据库的三级模式,即先创建数据库、库中的基本表,再基于库中的表,创建视图和索引等

八、总结

在装入数据后,就可为应用系统提供数据支持,应用系统通过DBMS来实现对磁盘中数据库中的数据进行查询和更新。

至此,完成了满足数据库应用系统需求的底层数据库的设计与实现 

通过数据库原理到应用的学习,我们应该要具备基于数据库技术的数据抽象与建模能力,有能力对获取的数据进行正确地组织、存储和管理

相关文章:

数据库物理结构设计-定义数据库模式结构(概念模式、用户外模式、内模式)、定义数据库、物理结构设计策略

一、引言 如何基于具体的DBMS产品,为数据库逻辑结构设计的结果,即关系数据库模式,制定适合应用要求的物理结构 1、在设计数据库物理结构前,数据库设计人员首先 要充分了解所用的DBMS产品的功能、性能和特点,包括提供…...

QT加载安装外围依赖库的翻译文件后翻译失败的现象分析:依赖库以饿汉式的形式暴露单例接口导致该现象的产生

1、前提说明 VS2019 QtClassLibaryDll是动态库,QtWidgetsApplication4是应用程序。 首先明确:动态库以饿汉式的形式进行单例接口暴露; 然后,应用程序加载动态库的翻译文件并进行全局安装; // ...QTranslator* trans = new QTranslator();//qDebug() << trans->…...

13_旷视轻量化网络--ShuffleNet V2

回顾一下ShuffleNetV1:08_旷视轻量化网络--ShuffleNet V1-CSDN博客 1.1 简介 ShuffleNet V2是在2018年由旷视科技的研究团队提出的一种深度学习模型&#xff0c;主要用于图像分类和目标检测等计算机视觉任务。它是ShuffleNet V1的后续版本&#xff0c;重点在于提供更高效的模…...

Linux系统编程--进程间通信

目录 1. 介绍 1.1 进程间通信的目的 1.2 进程间通信的分类 2. 管道 2.1 什么是管道 2.2 匿名管道 2.2.1 接口 2.2.2 步骤--以父子进程通信为例 2.2.3 站在文件描述符角度-深度理解 2.2.4 管道代码 2.2.5 读写特征 2.2.6 管道特征 2.3 命名管道 2.3.1 接口 2.3.2…...

docker-本地部署-后端

前置条件 后端文件 这边是一个简单项目的后端文件目录 docker服务 镜像文件打包 #命令行 docker build -t author/chatgpt-ai-app:1.0 -f ./Dockerfile .红框是docker所在文件夹 author&#xff1a;docker用户名chatgpt-ai-app&#xff1a;打包的镜像文件名字:1.0 &#…...

TLS + OpenSSL + Engine + PKCS#11 + softhsm2 安全通信

引擎库路径只有在 /lib 下才能被 "LOAD" 识别到&#xff0c;OpenSSL的ReadMe给的示例在/lib&#xff0c;大概是在构建OpenSSL时默认的configure指定了lib路径 // #define PKCS11_ENGINE_PATH "/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so" #define …...

Unity实现简单的MVC架构

文章目录 前言MVC基本概念示例流程图效果预览后话 前言 在Unity中&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;框架是一种架构模式&#xff0c;用于分离游戏的逻辑、数据和用户界面。MVC模式可以帮助开发者更好地管理代码结构&#xff0c;提高代码的可维护性…...

【简单讲解下OneFlow深度学习框架】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

FastGPT 调用Qwen 测试Hello world

Ubuntu 安装Qwen/FastGPT_fastgpt message: core.chat.chat api is error or u-CSDN博客 参考上面文档 安装FastGPT后 登录&#xff0c; 点击右上角的 新建 点击 这里&#xff0c;配置AI使用本地 ollama跑的qwen模型 问题&#xff1a;树上有3只鸟&#xff0c;开了一枪&#…...

Golang-GMP

GMP调度 golang-GMP语雀笔记整理 GMP调度设计目的&#xff0c;为何设计GMP?GMP的底层实现几个核心数据结构GMP调度流程 设计目的&#xff0c;为何设计GMP? 无论是多进程、多线程目的都是为了并发提高cpu的利用率&#xff0c;但多进程、多线程都存在局限性。比如多进程通过时…...

【PythonWeb开发】Flask自定义模板路径和静态资源路径

在大型的 Flask 项目中&#xff0c;确实可能会有多个子应用&#xff08;Blueprints&#xff09;&#xff0c;每个子应用可能都有自己的静态文件和模板。为了更好地管理和组织这些资源&#xff0c;可以使用static_folder 和template_folder 属性来统一管理。必须同时设置好主应用…...

Java对象创建过程

在日常开发中&#xff0c;我们常常需要创建对象&#xff0c;那么通过new关键字创建对象的执行中涉及到哪些流程呢&#xff1f;本文主要围绕这个问题来展开。 类的加载 创建对象时我们常常使用new关键字。如下 ObjectA o new ObjectA();对虚拟机来讲首先需要判断ObjectA类的…...

Does a vector database maintain pre-vector chunked data for RAG systems?

题意&#xff1a;一个向量数据库是否为RAG系统维护预向量化分块数据&#xff1f; 问题背景&#xff1a; I believe that when using an LLM with a Retrieval-Augmented Generation (RAG) approach, the results retrieved from a vector search must ultimately be presented…...

Rust-11-错误处理

Rust 将错误分为两大类&#xff1a;可恢复的&#xff08;recoverable&#xff09;和 不可恢复的&#xff08;unrecoverable&#xff09;错误。对于一个可恢复的错误&#xff0c;比如文件未找到的错误&#xff0c;我们很可能只想向用户报告问题并重试操作。不可恢复的错误总是 b…...

自动化测试:使用Postman进行接口测试与脚本编写

Postman 是一种流行的 API 测试工具&#xff0c;广泛应用于开发和测试过程中。它不仅可以用于手动测试&#xff0c;还支持自动化测试和脚本编写&#xff0c;以确保 API 的可靠性和性能。本文将详细介绍如何使用 Postman 进行接口测试与脚本编写&#xff0c;帮助你更高效地进行自…...

ONLYOFFICE 8.1 桌面编辑器测评:引领数字化办公新潮流

目录 前言 下载安装 新功能概述 1.PDF 编辑器的改进 2. 演示文稿中的幻灯片版式 3.语言支持的改进 4. 隐藏“连接到云”板块 5. 页面颜色设置和配色方案 界面设计&#xff1a;简洁大方&#xff0c;操作便捷 性能评测&#xff1a;稳定流畅&#xff0c;高效运行 办公环…...

基于大语言模型LangChain框架:知识库问答系统实践

ChatGPT 所取得的巨大成功&#xff0c;使得越来越多的开发者希望利用 OpenAI 提供的 API 或私有化模型开发基于大语言模型的应用程序。然而&#xff0c;即使大语言模型的调用相对简单&#xff0c;仍需要完成大量的定制开发工作&#xff0c;包括 API 集成、交互逻辑、数据存储等…...

解锁Transformer的鲁棒性:深入分析与实践指南

&#x1f6e1;️ 解锁Transformer的鲁棒性&#xff1a;深入分析与实践指南 Transformer模型自从由Vaswani等人在2017年提出以来&#xff0c;已经成为自然语言处理&#xff08;NLP&#xff09;领域的明星模型。然而&#xff0c;模型的鲁棒性——即模型在面对异常、恶意或不寻常…...

mybatis#号和$区别

在MyBatis中&#xff0c;#{}和${}都是用于实现动态SQL的占位符&#xff0c;但它们在使用场景和安全性上有明显的区别&#xff1a; 用途区别&#xff1a; #{}主要用于传递接口传输过来的具体数据&#xff0c;如参数值&#xff0c;它可以防止SQL注入&#xff0c;因为MyBatis会…...

AI绘画 Stable Diffusion【实战进阶】:图片的创成式填充,竖图秒变横屏壁纸!想怎么扩就怎么扩!

大家好&#xff0c;我是向阳。 所谓图片的创成式填充&#xff0c;就是基于原有图片进行扩展或延展&#xff0c;在保证图片合理性的同时实现与原图片的高度契合。是目前图像处理中常见应用之一。之前大部分都是通过PS工具来处理的。今天我们来看看在AI绘画工具 Stable Diffusio…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...