1. 创建表结构
-- 创建客户表
CREATE TABLE customers (
customer_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
email VARCHAR2(100),
phone VARCHAR2(20),
registration_date DATE,
city VARCHAR2(50),
credit_score NUMBER
);
-- 创建产品表
CREATE TABLE products (
product_id NUMBER PRIMARY KEY,
product_name VARCHAR2(100),
category VARCHAR2(50),
price NUMBER(10,2),
stock_quantity NUMBER
);
-- 创建订单表
CREATE TABLE orders (
order_id NUMBER PRIMARY KEY,
customer_id NUMBER,
order_date DATE,
total_amount NUMBER(10,2),
status VARCHAR2(20),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-- 创建订单明细表
CREATE TABLE order_details (
detail_id NUMBER PRIMARY KEY,
order_id NUMBER,
product_id NUMBER,
quantity NUMBER,
unit_price NUMBER(10,2),
discount NUMBER(5,2),
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
2. 插入10万条测试数据
-- 插入客户数据 (1万客户)
BEGIN
FOR i IN 1..10000 LOOP
INSERT INTO customers VALUES (
i,
'FirstName' || MOD(i, 100),
'LastName' || MOD(i, 200),
'email' || i || '@example.com',
'1-' || LPAD(MOD(i, 999), 3, '0') || '-' || LPAD(MOD(i*7, 9999), 4, '0'),
SYSDATE - MOD(i, 3650),
'City' || MOD(i, 50),
300 + MOD(i, 500)
);
END LOOP;
COMMIT;
END;
/
-- 插入产品数据 (100种产品)
BEGIN
FOR i IN 1..100 LOOP
INSERT INTO products VALUES (
i,
'Product ' || i,
CASE
WHEN MOD(i, 4) = 0 THEN 'Electronics'
WHEN MOD(i, 4) = 1 THEN 'Clothing'
WHEN MOD(i, 4) = 2 THEN 'Books'
ELSE 'Home'
END,
10 + MOD(i, 990),
100 + MOD(i, 900)
);
END LOOP;
COMMIT;
END;
/
-- 插入订单数据 (3万订单)
BEGIN
FOR i IN 1..30000 LOOP
INSERT INTO orders VALUES (
i,
MOD(i, 10000) + 1,
SYSDATE - MOD(i, 730),
ROUND(DBMS_RANDOM.VALUE(10, 2000), 2),
CASE MOD(i, 10)
WHEN 0 THEN 'Pending'
WHEN 1 THEN 'Processing'
WHEN 2 THEN 'Shipped'
WHEN 3 THEN 'Delivered'
WHEN 4 THEN 'Cancelled'
ELSE 'Completed'
END
);
END LOOP;
COMMIT