【转】数据库中Schema(模式)概念的理解
数据库中Schema(模式)概念的理解
在学习数据库时,会遇到一个让人迷糊的 Schema 的概念。实际上,schema 就是数据库对象的集合,这个集合包含了各种对象如:表、视图、存储过程、索引等。
如果把 database 看作是一个仓库,仓库很多房间(schema),一个 schema 代表一个房间,table 可以看作是每个房间中的储物柜。user 是每个 schema 的主人,有操作数据库中每个房间的权利,就是说每个数据库映射的 user 有每个 schema (房间)的钥匙。
默认情况下一个用户对应一个集合,用户的 schema 名等于用户名,并作为该用户缺省 schema 。所以 schema 集合看上去像用户名。访问一个表时,如果没有指明该表属于哪个 schema ,系统会自动加上缺省的 schema 。一个对象的完整名称为 schema.object ,而不属 user.object 。
在 MySQL 中创建一个 Schema 和创建一个 Database 的效果好像是一样的,但是在 SQL Server 和 Oracle 数据库中效果又是不同的。
在 SQL Server 中,user 和 schema 总有一层隐含的关系,让我们很少意识到其实 user 和 schema 是两种完全不同的概念,假如我们在某一数据库中创建了用户 Bosco ,那么此时后台也为我们默认的创建了 schema【Bosco】, schema 的名字和 user 的名字相同。在 SQL Server 2005 中,为了向后兼容,当用 sp_adduser 存储过程创建一个用户的时候, Sql Server 2005 同时也创建了一个和用户名相同的 schema,然而这个存储过程是为了向后兼容才保留的,当我们用 create user 创建数据库用户时,我们可以用该用户指定一个已经存在的 schema 作为默认的 schema ,如果我们不指定,则该用户所默认的 schema 即为 dbo schema ,dbo 房间(schema)好比一个大的公共房间,在当前登录用户没有默认 schema 的前提下,如果你在大仓库中进行一些操作,比如 create table,如果没有制定特定的房间(schema),那么你的物品就只好放进公共的 dbo 房间(schema)了。但是如果当前登录用户有默认的 schema ,那么所做的一切操作都是在默认的 schema 上进行。
在 Oracle 数据库中不能新建一个 schema ,要想创建一个 schema ,只能通过创建一个用户的方法解决,在创建一个用户的同时为这个用户创建一个与用户名同名的 schema 并作为该用户的缺省 shcema 。即 schema 的个数同 user 的个数相同,而且 schema 名字同 user 名字一一对应并且相同。
在 PostgreSQL 中 Schema 的概念与 MySQL 中 Database 的概念是等同的。在 MySQL 中可以同时访问多个 Database 对象,但在 PostgreSQL 中只能访问一个 Database 对象,但在 PostgreSQL 中可以访问多个 Schema 。
原帖地址:https://www.biaodianfu.com/database-schema.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人