什么是Schema?

本文解释了数据库中Schema的概念,它是数据库对象的集合,包括表、视图等。Schema用于组织和区分不同用户的数据,通常一个用户对应一个Schema,且Schema名与用户名相同。在SQL Server和Oracle中,创建用户时会自动创建同名的Schema。

数据库中Schema(模式)概念的理解

在学习SQL的过程中,会遇到一个让你迷糊的Schema的概念。实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表、视图、存储过程、索引等。为了区分不同的集合,就需要给不同的集合起不同的名字,默认情况下一个用户对应一个集合,用户的schema名等于用户名,并作为该用户缺省schema。所以schema集合看上去像用户名。

如果把database看作是一个仓库,仓库很多房间(schema),一个schema代表一个房间,table可以看作是每个房间中的储物柜,user是每个schema的主人,有操作数据库中每个房间的权利,就是说每个数据库映射的user有每个schema(房间)的钥匙。

我们访问一个表时,没有指明该表属于哪一个schema中的,系统就会自动给我们在表上加上缺省的sheman名。在数据库中一个对象的完整名称为schema.object,而不属user.object。

在MySQL中创建一个Schema和创建一个Database的效果好像是一样的,但是在sqlserver和orcal数据库中效果又是不同的。

在SQL Server 2000中,user和schema总有一层隐含的关系,让我们很少意识到其实user和schema是两种完全不同的概念,假如我们在某一数据库中创建了用户Bosco,那么此时后台也为我们默认的创建了schema【Bosco】,schema的名字和user的名字相同。

在SQL Server 2005中,为了向后兼容,当用sp_adduser存储过程创建一个用户的时候,sqlserver2005同时也创建了一个和用户名相同的schema,然而这个存储过程是为了向后兼容才保留的,当我们用create user创建数据库用户时,我们可以用该用户指定一个已经存在的schema作为默认的schema,如果我们不指定,则该用户所默认的schema即为dbo schema,dbo房间(schema)好比一个大的公共房间,在当前登录用户没有默认schema的前提下,如果你在大仓库中进行一些操作,比如create table,如果没有制定特定的房间(schema),那么你的物品就只好放进公共的dbo房间(schema)了。但是如果当前登录用户有默认的schema,那么所做的一切操作都是在默认的schema上进行。

在Oracle数据库中不能新建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决,在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同。

文章转自:https://www.cnblogs.com/csniper/p/5509620.html

03-08
### 什么是Schema 在不同上下文中,Schema有着不同的含义。在数据库环境中,Schema指的是逻辑容器或命名空间,用来组织和分类相关的数据库对象[^2]。这些对象包括但不限于表、视图、索引、序列以及存储过程等。 对于XML而言,Schema是一种描述文档结构的方式,旨在验证XML文件的内容是否遵循预定义的规则集合。相较于DTD(Document Type Definition),XML Schema提供了更多的灵活性和支持特性,比如支持多种数据类型及命名空间等功能[^4]。 ### 数据库中的Schema使用方法 为了查询当前会话所使用的默认Schema,在Oracle SQL中可通过执行如下命令实现: ```sql SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') AS SCHEMA_NAME FROM DUAL; ``` 而在Java编程环境下,则能够借助JDBC API来获取连接对应的默认Schema名称。具体操作涉及调用`Connection.getSchema()`这样的API接口[^1]。 ### 编程环境下的Schema应用实例——Apache Spark 当涉及到大数据处理框架如Apache Spark时,Schema被赋予了新的意义。这里特指DataFrame/Dataset里各列的数据布局说明。通过指定StructType类型的变量即可完成自定义Schema创建;而一旦拥有了明确的Schema信息之后,便可以在读取外部数据源过程中加以利用,从而提高性能并简化后续数据分析流程[^3]。 ```python from pyspark.sql.types import StructType, StructField, StringType, IntegerType # 创建一个简单的模式 custom_schema = StructType([ StructField("name", StringType(), True), StructField("age", IntegerType(), False)]) df_with_custom_schema = spark.read.csv(path="example.csv", header=True, schema=custom_schema) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值