生产常用表

分类: 编码创建于: 6/2/2025

在设计一个商业网站的数据库时,除了已经提到的 recharge_records(充值记录表)和 site_settings(网站设置表),还需要根据业务需求构建多个其他表来支持网站的运营、用户管理、交易、内容管理等功能。以下是一些常见的表及其用途,我将以 PostgreSQL 语法为例,并附上简要说明。这些表可以根据你的具体业务需求进行调整或扩展。

1. 用户相关表

用户表 (users)

存储用户信息,用于用户注册、登录和身份管理。

1CREATE TABLE users (
2    id BIGSERIAL PRIMARY KEY,
3    username VARCHAR(50) NOT NULL UNIQUE,
4    email VARCHAR(100) NOT NULL UNIQUE,
5    password_hash TEXT NOT NULL,
6    phone VARCHAR(20),
7    avatar_url TEXT,
8    status VARCHAR(20) NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'inactive', 'banned')),
9    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
10    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
11);
12COMMENT ON TABLE users IS '用户信息表';
13COMMENT ON COLUMN users.id IS '主键,自增ID';
14COMMENT ON COLUMN users.username IS '用户名,唯一';
15COMMENT ON COLUMN users.email IS '邮箱,唯一';
16COMMENT ON COLUMN users.password_hash IS '密码哈希值';
17COMMENT ON COLUMN users.phone IS '联系电话';
18COMMENT ON COLUMN users.avatar_url IS '头像URL';
19COMMENT ON COLUMN users.status IS '用户状态:active, inactive, banned';
20COMMENT ON COLUMN users.created_at IS '记录创建时间';
21COMMENT ON COLUMN users.updated_at IS '记录更新时间';

用户地址表 (user_addresses)

存储用户的收货地址,用于电商或需要物流的业务。

1CREATE TABLE user_addresses (
2    id BIGSERIAL PRIMARY KEY,
3    user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
4    recipient_name VARCHAR(50) NOT NULL,
5    phone VARCHAR(20) NOT NULL,
6    address_line TEXT NOT NULL,
7    city VARCHAR(50) NOT NULL,
8    state VARCHAR(50),
9    postal_code VARCHAR(20) NOT NULL,
10    country VARCHAR(50) NOT NULL,
11    is_default BOOLEAN NOT NULL DEFAULT FALSE,
12    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
13    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
14);
15COMMENT ON TABLE user_addresses IS '用户地址表';
16COMMENT ON COLUMN user_addresses.user_id IS '关联用户ID';
17COMMENT ON COLUMN user_addresses.is_default IS '是否为默认地址';

2. 订单和交易相关表

订单表 (orders)

存储用户的订单信息,适用于电商或其他交易类网站。

1CREATE TABLE orders (
2    id BIGSERIAL PRIMARY KEY,
3    user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE SET NULL,
4    order_number VARCHAR(100) NOT NULL UNIQUE,
5    total_amount DECIMAL(10, 2) NOT NULL,
6    status VARCHAR(20) NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'processing', 'shipped', 'delivered', 'cancelled')),
7    address_id BIGINT REFERENCES user_addresses(id) ON DELETE SET NULL,
8    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
9    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
10);
11COMMENT ON TABLE orders IS '订单表';
12COMMENT ON COLUMN orders.user_id IS '关联用户ID';
13COMMENT ON COLUMN orders.order_number IS '订单编号,唯一';
14COMMENT ON COLUMN orders.total_amount IS '订单总金额';
15COMMENT ON COLUMN orders.status IS '订单状态';
16COMMENT ON COLUMN orders.address_id IS '关联收货地址ID';

订单详情表 (order_items)

存储订单中每个商品或服务的详细信息。

1CREATE TABLE order_items (
2    id BIGSERIAL PRIMARY KEY,
3    order_id BIGINT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
4    product_id BIGINT NOT NULL,
5    quantity INT NOT NULL CHECK (quantity > 0),
6    unit_price DECIMAL(10, 2) NOT NULL,
7    subtotal DECIMAL(10, 2) NOT NULL,
8    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
9);
10COMMENT ON TABLE order_items IS '订单详情表';
11COMMENT ON COLUMN order_items.order_id IS '关联订单ID';
12COMMENT ON COLUMN order_items.product_id IS '关联商品ID';
13COMMENT ON COLUMN order_items.quantity IS '购买数量';
14COMMENT ON COLUMN order_items.unit_price IS '单价';
15COMMENT ON COLUMN order_items.subtotal IS '小计金额';

3. 商品相关表

商品表 (products)

存储商品或服务信息,适用于电商或展示类网站。

1CREATE TABLE products (
2    id BIGSERIAL PRIMARY KEY,
3    name VARCHAR(100) NOT NULL,
4    description TEXT,
5    price DECIMAL(10, 2) NOT NULL,
6    stock INT NOT NULL DEFAULT 0 CHECK (stock >= 0),
7    category_id BIGINT,
8    status VARCHAR(20) NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'inactive', 'out_of_stock')),
9    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
10    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
11);
12COMMENT ON TABLE products IS '商品表';
13COMMENT ON COLUMN products.name IS '商品名称';
14COMMENT ON COLUMN products.price IS '商品价格';
15COMMENT ON COLUMN products.stock IS '库存量';
16COMMENT ON COLUMN products.category_id IS '关联分类ID';
17COMMENT ON COLUMN products.status IS '商品状态';

商品分类表 (categories)

存储商品分类信息,用于组织和管理商品。

1CREATE TABLE categories (
2    id BIGSERIAL PRIMARY KEY,
3    name VARCHAR(50) NOT NULL UNIQUE,
4    parent_id BIGINT REFERENCES categories(id) ON DELETE SET NULL,
5    description TEXT,
6    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
7    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
8);
9COMMENT ON TABLE categories IS '商品分类表';
10COMMENT ON COLUMN categories.parent_id IS '父分类ID,支持多级分类';

4. 内容管理相关表

文章/新闻表 (articles)

存储网站的内容,如新闻、博客或公告。

1CREATE TABLE articles (
2    id BIGSERIAL PRIMARY KEY,
3    title VARCHAR(200) NOT NULL,
4    content TEXT NOT NULL,
5    author_id BIGINT REFERENCES users(id) ON DELETE SET NULL,
6    status VARCHAR(20) NOT NULL DEFAULT 'draft' CHECK (status IN ('draft', 'published', 'archived')),
7    published_at TIMESTAMP,
8    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
9    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
10);
11COMMENT ON TABLE articles IS '文章或新闻表';
12COMMENT ON COLUMN articles.author_id IS '作者ID,关联用户';
13COMMENT ON COLUMN articles.status IS '文章状态';
14COMMENT ON COLUMN articles.published_at IS '发布时间';

5. 日志和审计相关表

操作日志表 (audit_logs)

记录用户的操作或系统的关键事件,用于审计和问题追踪。

1CREATE TABLE audit_logs (
2    id BIGSERIAL PRIMARY KEY,
3    user_id BIGINT REFERENCES users(id) ON DELETE SET NULL,
4    action VARCHAR(100) NOT NULL,
5    entity_type VARCHAR(50) NOT NULL,
6    entity_id BIGINT,
7    details TEXT,
8    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
9);
10COMMENT ON TABLE audit_logs IS '操作日志表';
11COMMENT ON COLUMN audit_logs.user_id IS '操作用户ID';
12COMMENT ON COLUMN audit_logs.action IS '操作类型,如create, update, delete';
13COMMENT ON COLUMN audit_logs.entity_type IS '操作实体类型,如order, user';
14COMMENT ON COLUMN audit_logs.entity_id IS '操作实体ID';
15COMMENT ON COLUMN audit_logs.details IS '操作详情';

6. 其他辅助表

支付记录表 (payments)

记录用户的支付信息,与充值记录类似,但更专注于订单支付。

1CREATE TABLE payments (
2    id BIGSERIAL PRIMARY KEY,
3    order_id BIGINT REFERENCES orders(id) ON DELETE SET NULL,
4    user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE SET NULL,
5    amount DECIMAL(10, 2) NOT NULL,
6    payment_method VARCHAR(50) NOT NULL,
7    transaction_id VARCHAR(100) NOT NULL UNIQUE,
8    status VARCHAR(20) NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'success', 'failed')),
9    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
10    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
11);
12COMMENT ON TABLE payments IS '支付记录表';
13COMMENT ON COLUMN payments.order_id IS '关联订单ID';
14COMMENT ON COLUMN payments.transaction_id IS '交易流水号,唯一';

角色权限表 (roles 和 user_roles)

管理用户角色和权限,适用于需要权限控制的网站。

1CREATE TABLE roles (
2    id BIGSERIAL PRIMARY KEY,
3    name VARCHAR(50) NOT NULL UNIQUE,
4    description TEXT,
5    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
6);
7COMMENT ON TABLE roles IS '角色表';
8
9CREATE TABLE user_roles (
10    user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
11    role_id BIGINT NOT NULL REFERENCES roles(id) ON DELETE CASCADE,
12    PRIMARY KEY (user_id, role_id),
13    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
14);
15COMMENT ON TABLE user_roles IS '用户角色关联表';

注意事项:

  • 外键约束:以上表中使用了外键(如 REFERENCES)来保证数据完整性。如果性能要求较高,可以根据业务需求移除部分外键。
  • 字段类型和长度:字段类型和长度(如 VARCHAR(50))是示例值,实际应用中应根据需求调整。
  • 扩展性:商业网站的表结构会根据具体业务(如会员体系、优惠券、积分、评论、购物车等)进一步扩展。
  • 触发器:对于 updated_at 字段自动更新,可以通过 PostgreSQL 触发器实现。

总结:

以上是一个通用商业网站可能会用到的核心表结构,涵盖用户管理、订单交易、商品管理、内容管理和日志审计等功能。如果你有特定的业务需求(例如需要购物车、优惠券或积分系统),或者使用的数据库不是 PostgreSQL,请告诉我,我会进一步调整或补充。如果你对某个表有更具体的需求,也可以详细说明,我会针对性地设计。

是否有其他表或功能需要添加?