请使用支持现代 CSS 与 JavaScript 的浏览器播放课件
DBPA · 3.2

数据定义

把关系模式和完整性要求定义为数据库对象

VER. 2608.2 Built with impress.js

学习目标

SQL 数据定义把关系模式、约束和存取路径定义为 DBMS 管理的对象

  1. 01说明 SQL 数据定义涉及哪些对象及其命名关系
  2. 02定义模式、基本表,并区分列级约束和表级约束
  3. 03根据取值范围、长度/精度和运算需求选择数据类型
  4. 04在 Student、Course、SC 定义中表达主码、外码和其他约束
  5. 05判断 ALTER、DROP、RESTRICT、CASCADE 带来的结构变化与依赖风险
  6. 06解释索引的产品边界、收益与代价,以及数据字典如何支撑 DBMS 运行
2/18
LEARNING OBJECTIVES

SQL 数据定义围绕数据库对象展开

不同对象有不同的创建、修改和删除方式

对象创建删除修改
模式CREATE SCHEMADROP SCHEMA标准无统一修改语句
基本表CREATE TABLEDROP TABLEALTER TABLE
视图CREATE VIEWDROP VIEW3.6 专门讲解
索引(DBMS 扩展)产品提供的 CREATE INDEX产品提供的 DROP INDEX产品提供的 ALTER INDEX 等语句
3/18
DEFINITION OBJECTS

模式先建立对象的命名空间

模式提供命名空间,表、视图和索引可以在其中定义

数据库实例、数据库、模式与表视图索引的对象命名层次
SQL
CREATE SCHEMA "S-C-SC" AUTHORIZATION WANG;

:::

模式

组织数据库对象的命名空间

AUTHORIZATION

标识模式的授权者或所有者

执行权限

执行 CREATE SCHEMA 的用户需要 DBA 权限,或已经获得 CREATE SCHEMA 权限

删除方式

DROP SCHEMA 需要明确 RESTRICT 或 CASCADE

4/18
CREATE SCHEMA

CREATE TABLE 把关系模式落成基本表

表定义同时描述列、类型和完整性约束

SQL
CREATE TABLE "S-C-SC".Student (
  Sno CHAR(8) PRIMARY KEY,
  Sname VARCHAR(20),
  Ssex CHAR(6),
  Sbirthdate DATE,
  Smajor VARCHAR(40)
);
Takeaway

建表同时定义字段、数据类型和约束。Sno 是学生的唯一标识;Sname 允许重复,除非业务规则另行要求唯一

5/18
CREATE TABLE

Course 的先修课可以引用同一个表

外码不一定跨表,也可以引用本表的主码

SQL
CREATE TABLE "S-C-SC".Course (
  Cno CHAR(5) PRIMARY KEY,
  Cname VARCHAR(40) NOT NULL,
  Ccredit SMALLINT,
  Cpno CHAR(5),
  FOREIGN KEY (Cpno) REFERENCES "S-C-SC".Course(Cno)
);
Takeaway

CpnoNULL 表示没有先修课;非空时必须对应 Course 中已有的 Cno

本例只记录一门直接先修课,多门先修课需要不同的关系设计

6/18
SELF REFERENCE

表级定义表达跨列或跨表约束

SC 的复合主码涉及两列,两个外码分别引用其他表

SQL
CREATE TABLE SC (
  Sno CHAR(8), Cno CHAR(5), Grade SMALLINT,
  PRIMARY KEY (Sno, Cno),
  FOREIGN KEY (Sno) REFERENCES Student(Sno),
  FOREIGN KEY (Cno) REFERENCES Course(Cno));
Takeaway

表级约束:PRIMARY KEY (Sno, Cno) 保证组合唯一、两列非空;外码:SC.Sno→Student.Sno、SC.Cno→Course.Cno;DBMS 将约束存入数据字典并在操作时检查;同一学生同一课程只登记一次

7/18
TABLE CONSTRAINTS

数据类型把域落实为 SQL 定义

类型选择要同时考虑取值范围和后续运算

字符

CHAR(n) 适合定长值,VARCHAR(n) 适合长度变化的文本

数值

SMALLINTINTBIGINTDECIMAL(p,s) 适合不同范围与精度

时间

DATETIMETIMESTAMP 支持时间相关比较和运算

业务域在 SQL 中落为“数据类型 + 长度/精度 + 必要的完整性约束”;类型名称、范围和扩展可能随 DBMS 与版本变化

Takeaway

成绩需要计算平均值,优先选择数值类型而不是普通字符串

8/18
DATA TYPES

选数据类型时要从业务使用倒推

类型不是字段名称的翻译,而是对值域和运算的约束

属性主要需求类型判断
Sname长度变化的姓名文本VARCHAR(n),n 按业务最大长度选择
Grade0—100 百分制、比较和求平均SMALLINT 加必要的范围约束
Sbirthdate日期比较DATE
OrderAmount精确金额运算和两位小数DECIMAL(10,2)NUMERIC(10,2)
9/18
TYPE JUDGMENT

ALTER TABLE 让结构随需求演进

表结构变化必须结合现有数据和依赖对象判断

SQL
ALTER TABLE "S-C-SC".Student ADD Semail VARCHAR(30);
ALTER TABLE "S-C-SC".Course ADD CONSTRAINT UQ_Course_Cname UNIQUE (Cname);
ALTER TABLE "S-C-SC".Student DROP COLUMN Semail RESTRICT;
ALTER TABLE "S-C-SC".Student ALTER COLUMN Sbirthdate TYPE CHAR(10);

增加

增加列或新的完整性约束

删除

删除列或约束时要检查依赖,并选择 RESTRICT 或 CASCADE

修改

修改列名、数据类型或其他定义;已有数据可能无法转换

设计判断

新定义必须与现有数据、视图和应用兼容;已有重复数据时新增 UNIQUE 可能失败

10/18
ALTER TABLE

删除对象时必须先处理依赖关系

RESTRICT 与 CASCADE 的含义取决于正在删除或修改的对象

对象操作RESTRICTCASCADE
DROP SCHEMA模式中已有对象时拒绝连同模式内对象一起删除
DROP TABLE被 SC、视图等依赖时拒绝可能连带删除依赖对象
DROP COLUMN / CONSTRAINT被其他定义引用时拒绝可能移除相关依赖定义
Takeaway

CASCADE 不是更方便的默认选项;具体依赖范围和处理策略仍需核对 DBMS 产品手册

11/18
DROP DEPENDENCIES

删除表会改变数据库结构和后续可用对象

删除前要先确认数据、约束、视图和应用依赖

SQL
-- 二选一,不要连续执行
DROP TABLE "S-C-SC".Student RESTRICT;
-- SC.Sno 仍引用 Student.Sno,操作被拒绝
DROP TABLE "S-C-SC".Student CASCADE;
-- 可能连带删除 SC 或其他依赖对象,具体以产品手册为准
Takeaway

DROP TABLE 删除表定义及其数据;DELETE FROM 只删除数据行并保留表结构

12/18
DROP TABLE

索引提供额外的存取路径

索引是常见 RDBMS 扩展:查询可能受益,但会增加空间与更新成本

用户查询、索引、数据字典与 DBMS 存取路径选择的关系
SQL
CREATE INDEX Idx_StuSname
ON "S-C-SC".Student(Sname);

:::

Takeaway

用户只说明查询目标和条件;RDBMS 根据条件、统计信息和可用路径决定是否使用索引

13/18
INDEX

索引是查询速度与维护成本之间的取舍

建立索引要看查询频率、选择性和更新代价;选择性高表示命中元组少

收益

高频且高选择性的列通常更可能受益于索引

成本

低选择性或小表的收益可能有限;频繁更新会增加维护成本

责任

DBA 或表属主决定建立、修改和删除索引;普通索引不改变唯一性约束

14/18
INDEX TRADEOFF

数据字典记录数据库的定义信息

数据字典是 DBMS 内部系统目录,记录对象、依赖和运行所需的元数据

数据字典中的信息用途示例
对象定义识别表、列、视图和索引Student 的列和类型
约束与权限检查合法操作主码、外码和授权
统计信息支持查询处理和优化表规模与索引信息
Takeaway

DDL 更新 DBMS 内部数据字典;后续约束检查、查询处理和优化都读取这些定义信息,数据字典不是普通业务表

15/18
DATA DICTIONARY

用对象、约束和存取路径理解数据定义

数据定义把关系模型、约束和存取路径落成 DBMS 可以管理的对象

对象与约束

模式提供命名空间;表定义列、类型、列级约束和表级约束

类型与结构变化

类型实现业务域;ALTER 和 DROP 必须考虑现有数据、依赖与 RESTRICT / CASCADE

索引与数据字典

索引是常见 RDBMS 扩展,改变存取路径并增加维护成本;数据字典记录 DBMS 所需定义

Takeaway

写 DDL 前先确认对象关系、业务语义、依赖范围和目标 DBMS 的语法边界

16/18
SECTION REVIEW

本节知识地图

17/18
KNOWLEDGE MAP

本节问题

  1. 01"S-C-SC" 中,模式名、表名和 AUTHORIZATION 各表示什么?从 SC 指出复合主码和两个外码,并解释 PRIMARY KEY (Sno,Cno) 的组合唯一与非空语义?
  2. 02GradeSnameSbirthdateOrderAmount 应依据哪些值域、长度/精度及后续运算选型?DROP TABLE StudentRESTRICTCASCADEDELETE FROM Student 有何区别?
  3. 03CREATE INDEX 是否属于 SQL 标准统一语句?普通索引如何处理重复姓名,如何权衡高/低选择性及频繁更新列的收益和代价?数据字典记录哪些对象、约束、权限、依赖和统计信息,又如何支撑约束检查、查询处理与优化?
18/18
SECTION QUESTIONS