Skip to content

DB2 - 模式

本章介绍了模式(schema)的概念,它是Db2数据库中一个基本的组织和安全机制。

模式是数据库对象的命名集合,例如表、视图、触发器和存储过程。它在数据库中充当逻辑分组机制,或者说是一个“命名空间”。模式对于组织数据库和管理权限至关重要。

模式的主要优点之一是,只要它们属于不同的模式,您就可以在单个数据库中拥有多个同名对象。例如,您可以拥有SALES.CUSTOMERS和MARKETING.CUSTOMERS,它们是两个不同的表。

Db2数据库中的每个对象都由其两部分名称唯一标识:schema_name.object_name。如果您在引用对象时未指定模式,Db2将使用CURRENT_SCHEMA特殊寄存器中定义的模式,该模式通常默认为您的用户ID。

要检查您当前的默认模式,请查询CURRENT_SCHEMA特殊寄存器。这是获取此信息的标准SQL方式。

VALUES CURRENT_SCHEMA;

输出:

1
-----------
DB2INST1
1 record(s) selected.

您可以在数据库会话期间更改默认模式。这有助于避免重复键入模式名称。

SET SCHEMA = 'NEWSCHEMA';

执行此命令后,任何像CREATE TABLE my_table...这样的SQL语句都将创建NEWSCHEMA.MY_TABLE。

您可以显式地创建一个新模式。或者,您可以将模式的所有权分配给其他用户或角色。

语法:

CREATE SCHEMA <schema_name>
AUTHORIZATION <user_or_role_name>;

示例:创建一个名为FINANCE的模式,其所有者为用户db2admin。

CREATE SCHEMA FINANCE AUTHORIZATION db2admin;

当具有IMPLICIT_SCHEMA权限(默认授予PUBLIC)的用户首次使用新的、有效的模式名称创建对象时,模式也会被隐式创建。

让我们通过一个实际示例,使用模式将员工数据分离为专业和个人类别。

首先,我们创建两个不同的模式作为表的容器。

-- 为专业员工数据创建模式
CREATE SCHEMA PROFESSIONAL;
-- 为个人员工数据创建模式
CREATE SCHEMA PERSONAL;

现在,我们创建两个表,都命名为EMPLOYEES,但分别位于不同的模式中。请注意每个表不同的列定义。

-- 专业信息表
CREATE TABLE PROFESSIONAL.EMPLOYEES (
employee_id INT NOT NULL PRIMARY KEY,
job_title VARCHAR(50),
hire_date DATE,
salary DECIMAL(10, 2)
);
-- 个人信息表
CREATE TABLE PERSONAL.EMPLOYEES (
employee_id INT NOT NULL PRIMARY KEY,
full_name VARCHAR(100),
date_of_birth DATE,
home_phone VARCHAR(20),
address VARCHAR(200)
);

插入或查询数据时,我们必须使用完全限定的schema.table名称,以避免歧义。

-- 向专业信息表插入数据
INSERT INTO PROFESSIONAL.EMPLOYEES (employee_id, job_title, hire_date, salary)
VALUES (101, 'Software Engineer', '2023-08-15', 85000.00);
-- 向个人信息表插入数据
INSERT INTO PERSONAL.EMPLOYEES (employee_id, full_name, date_of_birth, address)
VALUES (101, 'Jane Doe', '1995-05-20', '123 Main St, Anytown');
-- 从两个表中检索员工 101 的数据
SELECT * FROM PROFESSIONAL.EMPLOYEES WHERE employee_id = 101;
SELECT * FROM PERSONAL.EMPLOYEES WHERE employee_id = 101;

本练习演示了模式如何实现清晰的数据组织并防止命名冲突,这在复杂的数据库环境中至关重要。