1. 首页 > DB2教程 > 正文

DB2教程FG007-DB2 DDL语法与表结构设计实战

本教程详细介绍DB2的DDL(数据定义语言)语法和表结构设计方法。风哥教程参考DB2官方文档的SQL Reference、Database Design等内容,旨在帮助读者掌握DB2的表结构设计技巧。

通过本教程的学习,您将了解DB2的DDL语法、表结构设计原则、约束设置以及索引设计等内容,为DB2数据库的设计打下坚实基础。

目录大纲

Part01-基础概念与理论知识

1.1 DDL语法概述

DDL(数据定义语言)是用于定义数据库结构的SQL语句,主要包括以下操作:

1.1.1 CREATE语句

  • CREATE TABLE:创建表
  • CREATE INDEX:创建索引
  • CREATE VIEW:创建视图
  • CREATE SCHEMA:创建模式
  • CREATE SEQUENCE:创建序列

1.1.2 ALTER语句

  • ALTER TABLE:修改表结构
  • ALTER INDEX:修改索引
  • ALTER VIEW:修改视图
  • ALTER SCHEMA:修改模式

1.1.3 DROP语句

  • DROP TABLE:删除表
  • DROP INDEX:删除索引
  • DROP VIEW:删除视图
  • DROP SCHEMA:删除模式
  • DROP SEQUENCE:删除序列

更多视频教程www.fgedu.net.cn

1.2 表结构设计原则

表结构设计是数据库设计的核心,应遵循以下原则:

1.2.1 范式原则

  • 第一范式(1NF):确保每列的原子性
  • 第二范式(2NF):确保非主键列完全依赖于主键
  • 第三范式(3NF):确保非主键列不依赖于其他非主键列

1.2.2 性能原则

  • 减少表的宽度
  • 合理使用数据类型
  • 适当添加索引
  • 避免过度设计

1.2.3 可维护性原则

  • 使用清晰的命名规范
  • 添加适当的注释
  • 保持表结构的一致性
  • 考虑未来的扩展性

学习交流加群风哥微信: itpux-com

1.3 数据类型选择

DB2提供多种数据类型,应根据实际需求选择合适的数据类型:

1.3.1 数值类型

  • SMALLINT:小整数,2字节
  • INTEGER:整数,4字节
  • BIGINT:大整数,8字节
  • DECIMAL: decimal(p,s),精确十进制数
  • FLOAT:浮点数

1.3.2 字符串类型

  • CHAR(n):固定长度字符串
  • VARCHAR(n):可变长度字符串
  • CLOB:大对象字符串

1.3.3 日期时间类型

  • DATE:日期
  • TIME:时间
  • TIMESTAMP:时间戳

1.3.4 其他类型

  • BLOB:二进制大对象
  • XML:XML数据
  • BOOLEAN:布尔值

Part02-生产环境规划与建议

2.1 表命名规范

在生产环境中,表命名应遵循以下规范:

2.1.1 命名原则

  • 使用有意义的表名
  • 遵循企业命名规范
  • 使用小写字母
  • 使用下划线分隔单词

2.1.2 命名示例

  • 用户表:fgedu_user
  • 订单表:fgedu_order
  • 产品表:fgedu_product

2.1.3 表名长度

  • 建议表名长度不超过30个字符
  • 避免使用保留字
  • 确保表名在数据库中唯一

学习交流加群风哥QQ113257174

2.2 字段命名规范

字段命名应遵循以下规范:

2.2.1 命名原则

  • 使用有意义的字段名
  • 遵循企业命名规范
  • 使用小写字母
  • 使用下划线分隔单词

2.2.2 命名示例

  • 用户ID:user_id
  • 用户名:user_name
  • 创建时间:create_time

2.2.3 字段名长度

  • 建议字段名长度不超过30个字符
  • 避免使用保留字
  • 确保字段名在表中唯一

风哥提示:命名规范应在项目开始时确定,并在整个项目中保持一致,以提高代码的可读性和可维护性。

2.3 约束设计

约束是确保数据完整性的重要手段,应合理设计:

2.3.1 主键约束

  • 每个表应有一个主键
  • 主键应使用无业务含义的自增ID
  • 主键字段应选择合适的数据类型

2.3.2 外键约束

  • 使用外键约束确保数据完整性
  • 考虑级联操作的影响
  • 注意外键对性能的影响

2.3.3 唯一约束

  • 使用唯一约束确保字段值的唯一性
  • 考虑复合唯一约束
  • 注意唯一约束对性能的影响

2.3.4 检查约束

  • 使用检查约束确保字段值的合法性
  • 避免过于复杂的检查约束
  • 注意检查约束对性能的影响

更多学习教程公众号风哥教程itpux_com

Part03-生产环境项目实施方案

3.1 表创建

3.1.1 连接数据库

$ db2 connect to sample

Database Connection Information

Database server = DB2/LINUXX8664 12.1.0.4
SQL authorization ID = FGEDU
Local database alias = SAMPLE

3.1.2 创建表

$ db2 “CREATE TABLE fgedu_user (user_id INTEGER PRIMARY KEY, user_name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, create_time TIMESTAMP DEFAULT CURRENT TIMESTAMP)”

DB20000I The SQL command completed successfully.

$ db2 “CREATE TABLE fgedu_order (order_id INTEGER PRIMARY KEY, user_id INTEGER REFERENCES fgedu_user(user_id), order_amount DECIMAL(10,2) NOT NULL, order_status VARCHAR(20) DEFAULT ‘PENDING’, create_time TIMESTAMP DEFAULT CURRENT TIMESTAMP)”

DB20000I The SQL command completed successfully.

3.1.3 验证表创建

$ db2 list tables for schema FGEDU

Table/View Schema Type Creation time
——————————- ————— ——– ————————–
FGEDU_USER FGEDU T 2026-04-07-10.00.00.000000
FGEDU_ORDER FGEDU T 2026-04-07-10.00.00.000000

2 record(s) selected.

更多视频教程www.fgedu.net.cn

3.2 表修改

3.2.1 添加列

$ db2 “ALTER TABLE fgedu_user ADD COLUMN phone VARCHAR(20)”

DB20000I The SQL command completed successfully.

3.2.2 修改列

$ db2 “ALTER TABLE fgedu_user ALTER COLUMN email SET DATA TYPE VARCHAR(150)”

DB20000I The SQL command completed successfully.

3.2.3 添加约束

$ db2 “ALTER TABLE fgedu_user ADD CONSTRAINT chk_email CHECK (email LIKE ‘%@%’)”

DB20000I The SQL command completed successfully.

3.2.4 删除约束

$ db2 “ALTER TABLE fgedu_user DROP CONSTRAINT chk_email”

DB20000I The SQL command completed successfully.

学习交流加群风哥微信: itpux-com

3.3 表删除

3.3.1 删除表

$ db2 “DROP TABLE fgedu_order”

DB20000I The SQL command completed successfully.

$ db2 “DROP TABLE fgedu_user”

DB20000I The SQL command completed successfully.

3.3.2 验证表删除

$ db2 list tables for schema FGEDU

Table/View Schema Type Creation time
——————————- ————— ——– ————————–

0 record(s) selected.

风哥提示:删除表前,应确保已备份重要数据,避免数据丢失。

3.4 索引设计

3.4.1 创建索引

$ db2 “CREATE TABLE fgedu_user (user_id INTEGER PRIMARY KEY, user_name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, create_time TIMESTAMP DEFAULT CURRENT TIMESTAMP)”

DB20000I The SQL command completed successfully.

$ db2 “CREATE INDEX idx_user_name ON fgedu_user(user_name)”

DB20000I The SQL command completed successfully.

$ db2 “CREATE INDEX idx_create_time ON fgedu_user(create_time)”

DB20000I The SQL command completed successfully.

3.4.2 查看索引

$ db2 “SELECT indname, tabname, colname FROM syscat.indexes WHERE tabschema = ‘FGEDU'”

INDNAME TABNAME COLNAME
————— ————— —————
SQL123456789012 FGEDU_USER USER_ID
SQL123456789034 FGEDU_USER EMAIL
IDX_USER_NAME FGEDU_USER USER_NAME
IDX_CREATE_TIME FGEDU_USER CREATE_TIME

4 record(s) selected.

3.4.3 删除索引

$ db2 “DROP INDEX idx_create_time”

DB20000I The SQL command completed successfully.

学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 表创建实战

4.1.1 创建复杂表

$ db2 “CREATE TABLE fgedu_product (product_id INTEGER PRIMARY KEY, product_name VARCHAR(100) NOT NULL, category VARCHAR(50), price DECIMAL(10,2) NOT NULL, stock INTEGER DEFAULT 0, description CLOB, create_time TIMESTAMP DEFAULT CURRENT TIMESTAMP, update_time TIMESTAMP)”

DB20000I The SQL command completed successfully.

$ db2 “CREATE TABLE fgedu_order_item (order_item_id INTEGER PRIMARY KEY, order_id INTEGER, product_id INTEGER, quantity INTEGER NOT NULL, unit_price DECIMAL(10,2) NOT NULL, FOREIGN KEY (order_id) REFERENCES fgedu_order(order_id), FOREIGN KEY (product_id) REFERENCES fgedu_product(product_id))”

DB20000I The SQL command completed successfully.

4.1.2 表结构验证

$ db2 “DESCRIBE TABLE fgedu_product”

Data type Column
Column name schema Data type name Length Scale Nulls
——————————- ——— ——————- ———- —– ——
PRODUCT_ID SYSIBM INTEGER 4 0 No
PRODUCT_NAME SYSIBM VARCHAR 100 0 No
CATEGORY SYSIBM VARCHAR 50 0 Yes
PRICE SYSIBM DECIMAL 10 2 No
STOCK SYSIBM INTEGER 4 0 Yes
DESCRIPTION SYSIBM CLOB 0 0 Yes
CREATE_TIME SYSIBM TIMESTAMP 10 6 Yes
UPDATE_TIME SYSIBM TIMESTAMP 10 6 Yes

8 record(s) selected.

更多视频教程www.fgedu.net.cn

4.2 约束设置实战

4.2.1 添加多种约束

$ db2 “CREATE TABLE fgedu_customer (customer_id INTEGER PRIMARY KEY, customer_name VARCHAR(100) NOT NULL, age INTEGER CHECK (age >= 18), gender VARCHAR(10) CHECK (gender IN (‘MALE’, ‘FEMALE’)), email VARCHAR(100) UNIQUE, phone VARCHAR(20), address VARCHAR(200), create_time TIMESTAMP DEFAULT CURRENT TIMESTAMP)”

DB20000I The SQL command completed successfully.

4.2.2 测试约束

$ db2 “INSERT INTO fgedu_customer (customer_id, customer_name, age, gender, email) VALUES (1, ‘张三’, 17, ‘MALE’, ‘zhangsan@example.com’)”

DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0545N Check constraint “FGEDU.CHK_4” is violated.

$ db2 “INSERT INTO fgedu_customer (customer_id, customer_name, age, gender, email) VALUES (1, ‘张三’, 18, ‘MALE’, ‘zhangsan@example.com’)”

DB20000I The SQL command completed successfully.

$ db2 “INSERT INTO fgedu_customer (customer_id, customer_name, age, gender, email) VALUES (2, ‘李四’, 20, ‘OTHER’, ‘lisi@example.com’)”

DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0545N Check constraint “FGEDU.CHK_5” is violated.

学习交流加群风哥微信: itpux-com

4.3 索引设计实战

4.3.1 创建复合索引

$ db2 “CREATE INDEX idx_order_user_status ON fgedu_order(user_id, order_status)”

DB20000I The SQL command completed successfully.

4.3.2 创建唯一索引

$ db2 “CREATE UNIQUE INDEX idx_product_name ON fgedu_product(product_name)”

DB20000I The SQL command completed successfully.

4.3.3 索引使用分析

$ db2 “EXPLAIN PLAN FOR SELECT * FROM fgedu_user WHERE user_name = ‘张三'”

DB20000I The SQL command completed successfully.

$ db2 “SELECT plan_id FROM sysibm.sysplan WHERE queryno = 1”

PLAN_ID
——-
1

1 record(s) selected.

学习交流加群风哥QQ113257174

Part05-风哥经验总结与分享

5.1 表设计最佳实践

5.1.1 表结构设计

  • 遵循范式原则,确保数据完整性
  • 合理选择数据类型,减少存储空间
  • 使用无业务含义的自增ID作为主键
  • 添加适当的索引,提高查询性能

5.1.2 命名规范

  • 使用清晰、有意义的表名和字段名
  • 遵循企业命名规范
  • 使用小写字母和下划线
  • 避免使用保留字

5.1.3 约束设计

  • 为每个表设置主键
  • 使用外键约束确保数据完整性
  • 使用唯一约束确保字段值的唯一性
  • 使用检查约束确保字段值的合法性

风哥提示:表设计是数据库设计的基础,应在项目开始时仔细规划,避免后续频繁修改表结构。

5.2 常见问题与解决方案

5.2.1 表结构设计不合理

问题现象:表结构设计不合理,导致查询性能差

解决方案

  • 重新设计表结构,遵循范式原则
  • 合理选择数据类型
  • 添加适当的索引
  • 考虑表分区

5.2.2 约束设置不当

问题现象:约束设置不当,导致数据插入失败或性能下降

解决方案

  • 检查约束条件是否合理
  • 避免过于复杂的检查约束
  • 考虑约束对性能的影响
  • 使用触发器替代复杂的检查约束

5.2.3 索引设计不当

问题现象:索引设计不当,导致查询性能差

解决方案

  • 分析查询模式,添加适当的索引
  • 避免过度索引
  • 定期维护索引
  • 考虑复合索引

更多学习教程公众号风哥教程itpux_com

5.3 性能优化建议

5.3.1 表结构优化

  • 减少表的宽度,使用合适的数据类型
  • 避免使用大对象类型,如CLOB和BLOB
  • 使用分区表管理大数据量
  • 定期清理历史数据

5.3.2 索引优化

  • 为频繁查询的列创建索引
  • 为外键列创建索引
  • 使用复合索引提高查询性能
  • 定期重建索引,避免索引碎片

5.3.3 查询优化

  • 编写高效的SQL语句
  • 避免全表扫描
  • 使用绑定变量
  • 优化JOIN操作

5.3.4 维护优化

  • 定期更新统计信息
  • 定期重组表和索引
  • 监控表空间使用情况
  • 备份表结构和数据
总结:DB2的DDL语法和表结构设计是数据库设计的基础。通过本教程的学习,您已经掌握了DB2的DDL语法、表结构设计原则、约束设置以及索引设计等技能。在实际应用中,应结合具体的业务需求,制定合理的表结构设计方案,确保数据库的性能和可维护性。

from db2视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息