Schema (数据库中的Schema)

数据库中的Schema,为数据库对象的集合,一个用户一般对应一个schema。

官方定义如下:
A schema is a collection of database objects (used by a user.).
schema objects are the logical structures that directly refer to the database’s data.
A user is a name defined in the database that can connect to and access objects.
schemas and users help database administrators manage database security.

从定义中我们可以看出schema为数据库对象的集合,为了区分各个集合,我们需要给这个集合起个名字,这些名字就是我们在企业管理器的方案下看到的许多类似用户名的节点,这些类似用户名的节点其实就是一个schema,schema里面包含了各种对象如tables views sequences stored procedures synonyms indexes clusters and database links。

一个用户一般对应一个schema 该用户的schema名等于用户名,并作为该用户缺省schema。这也就是我们在企业管理器的方案下看到schema名都为数据库用户名的原因。oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决(oracle中虽然有create schema语句,但是它并不是用来创建一个schema的),在创建一个用户的同时为这个用户创建一个与用户名同名的schema并作为该用户的缺省schema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同,所以我们可以称schema为user的别名,虽然这样说并不准确,但是更容易理解一些。

一个用户有一个缺省的schema,其schema名就等于用户名,当然一个用户还可以使用其他的schema。如果我们访问一个表时,没有指明该表属于哪一个schema中的,系统就会自动给我们在表上加上缺省的sheman名。比如我们在访问数据库时,访问scott用户下的emp表,通过select from emp 其实,这sql语句的完整写法为select from scott.emp。在数据库中一个对象的完整名称为schema.object,而不属user.object。类似如果我们在创建对象时不指定该对象的schema,在该对象的schema为用户的缺省schema。这就像一个用户有一个缺省的表空间,但是该用户还可以使用其他的表空间,如果我们在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。

sql> grant dba to scott
sql> create table test(name char(10))
table created.
sql> create table system.test(name char(10))
table created.
sql> insert into test values(' scott' )
1 row created.
sql> insert into system.test values(' system' )
1 row created.
sql> commit
commit complete.
sql> conn system/manager
connected.
sql> select from test
name
----------
system
sql> alter session set current_schema = scott --改变用户缺省schema名
session altered.
sql> select from test
name
----------
scott
sql> select owner table_name from dba_tables where table_name=upper(' test' )
owner table_name
------------------------------ ------------------------------
scott test
system test

--上面这个查询就是我说将schema作为user的别名的依据。实际上在使用上,schema与user完全一样,没有什么区别,在出现schema名的地方也可以出现user名。
### 数据库 Schema 的概念与设计 数据库 **Schema** 是指数据库的整体逻辑结构描述,定义了数据库中的对象及其之间的关系。它是数据库的核心组成部分之一,直接影响到系统的性能、扩展性和易用性[^1]。 #### 1. 数据库 Schema 概述 数据库 Schema 描述了一个数据库的逻辑视图,包括表、字段、索引、约束等内容。在实际应用中,Schema 不仅限于简单的数据存储,还涉及复杂的业务需求建模。例如,在学生宿舍管理系统的设计过程中,虽然功能较为基础,但仍需关注基本的数据操作和安全性问题[^2]。 #### 2. 表结构设计的关键要素 在 TiDB 这样的分布式数据库中,Schema 设计需要特别注意分区策略。每张表会分配一个唯一的 Table ID,并按 Region 划分数据存储范围,默认大小为 96MB。这种设计有助于提高查询效率并支持大规模并发访问[^4]。 以下是表结构设计的一些核心原则: - **字段选择**: 字段应尽可能精简,避免冗余。 - **主键设置**: 主键用于唯一标识记录,通常推荐使用自增整数或 UUID。 - **索引优化**: 合理配置索引可以显著提升查询速度,但也可能增加写入开销。 ```sql CREATE TABLE students ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), dormitory_id INT, INDEX (dormitory_id) ); ``` #### 3. 关系建立与规范化 为了减少重复数据并增强一致性,数据库设计常采用范式化方法。常见的第三范式(3NF)能够有效消除传递依赖,从而简化更新操作。然而,在某些场景下适当反范式化也能带来性能收益。 #### 4. Schema 变更管理 随着项目发展,原有 Schema 往往无法满足新需求,此时就需要对其进行调整。频繁修改元数据不仅增加了维护难度,还会对线上服务造成干扰。为此建议采取如下措施来降低风险[^3]: - 提前规划好未来扩展方向; - 使用版本控制工具跟踪改动历史; - 测试环境充分验证后再部署至生产端。 ### 结论 综上所述,良好的数据库 Schema 设计对于构建高效稳定的应用至关重要。从初始架构搭建到最后运维阶段都需要持续投入精力加以改进和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值