1-- 基本信息表
2-- 包含基本的数据类型,如数字、字符串、日期等;包含主键和唯一约束。
3CREATE TABLE Basic_Info (
4 id NUMBER(10) PRIMARY KEY,
5 name VARCHAR2(50) NOT NULL,
6 age NUMBER(3),
7 gender CHAR(1) CHECK (gender IN ('M', 'F')),
8 birth_date DATE,
9 email VARCHAR2(100),
10 phone VARCHAR2(20) UNIQUE
11);
12
13-- 订单信息表
14-- 使用 TIMESTAMP 数据类型,以测试时间相关字段的迁移;包含检查约束 CHECK 以测试迁移时的约束兼容性。
15CREATE TABLE Orders (
16 order_id NUMBER(10) PRIMARY KEY,
17 customer_id NUMBER(10) NOT NULL,
18 order_date TIMESTAMP,
19 amount NUMBER(12, 2),
20 status VARCHAR2(20) CHECK (status IN ('PENDING', 'COMPLETED', 'CANCELED'))
21);
22
23-- 客户信息表
24-- 包含 DEFAULT 值,测试默认值的迁移;TIMESTAMP 类型的默认当前时间字段。
25CREATE TABLE Customers (
26 customer_id NUMBER(10) PRIMARY KEY,
27 name VARCHAR2(50) NOT NULL,
28 address VARCHAR2(200),
29 city VARCHAR2(50),
30 country VARCHAR2(50),
31 zip_code VARCHAR2(10),
32 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
33);
34
35-- 产品信息表
36-- 测试小数数据类型;包含检查库存数量是否为非负的 CHECK 约束。
37CREATE TABLE Products (
38 product_id NUMBER(10) PRIMARY KEY,
39 name VARCHAR2(100) NOT NULL,
40 category VARCHAR2(50),
41 price NUMBER(10, 2),
42 stock_quantity NUMBER(5) CHECK (stock_quantity >= 0)
43);
44
45-- 订单详情表(关联外键)
46-- 包含外键约束,测试外键的迁移;使用虚拟列 total_price,测试计算列的兼容性。
47CREATE TABLE Order_Details (
48 order_detail_id NUMBER(10) PRIMARY KEY,
49 order_id NUMBER(10) REFERENCES Orders(order_id) ON DELETE CASCADE,
50 product_id NUMBER(10) REFERENCES Products(product_id),
51 quantity NUMBER(5) CHECK (quantity > 0),
52 price NUMBER(10, 2),
53 total_price AS (quantity * price) VIRTUAL
54);
55
56-- 员工信息表
57-- 测试自引用的外键(如管理者的 ID);包含日期类型和数字类型。
58CREATE TABLE Employees (
59 employee_id NUMBER(10) PRIMARY KEY,
60 first_name VARCHAR2(50),
61 last_name VARCHAR2(50),
62 hire_date DATE,
63 department_id NUMBER(10),
64 salary NUMBER(10, 2),
65 manager_id NUMBER(10),
66 FOREIGN KEY (manager_id) REFERENCES Employees(employee_id)
67);
68
69-- 部门信息表
70-- 基础信息表,用于与其他表的外键关联;包含检查约束用于测试预算是否为正数。
71CREATE TABLE Departments (
72 department_id NUMBER(10) PRIMARY KEY,
73 name VARCHAR2(50) NOT NULL,
74 location VARCHAR2(100),
75 budget NUMBER(12, 2) CHECK (budget > 0)
76);
77
78-- 库存记录表(复杂表结构)
79-- 包含组合唯一约束,测试复杂唯一约束的兼容性;包含默认值时间戳字段。
80CREATE TABLE Inventory (
81 inventory_id NUMBER(10) PRIMARY KEY,
82 product_id NUMBER(10) REFERENCES Products(product_id),
83 warehouse_id NUMBER(10),
84 stock_level NUMBER(10),
85 last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
86 UNIQUE (product_id, warehouse_id)
87);
88
89-- 仓库信息表
90-- 仓库和员工有外键关系;用于测试数据库间表的跨引用。
91CREATE TABLE Warehouses (
92 warehouse_id NUMBER(10) PRIMARY KEY,
93 location VARCHAR2(100),
94 capacity NUMBER(10),
95 manager_id NUMBER(10),
96 FOREIGN KEY (manager_id) REFERENCES Employees(employee_id)
97);
98
99-- 销售统计表(分区表)
100-- 包含分区表结构,以测试分区表的迁移;
101CREATE TABLE Sales_Stats (
102 sales_id NUMBER(10) PRIMARY KEY,
103 year NUMBER(4) NOT NULL,
104 month NUMBER(2) NOT NULL,
105 month_start_date DATE DEFAULT SYSDATE NOT NULL,
106 product_id NUMBER(10) REFERENCES Products(product_id),
107 total_sales NUMBER(12, 2)
108)
109PARTITION BY RANGE (month_start_date)
110INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) (
111 PARTITION p_initial VALUES LESS THAN (TO_DATE('2023-01-01', 'YYYY-MM-DD'))
112);