网站限制访问次数/百度识图网页入口
三级模式结构
- 1. 外模式(External Schema)——“用户看到的楼层”
- 2. 概念模式(Conceptual Schema)——“图书馆的核心”
- 3. 内模式(Internal Schema)——“图书馆的地下室”
- 举例
- 1. 概念模式的例子
- 2. 外模式的例子
- 3. 内模式的例子
- 代码结构与三级模式的关系总结:
- 三级模式结构的核心思想:数据独立性
- 总结
数据库系统的 三级模式结构(Three-Level Architecture)是为了帮助我们更好地理解和管理数据而设计的一个模型。它将数据分成了三个层次——就像建筑物的不同楼层,每一层负责不同的任务,这样不仅能让系统更灵活,还能使用户在不同的需求下更方便地使用数据库。
想象一下你在管理一家大型图书馆,书籍是数据库中的数据,而不同的人——读者、管理员、馆长——对这些书籍有不同的需求和访问方式。三级模式结构就是为了解决这种复杂需求而设计的。让我们来看看它的每一层是如何工作的。
1. 外模式(External Schema)——“用户看到的楼层”
外模式就像是用户在图书馆里看到的书架,它定义了不同的人可以“看到”和“触摸”哪些书。每个用户(或应用程序)都可能对数据有不同的需求,比如有的人只想查某些类型的书籍,有的人需要查看书籍的详细信息。
-
生动例子:在图书馆系统中,普通读者只能看到书籍的名称、作者和简介,而管理员还能看到书籍的库存、借阅历史等。不同的“外模式”就是这些不同的用户视角——你只需要看到你关心的部分,其他部分被隐藏起来了。
-
特点:数据库系统可以为不同的用户创建多个外模式,这样每个用户就拥有一个适合自己工作的视图,而不用担心其他数据会干扰他们的任务。
再举个例子:在学校的数据库系统中,老师和学生看到的数据就不一样。学生只能看到自己的成绩,老师则可以看到所有学生的成绩和评语。老师和学生的视图都是“外模式”。
2. 概念模式(Conceptual Schema)——“图书馆的核心”
概念模式就像是图书馆中藏书的完整目录,它不偏向任何特定用户,而是对整个图书馆的书籍有一个全面的描述。它包括了所有书籍的类型、借阅规则、分类方式等等。对数据库来说,概念模式是整个数据库的逻辑结构,用来定义数据的内容、属性以及它们之间的关系。
-
生动例子:如果我们把概念模式比作图书馆的总藏书目录,那么它会包括所有书的详细信息:书名、作者、出版时间、分类编号等。它确保无论谁来查询,都能看到数据的一致性和完整性。
-
特点:只有一个概念模式,所有外模式(用户视图)都是基于这个模式创建的。它统一了数据库中的所有数据和关系,确保每个用户的视图都从同一个基础结构生成。
再举个例子:在一个银行系统中,概念模式可能定义了账户、交易记录、用户信息等的整体结构。无论是银行的客服人员还是后台的管理系统,所有这些信息的基础架构都是由概念模式定义的。
3. 内模式(Internal Schema)——“图书馆的地下室”
内模式可以比作图书馆的地下储藏室,在这里,书籍按照实际的物理方式存放和组织。我们不关心它们具体是如何被摆放在书架上或存储在仓库中的,只关心我们是否能有效地查找和借阅。数据库中的内模式就是这样一个层次,它描述了数据的物理存储方式:数据是如何存放在磁盘上的,使用了哪些索引,如何进行压缩和优化。
-
生动例子:想象一下图书馆的管理员在地下仓库里按照书的类别、借阅频率等规则整理和存放书籍。他们的工作是确保这些书能快速地被找到,甚至可以根据需求搬动或调整书架的布局,而不影响读者的使用体验。数据库的内模式也类似,它负责数据的存储和优化,而用户根本不需要关心这些技术细节。
-
特点:数据库的物理层可以根据硬件资源的变化进行优化,比如我们可以调整磁盘上的文件存储方式、引入索引来加快查询速度。这些变化不会影响上层的概念模式和外模式。
再举个例子:在一个电子商务平台的数据库中,内模式可能定义了如何将用户订单信息存储在服务器的硬盘中,如何创建索引来加速订单查询,如何分配存储空间等。
举例
为了更好地理解数据库系统的三级模式结构,我们可以用SQL代码展示外模式、概念模式和内模式的不同概念。这里我们通过创建一个简单的学生信息管理数据库来解释。
1. 概念模式的例子
概念模式描述的是数据库的整体结构。下面的代码展示了一个用于存储学生信息和课程成绩的表结构。这就是概念模式的例子,它定义了数据库的核心结构,包括所有数据的关系和约束。
CREATE TABLE Students (student_id INT PRIMARY KEY,student_name VARCHAR(50),major VARCHAR(50),enrollment_year INT
);CREATE TABLE Courses (course_id INT PRIMARY KEY,course_name VARCHAR(50),credit_hours INT
);CREATE TABLE Enrollments (enrollment_id INT PRIMARY KEY,student_id INT,course_id INT,grade CHAR(1),FOREIGN KEY (student_id) REFERENCES Students(student_id),FOREIGN KEY (course_id) REFERENCES Courses(course_id)
);
- 概念模式分析:
Students
表定义了学生的基本信息,如学生ID、姓名、专业和入学年份。Courses
表定义了课程的信息,如课程ID、名称和学分。Enrollments
表则是一个关联表,用来记录学生与课程的关系(即学生选了哪些课,并且成绩如何)。它通过student_id
和course_id
两个外键与Students
和Courses
表相连。
这个结构是数据库的核心,它确保数据之间的关系和完整性,比如:学生不能选不存在的课程,每个学生只能有一个唯一的ID。这些定义属于概念模式,它是整个数据库系统的逻辑设计。
2. 外模式的例子
外模式是用户或应用程序与数据库交互的视图。不同的用户可能关心数据的不同部分,我们可以通过 视图(View) 来创建用户所需的特定数据视图。
CREATE VIEW StudentGrades AS
SELECT s.student_id,s.student_name,e.course_id,c.course_name,e.grade
FROM Students s
JOIN Enrollments e ON s.student_id = e.student_id
JOIN Courses c ON e.course_id = c.course_id;
- 外模式分析:
- 这里我们创建了一个名为
StudentGrades
的视图,它展示了学生的姓名、他们所选的课程名称及相应的成绩。 - 对于学生或教师,他们不需要直接接触原始的
Students
、Courses
和Enrollments
表,而是可以通过这个视图来简单地查看学生的课程成绩信息。
- 这里我们创建了一个名为
通过这样的视图,用户看到的数据是经过筛选、处理后的,他们不用担心底层的表结构如何设计。这就是数据库的外模式,为不同用户提供特定的访问权限和数据视图。
3. 内模式的例子
内模式是数据库的物理层,描述了数据的存储方式。虽然我们在SQL中看不到直接的内模式代码,但是它包含了数据的索引、分区、文件存储等优化细节。我们可以通过创建索引来优化查询效率,下面是一个简单的例子:
CREATE INDEX idx_student_name ON Students(student_name);
- 内模式分析:
- 这里我们创建了一个基于
student_name
列的索引,这样在查询学生时,如果我们按学生姓名查询,数据库可以更快地定位到对应的记录。
- 这里我们创建了一个基于
虽然用户和应用程序看不到这些物理细节,但它们对数据库的性能有很大影响。数据库管理系统(DBMS)在后台负责这些细节,比如文件如何存储在磁盘上、如何分配内存、如何创建索引以优化查询速度等等。
代码结构与三级模式的关系总结:
- 概念模式:通过创建表来定义数据库中的逻辑结构,确定数据的属性和关系,比如学生、课程和选课的关联结构。
- 外模式:使用视图为不同用户创建自定义的数据视图,提供不同的权限和简化的数据展示方式,让用户专注于自己关心的数据,而不必理解底层复杂的数据库结构。
- 内模式:涉及数据库的物理存储和优化,如索引、存储文件的格式等,这些操作提升了数据库性能,尽管用户不会直接接触到这些内容。
三级模式结构的核心思想:数据独立性
通过三级模式结构,我们可以确保数据独立性。这就像图书馆的“地下储藏室”与“藏书目录”是分开的,管理员可以调整储藏室的布局,而不需要重新编制藏书目录;同样地,用户可以修改自己的“视图”(外模式),而不会影响数据库的整体结构。
- 物理数据独立性:如果数据库的存储方式发生了变化(例如我们换了一种更快的存储设备),只要内模式调整一下,概念模式和外模式都不需要改动。
- 逻辑数据独立性:如果我们改变了概念模式中的数据结构(比如把某个表拆成了多个表),只要外模式做一些调整,用户的查询方式可以保持不变。
总结
三级模式结构为数据库提供了一种灵活的设计,使得数据库在存储、管理和使用数据时更加高效和可靠。通过外模式、概念模式和内模式,数据库系统可以同时满足用户对数据的个性化需求,保持数据的一致性,还能优化底层的数据存储结构。这种结构使得数据库在面对复杂应用时,既灵活又健壮,能够适应各种场景的变化和扩展。
相关文章:

数据库三级模式结构
三级模式结构 1. 外模式(External Schema)——“用户看到的楼层”2. 概念模式(Conceptual Schema)——“图书馆的核心”3. 内模式(Internal Schema)——“图书馆的地下室”举例1. 概念模式的例子2. 外模式的…...

【小程序websocket最佳实践,有心跳和断线重连】
小程序websocket最佳实践,有心跳和断线重连 封装了WebSocketHandler类,用于管理websocket链接,保证链接的稳定和可靠,该类主要适用于小程序,但其设计思想和方法也适用于其他平台。 export default class WebSocketHa…...

自然资源部最新Nature正刊!!!
2024年8月21日,国际顶级期刊《Nature》发表了自然资源部第二海洋研究所李家彪院士为通讯作者,张涛为第一作者的论文“超慢速扩张加克洋中脊的高变化岩浆增生”。这一成果颠覆了国际海洋学术界半个多世纪以来一直认为的超慢速扩张洋中脊岩浆供给极度贫瘠的…...

git分支-创建、合并、删除
Git会将每次提交串成一条时间线,这条时间线就是一个分支。在最初,只有一个master分支 在目录下创建项目 对目录进行输入 项目被修改 创建dev分支 合并分支 删除dev分支...

Python:Spoonfed - (2-10) 激励选择脚本(搬砖)
https://www.patreon.com/posts/python-spoonfed-31572219 2019年11月15日 利用上一课的选择函数,我们现在可以拼凑出一些脚本(有一些事情我们还没有解释,但应该很容易理解)。以下代码将允许您选择当前所选对象的父对象、顶级对…...

VS Code Python 文件导入提示 xxx Module 不存在解决方式
VS Code Python 文件导入提示 xxx Module 不存在解决方式 引言正文如何打开 setting.json 文件引言 之前在 https://blog.csdn.net/u011699626/article/details/142612579?spm=1001.2014.3001.5501 一文中我们介绍了如何配置 VS code 中 Jupyter Notebook 的文件导入环境,这…...

Android中的Activity与Fragment:深入解析与应用场景
在Android应用开发中,Activity和Fragment是两个核心概念,它们各自扮演着不同的角色,共同构成了用户界面的基础。理解并熟练掌握这两个组件的使用,对于开发高效、灵活且用户友好的Android应用至关重要。本文将深入解析Activity与Fr…...

Flux【lora模型】【真人模型】:极致逼真,小红书真实风格|旅游拍照|景点打卡
大家好我是安琪!!! 今天和大家推荐一款基于Flux训练的真人写实的lora模型:Flux_小红书真实风格丨日常照片丨极致逼真。一看这个模型的命名,就可以猜测出以小红书日常真实拍摄的照片为数据集训练而来,该模型…...

python基础语法--顺序结构
Python中的顺序结构主要包括流程控制语句,如 if、while 和 for 语句。这些语句允许你在程序中定义不同的执行路径,从而根据条件或循环次数来改变代码的执行流程。下面详细介绍这些语句的使用方法和示例。 if 语句 if 语句用于根据某个条件来决定是否执…...

软件游戏运行缺少vcruntime140.dll怎么办?总结四种有效简单方法
1. 文件基本信息 1.1 定义与作用 vcruntime140.dll是Microsoft Visual C 2015 Redistributable Package的一部分,它包含了C运行时库,用于支持使用Visual C开发的Windows应用程序。这个动态链接库(DLL)文件提供了程序执行时所需的…...

(undone) 阅读 MapReduce 论文笔记
参考:https://pdos.csail.mit.edu/6.824/papers/mapreduce.pdf 摘要:简单介绍了 MapReduce 是在大型分布式系统上工作的 Introduction 的内容总结: 1.介绍背景:为什么我们需要分布式系统?MapReduce 的意义是哪些 2.简…...

sql注入工具升级:自动化时间盲注、布尔盲注
项目地址:https://github.com/iamnotamaster/sql-injecter 给我之前写的sql注入脚本进行了一些升级,此文章就是对升级内容的分析,升级内容如下: 使用占位符foo来填充payload里需要经常修改的部分 自动判断循环 支持爆破和二分查…...

字节C++抖音直播一面-面经总结
1、Python和C的区别,Python的程序执行过程是怎样的?C和C呢? 解释型-编译型 不用分号-用分号 自动垃圾回收-delete 相对较慢-执行速度快 丰富的库-标注模板库 .py-解释器-字节码-PVM-输出结果 c-c with class malloc-new 标准库-STL 不重载-函数重载和…...

浅谈stm32的GPIO引脚配置模式
STM32的GPIO(通用输入输出)引脚可以被配置为多种模式,以适应不同的应用场景。下面介绍一些一些常见的STM32 GPIO引脚模式: 模拟输入模式(Analog Input Mode):在这种模式下,GPIO引脚被…...

Meta Orion 原型的生产成本约为 10,000 美元
Orion Meta 是一项突破性的增强现实项目,展示了其迄今为止最先进的原型。经过多年的研究和数百万美元的开发,Meta 打造出了一款仅重 98 克的增强现实眼镜,能够将全息图投射到视线范围内的任何地方。这款眼镜由一个先进的输入系统驱动…...

MATLAB GUI设计原则与实践
MATLAB的图形用户界面(GUI)设计是一种强大的工具,用于创建交互式应用程序。良好的GUI设计不仅能够提升用户体验,还能提高应用程序的可用性和效率。本文将探讨MATLAB GUI设计的原则,并提供一些实用的代码示例。 1. GUI…...

电脑桌面显示不完整
UOS统信由于误操作,导致桌面放大了,桌面显示不完整,本文主要介绍如何恢复到正常的桌面。 文章目录 一、问题描述二、解决方案 一、问题描述 电脑使用过程中出现显示器只能显示部分画面,桌面图标异常变大,桌面随鼠标移…...

Spring Boot与观察者模式实现数据同步更新机制
在Spring Boot应用程序中实现观察者模式来同步更新数据是一种强大的设计方式,它可以帮助你构建响应式和松耦合的应用程序。观察者模式通常用于当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的基本概念 •Subject(被观察者):维护了一个…...

毕业设计选题:基于ssm+vue+uniapp的校园订餐小程序
开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…...

每日OJ题_牛客_HJ108求最小公倍数_C++_Java
目录 牛客_HJ108求最小公倍数_C_Java 题目解析 C代码 Java代码 牛客_HJ108求最小公倍数_C_Java 求最小公倍数_牛客题霸_牛客网 题目解析 A 和 B 的最小公倍数 A * B / 两者的最大公约数。最大公约数:辗转相除法。 C代码 #include <iostream> #includ…...

【项目总结】工程构建思路分析与分享
背景 写这篇文章的初衷是因为国产化项目临近结束,在做项目总结时,回想起了代码管理的相关问题。虽然工程搭建及管理是一个高级工程师必备的能力,但似乎每次一个新项目立项,都是从老的项目中拷贝工程框架,再进行定制修…...

3、AI测试辅助-测试计划编写(自动生成任务甘特图)
AI测试辅助-测试计划编写 一、创建测试计划1.1 使用ChatGpt生成测试计划1.1.1 测试计划细化-测试任务排期1.1.2 测试计划细化-利用plantuml输出甘特图(不推荐)1.1.3 测试计划细化-利用mermaid 生成甘特图(推荐) 一、创建测试计划 …...

MySQL:进阶巩固-触发器
目录 一、基本概述二、语法结构三、基本使用3.1 新增的触发器3.2 修改的触发器3.3 删除的触发器 一、基本概述 触发器是与表有关的数据对象,在INSERT/UPDATE/DELETE之前或者是之后,触发并执行触发器中定义的SQL语句的集合,触发器的这种特性可…...

python获取百度地图路径规划
自制语音助手想做一个查询交通路线的功能,于是就想到了百度地图。在百度地图的服务器端应用中,提供了“轻量级路线规划”API接口,正好可以满足需求。要用这个接口,需要注册百度地图账号并创建一个服务器端的应用。有关开通百度地图…...

Spring Boot 进阶- Spring Boot 自定义拦截器详解
上篇文章中我们创建了一个RestFul风格的接口,并且介绍了如何对其结果进行格式化的方式。这篇文章我们来讲在SpringMVC中常用到的另一个概念拦截器。 什么是拦截器? 在Spring MVC中拦截器有点类似于在Servlet中的过滤器的概念,主要是用来拦截用户求,并且对用户请求进行相应…...

ACM第三次考核题解
ACM第三次考核题解 题目序号难度题目编号题目考察知识点1签到题A这是一道很难的题!!!输出2迷之难度F神说要有光,于是有了手电筒贪心3简单BThis is a real English problem!思维 英语4简单C玩具简单排序5简单I“近义词…...

基于Vue3内置的lodash函数库实现防抖节流
前言 防抖节流是可以说是一种优化组件性能的技巧,可以有效减少组件中的渲染次数和计算量,从而提高组件的响应速度和用户体验。在Vue3中可以使用lodash库中的debounce和throttle函数来分别实现防抖和节流。当然也可以自行设计实现防抖节流函数࿰…...

ls -a有什么作用
ls -a 是一个在类Unix操作系统(如Linux、macOS)中使用的命令,用于列出目录中的所有文件和目录,包括那些以.开头的隐藏文件。 具体作用如下: ls: 这是一个列出目录内容的命令。 -a: 这是一个选项,表示"…...

LLM - 使用 RAG (检索增强生成) 多路召回 实现 精准知识问答 教程
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142629289 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 RAG (R…...

编程语言图书创作要注意的事情有哪些?
编程语言图书的创作是一项复杂且具有挑战性的任务,需要作者深入理解技术、清晰表达,并考虑读者的学习体验。一本优秀的编程书籍不仅能够教授技术知识,更能引导读者逐步深入,激发他们的思考和实际应用能力。以下将详细探讨编程语言…...