如何理解数据库的三级模式

说实话,我在学习数据库三级模式结构的时候,纠结了很长一段时间。
可以将其视为数据库的三层服装。
每一层都有用。

外部模式层简单来说就是用户可以直接触摸的界面。
例如,如果您使用MySQL,您看到的数据库和表结构以及您创建的SQL查询都属于外部模式。
不同的用户可能会看到不同的观点。
具有较高权限的用户可以看到整个表,而较低权限的用户只能看到部分表。
记得当我在工作中做项目时,一位新同事问我为什么连桌子都打不开。
后来我发现外部模式权限没有正确授予。
我自己没有运行过,但我记得数据在 X 左右,但我建议检查一下。

概念模型层是数据库管理员或设计者看到的全景图。
所有表之间的关联、数据完整性规则(例如年龄必须大于0)以及索引的构建方式都是由概念模式决定的。
有趣的是,这一层与使用的特定数据库(Oracle 或 SQL Server)关系不大,但与数据结构的设计方式有很大关系。
我曾经接手过一个杂乱的项目。
概念模式设计混乱,表之间存在循环依赖关系。
修复它真是一场噩梦。

内部模式层是数据在硬盘上的存储方式。
比如B+树索引是如何组织的,数据块有多大,是使用堆存储还是聚合存储等,所有这些细节都是内部模式的。
说实话,正常开发中你不需要太担心这一层,但是时不时就会遇到陷阱。
例如,我的系统突然变慢,经过长时间的搜索,我发现内部模式缓存设置太小,导致每次查询都要读磁盘。
那时,我不明白为什么我的系统管理员更改的参数没有生效。
最终我发现它被某些中间件覆盖了。

这三层的好处是,如果用户的需求发生变化,比如增加一个新字段,只需要改变概念模式,外部模式就会相应改变,而内部模式保持不变。
我学习的时候,老师举了一个例子,说当公司雇用新的销售人员时,他们只需要授予他们查看外部模式中某些表的权限即可。
无需更改概念或内部模式中的词语。
这称为逻辑独立和物理独立。

但是,有时可能会很麻烦。
例如,如果概念模型设计得不好,对内部模型的更改可能需要完全重做外部模型。
我曾经参与过一次小型数据库重构,因为概念模式设计得不好。
在最终确定内部模式后,我们必须重写大部分外部模式。
我们加班加点,直到真正崩溃。
坦率地说,在设计这个时,尽早花时间在概念模型上会为你节省很多精力。

我记得数据大约是X,但我建议检查一下。

数据库系统的三级模式包括概念模式内模式

三层模型包括外部模型、概念模型和内部模型。

外部模式是用户看到的数据的逻辑结构。
例如,在财务系统中,会计师看到总账视图并有不同的报告要求。

概念模式是全局逻辑结构。
就像2 02 0年设计的ERP系统一样,数据模型是所有用户共享的。

内部模式是物理存储方式。
例如,2 02 1 年,某银行数据库使用了InnoDB引擎并定义了表空间分配。

外部架构更改不会影响概念架构。
例如,要添加报表字段,您只需更改外部架构映射即可。

修改概念模式时要小心。
例如,2 02 2 年电子商务系统将进行重构。
概念模型的变化将需要所有外部模型的调整。

内部模式取决于硬件。
例如,国有企业在2 02 3 年升级到NVMe存储时,必须改变内部架构索引设计。

需要管理多种外部模式。
例如,在2 02 4 年的一个政府项目中,五个部门使用不同的外部模式来访问统一的概念模型。

数据独立性依赖于映射。
概念模式发生变化,外部模式保持不变,应用程序继续运行。

自己掂量一下。

数据库的三级模式是什么

记得有一次,我在升级公司数据库的时候,遇到了一个数据迁移的问题。
当时我们公司正在从旧系统迁移到新系统,数据量巨大,涉及财务、销售等多个部门。
我负责财务部门的数据迁移工作。

当时打开数据库,看到复杂的表结构,让我有点害怕。
突然,我想起了数据库的三级模式,外部模式、概念模式、内部模式。
我意识到我可以利用外部模式来简化迁移过程。

我找到了财务部门的外部方案,其中只有与工资和预算相关的表格。
这样我就不用处理与财务无关的数据了,大大减少了迁移的工作量。
我只需要从外部模式导出数据并将其导入到新系统中。

这个过程让我更深入的了解了三层数据库模型的好处。
通过foreign schema,我可以专注于财务部门的数据,而不用担心整个数据库的复杂结构。
这种分层设计使得数据迁移更加简单、高效。

等一下,我突然想到,如果公司其他部门也需要做数据迁移,我们是否可以提前设计相应的外部schema,以便快速响应不同的需求?这样,我们的数据库管理不是变得更容易了吗?