以一个具体的例子来谈:
假设有一个学校管理系统的数据库,其中包括学生信息、课程信息和成绩信息。
-
外部模式(用户模式):
- 对于学生,他们可能只关心自己的成绩和课程信息,不需要了解其他学生的信息。因此,可以设计一个外部模式,让学生只能访问与自己相关的数据,比如一个简单的学生信息界面,可以显示个人成绩和课程安排。
- 对于教师,他们可能需要访问所有学生的成绩信息,以及课程的教学安排等。因此,可以设计一个外部模式,让教师可以查询整个班级或课程的成绩情况。(直接呈现给程序用户的视图,也就是我们在操作某程序时设计者给出的数据库访问接口)
-
概念模式:
- 在学校管理系统中,概念模式定义了整个数据库的逻辑结构,包括学生、课程和成绩等实体,以及它们之间的关系,比如学生选修课程、课程成绩等。这个概念模式是对整个学校管理系统的全局视图,描述了数据库中的所有数据及其关系。(也就是我们这些数据库设计者或是DBA在操作数据库管理系统时,比如mysql,我们可以通过DataGrip等IDE查看到数据库的所有表、所有视图,我们在这一层级上操作数据库,建表、增删改查等一系列操作)
-
内部模式:
- 内部模式定义了数据在物理存储介质上的组织方式,比如学生信息、课程信息和成绩信息在数据库文件中的存储格式、索引结构和存储位置等。例如,学生信息可能以一种表格的形式存储在数据库文件中,课程信息可能以另一种格式存储,成绩信息可能以另一种方式存储。(可能涉及到底层数据库的存储方式,hash表或B+树等,这是关于数据库的更底层)
举例来说,假设有一个外部模式用于学生查询个人成绩信息,概念模式定义了学生、课程和成绩之间的关系,而内部模式则确定了在数据库中,学生信息、课程信息和成绩信息是如何物理存储的。
如果要修改数据库的存储结构,比如改变成绩信息的存储格式或索引方式,只需修改内部模式,而不需要修改外部模式或概念模式。这样做可以保持学生和教师的查询界面不变,同时确保数据库的逻辑结构保持不变,只是物理存储结构发生了变化。