周末练习:设计3张表,这三张表互相关联,然后往这三张表中插入1000万条数据(随机)
时间: 2024-12-02 14:18:37 浏览: 11
周末练习中,设计三个关联的数据库表格可以模拟现实世界中常见的业务场景,比如用户、订单和商品的关系。这里我们可以假设这三个表分别是:
1. **用户表(User)**:
- id (主键)
- name
- email
2. **订单表(Order)**
- order_id (主键)
- user_id (外键,关联到User表)
- product_id (外键,关联到Product表)
- order_date
3. **商品表(Product)**
- product_id (主键)
- name
- price
为了填充1000万条数据,你可以使用脚本语言如Python的sqlite3库,或者SQL的INSERT INTO语句配合循环来生成随机数据。由于这个过程可能会占用大量时间和存储资源,一般会通过批量插入的方式来优化。
下面是一个简化的Python示例(假设数据量足够大并已分批准备好):
```python
import random
import sqlite3
# 连接到SQLite数据库
conn = sqlite3.connect('your_database.db')
cursor = conn.cursor()
# 定义创建表的SQL语句
create_tables = '''
CREATE TABLE IF NOT EXISTS User (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT
);
CREATE TABLE IF NOT EXISTS Order (
order_id INTEGER PRIMARY KEY,
user_id INTEGER,
product_id INTEGER,
order_date DATE,
FOREIGN KEY(user_id) REFERENCES User(id),
FOREIGN KEY(product_id) REFERENCES Product(id)
);
CREATE TABLE IF NOT EXISTS Product (
product_id INTEGER PRIMARY KEY,
name TEXT,
price REAL
);
'''
# 执行创建表的SQL语句
cursor.executescript(create_tables)
# 假设每个用户购买多个商品,生成随机数据
num_users = num_products = 1000000 // 3
for i in range(num_users):
user_name = f"user_{i}"
user_email = f"user_email{i}@example.com"
cursor.execute("INSERT INTO User VALUES (?, ?, ?)", (i+1, user_name, user_email))
# 随机选择商品,插入订单表
for j in range(random.randint(1, 10)):
product_id = random.randint(1, num_products)
order_date = '2023-01-01' + str(random.randint(1, 365)) + '-01'
cursor.execute("INSERT INTO Order VALUES (?, ?, ?, ?)", (i*1000000+j, i+1, product_id, order_date))
# 插入商品信息
for k in range(j+1): # 保证每个用户至少购买一个商品
product_name = f"product_{k}"
product_price = round(random.uniform(10, 100), 2)
cursor.execute("INSERT INTO Product VALUES (?, ?, ?)", (product_id, product_name, product_price))
# 提交事务并关闭连接
conn.commit()
conn.close()
```
阅读全文