生产常用表
分类: 编码创建于: 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,请告诉我,我会进一步调整或补充。如果你对某个表有更具体的需求,也可以详细说明,我会针对性地设计。
是否有其他表或功能需要添加?