一个综合性、企业级、可直接用于实际开发的电商系统核心数据库设计

企业级架构设计:电商系统案例拆解 这个电商系统就像用乐高搭建的智能商场,每个组件各司其职。智能推荐:基于用户行为日志推荐商品分库分表:订单数据按用户ID分片存储异地多活:通过 Nacos 配置多集群路由技术架构没有终点,就像商场需要不断升级设施。当你掌握了这些设计思维,就能轻松应对更复杂的业务挑战。 阅读详情

以下是一个综合性、企业级、可直接用于实际开发的电商系统核心数据库设计,涵盖 用户、商品、分类、SKU、订单、订单项、收货地址、支付、评价、购物车、优惠券、库存 等核心模块。

我们将:

  • ✅ 采用规范命名(snake_case)
  • ✅ 使用合理数据类型
  • ✅ 包含必备审计字段
  • ✅ 支持软删除、多租户、JSON扩展
  • ✅ 提供 MySQL 8.0+ 和 PostgreSQL 14+ 双版本 SQL 脚本
  • ✅ 每张表附带详细说明与设计理由

🛒 电商系统综合数据库设计(企业级)

💡 设计原则:

  • 单一职责:每张表只负责一个实体
  • 外键约束:保证数据一致性(PGSQL 强制,MySQL 可选)
  • 索引优化:高频查询字段加索引
  • 扩展性优先:使用 JSON 存储动态属性
  • 合规安全:软删除 + 审计字段

📁 整体结构概览(共 12 张核心表)

users                 —— 用户主表
user_profiles         —— 用户扩展信息(1:1)
addresses             —— 收货地址
categories            —— 商品分类(树形结构)
products              —— 商品主信息(SPU)
skus                  —— 商品规格(SKU)—— 与 products 关联
inventory             —— 库存(按 SKU 维护)
cart_items            —— 购物车
orders                —— 订单主表
order_items           —— 订单明细(与 orders 关联)
coupons               —— 优惠券
coupon_usages         —— 优惠券使用记录
product_reviews       —— 商品评价

⚠️ 注意:

  • products 是 SPU(Standard Product Unit),代表一个商品(如 iPhone 15)
  • skus 是 SKU(Stock Keeping Unit),代表具体规格(如 iPhone 15, 256GB, 黑色)
  • 库存管理基于 SKU,而非 SPU

✅ 一、MySQL 版本(InnoDB,utf8mb4)

-- 设置字符集和排序规则
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 1;

-- ==========================
-- 1. users - 用户主表
-- ==========================
CREATE TABLE users (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID,自增主键',
    username VARCHAR(50) NOT NULL UNIQUE COMMENT '登录用户名',
    email VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱',
    phone VARCHAR(20) NULL UNIQUE COMMENT '手机号',
    password_hash VARCHAR(255) NOT NULL COMMENT '加密密码',
    avatar_url VARCHAR(500) NULL COMMENT '头像URL',
    status ENUM('active', 'inactive', 'banned', 'deleted') DEFAULT 'active' COMMENT '账户状态',
    last_login_at TIMESTAMP NULL COMMENT '最后登录时间',
    login_ip VARCHAR(45) NULL COMMENT '最后登录IP',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted_at TIMESTAMP NULL COMMENT '软删除时间',
    created_by BIGINT NULL COMMENT '创建人ID(系统=0)',
    updated_by BIGINT NULL COMMENT '最后修改人ID',
    tenant_id BIGINT DEFAULT 1 COMMENT '租户ID,支持多租户',
    metadata JSON NULL COMMENT '扩展字段:如性别、生日、会员等级等',

    INDEX idx_username (username),
    INDEX idx_email (email),
    INDEX idx_phone (phone),
    INDEX idx_tenant_id (tenant_id),
    INDEX idx_deleted_at (deleted_at),
    INDEX idx_status (status),
    INDEX idx_last_login_at (last_login_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户主表';

-- ==========================
-- 2. user_profiles - 用户扩展信息(1:1)
-- ==========================
CREATE TABLE user_profiles (
    user_id BIGINT PRIMARY KEY COMMENT '关联 users.id,外键',
    real_name VARCHAR(50) NULL COMMENT '真实姓名',
    gender ENUM('male', 'female', 'other') NULL COMMENT '性别',
    birth_date DATE NULL COMMENT '出生日期',
    nationality VARCHAR(50) NULL COMMENT '国籍',
    id_card VARCHAR(18) NULL COMMENT '身份证号(可选加密)',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    CONSTRAINT fk_user_profile_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户档案扩展表';

-- ==========================
-- 3. addresses - 收货地址
-- ==========================
CREATE TABLE addresses (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '地址ID',
    user_id BIGINT NOT NULL COMMENT '所属用户',
    receiver_name VARCHAR(50) NOT NULL COMMENT '收件人姓名',
    phone VARCHAR(20) NOT NULL COMMENT '联系电话',
    province VARCHAR(50) NOT NULL COMMENT '省',
    city VARCHAR(50) NOT NULL COMMENT '市',
    district VARCHAR(50) NOT NULL COMMENT '区/县',
    detail_address TEXT NOT NULL COMMENT '详细地址',
    postal_code VARCHAR(10) NULL COMMENT '邮编',
    is_default TINYINT(1) DEFAULT 0 COMMENT '是否默认地址',
    is_deleted TINYINT(1) DEFAULT 0 COMMENT '软删除标志',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    created_by BIGINT NULL,
    updated_by BIGINT NULL,
    tenant_id BIGINT DEFAULT 1,

    INDEX idx_user_id (user_id),
    INDEX idx_is_default (is_default),
    INDEX idx_phone (phone),
    INDEX idx_tenant_id (tenant_id),
    INDEX idx_deleted (is_deleted),

    CONSTRAINT fk_address_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收货地址表';

-- ==========================
-- 4. categories - 商品分类(树形结构)
-- ==========================
CREATE TABLE categories (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '分类ID',
    name VARCHAR(100) NOT NULL COMMENT '分类名称',
    slug VARCHAR(100) NOT NULL UNIQUE COMMENT 'URL别名,如 iphone-15',
    parent_id BIGINT NULL COMMENT '父分类ID,NULL=顶级',
    level TINYINT DEFAULT 1 COMMENT '层级深度(1=一级)',
    sort_order INT DEFAULT 0 COMMENT '排序权重',
    is_active TINYINT(1) DEFAULT 1 COMMENT '是否启用',
    description TEXT NULL COMMENT '描述',
    icon_url VARCHAR(500) NULL COMMENT '图标URL',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    created_by BIGINT NULL,
    updated_by BIGINT NULL,
    tenant_id BIGINT DEFAULT 1,

    INDEX idx_parent_id (parent_id),
    INDEX idx_slug (slug),
    INDEX idx_level (level),
    INDEX idx_sort_order (sort_order),
    INDEX idx_tenant_id (tenant_id),

    CONSTRAINT fk_category_parent FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表(支持无限级)';

-- ==========================
-- 5. products - 商品主表(SPU)
-- ==========================
CREATE TABLE products (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '商品ID(SPU)',
    category_id BIGINT NOT NULL COMMENT '所属分类',
    name VARCHAR(200) NOT NULL COMMENT '商品名称',
    subtitle VARCHAR(300) NULL COMMENT '副标题',
    brand VARCHAR(100) NULL COMMENT '品牌',
    model VARCHAR(100) NULL COMMENT '型号',
    description LONGTEXT NULL COMMENT '详细介绍(富文本)',
    spec_template JSON NULL COMMENT '规格模板:{"颜色":["黑","白"], "内存":["128G","256G"]}',
    images JSON NULL COMMENT '主图列表:["url1.jpg", "url2.jpg"]',
    video_url VARCHAR(500) NULL COMMENT '视频介绍链接',
    status ENUM('draft', 'on_sale', 'off_shelf', 'archived') DEFAULT 'draft' COMMENT '上下架状态',
    weight_gram INT NULL COMMENT '重量(克)',
    meta_title VARCHAR(200) NULL COMMENT 'SEO标题',
    meta_description TEXT NULL COMMENT 'SEO描述',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    created_by BIGINT NULL,
    updated_by BIGINT NULL,
    tenant_id BIGINT DEFAULT 1,

    INDEX idx_category_id (category_id),
    INDEX idx_name (name),
    INDEX idx_brand (brand),
    INDEX idx_status (status),
    INDEX idx_tenant_id (tenant_id),
    INDEX idx_created_at (created_at),

    CONSTRAINT fk_product_category FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品主表(SPU)';

-- ==========================
-- 6. skus - 商品规格(SKU)
-- ==========================
CREATE TABLE skus (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 'SKU ID',
    product_id BIGINT NOT NULL COMMENT '关联商品SPU',
    sku_code VARCHAR(50) NOT NULL UNIQUE COMMENT 'SKU编码,如 PROD-1001-BLACK-256G',
    name VARCHAR(200) NOT NULL COMMENT '规格名称(如:iPhone 15 黑色 256GB)',
    price_decimal DECIMAL(10,2) NOT NULL COMMENT '销售价格(单位:元)',
    cost_price DECIMAL(10,2) NULL COMMENT '成本价',
    market_price DECIMAL(10,2) NULL COMMENT '市场价',
    attributes JSON NOT NULL COMMENT '具体属性:{"颜色":"黑色","内存":"256GB"}',
    images JSON NULL COMMENT '该SKU专属图片列表',
    is_active TINYINT(1) DEFAULT 1 COMMENT '是否上架',
    weight_gram INT NULL COMMENT '重量(克)',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    created_by BIGINT NULL,
    updated_by BIGINT NULL,
    tenant_id BIGINT DEFAULT 1,

    INDEX idx_product_id (product_id),
    INDEX idx_sku_code (sku_code),
    INDEX idx_price_decimal (price_decimal),
    INDEX idx_is_active (is_active),
    INDEX idx_tenant_id (tenant_id),

    CONSTRAINT fk_sku_product FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品规格表(SKU)';

-- ==========================
-- 7. inventory - 库存表(按SKU管理)
-- ==========================
CREATE TABLE inventory (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '库存ID',
    sku_id BIGINT NOT NULL UNIQUE COMMENT '关联SKU',
    stock_quantity INT NOT NULL DEFAULT 0 COMMENT '可用库存数量',
    reserved_quantity INT NOT NULL DEFAULT 0 COMMENT '已预留(下单未支付)',
    locked_quantity INT NOT NULL DEFAULT 0 COMMENT '锁定中(秒杀/预扣)',
    last_updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_by BIGINT NULL,
    tenant_id BIGINT DEFAULT 1,

    INDEX idx_sku_id (sku_id),
    INDEX idx_stock_quantity (stock_quantity),
    INDEX idx_tenant_id (tenant_id),

    CONSTRAINT fk_inventory_sku FOREIGN KEY (sku_id) REFERENCES skus(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存表(按SKU粒度)';

-- ==========================
-- 8. cart_items - 购物车
-- ==========================
CREATE TABLE cart_items (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '购物车项ID',
    user_id BIGINT NOT NULL COMMENT '用户ID',
    sku_id BIGINT NOT NULL COMMENT '商品SKU',
    quantity INT NOT NULL DEFAULT 1 COMMENT '数量',
    added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '加入时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    is_deleted TINYINT(1) DEFAULT 0 COMMENT '软删除',
    tenant_id BIGINT DEFAULT 1,

    INDEX idx_user_id (user_id),
    INDEX idx_sku_id (sku_id),
    INDEX idx_deleted (is_deleted),
    INDEX idx_tenant_id (tenant_id),
    UNIQUE KEY uk_user_sku (user_id, sku_id), -- 一个用户对同一SKU只能有一条记录

    CONSTRAINT fk_cart_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    CONSTRAINT fk_cart_sku FOREIGN KEY (sku_id) REFERENCES skus(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车项表';

-- ==========================
-- 9. orders - 订单主表
-- ==========================
CREATE TABLE orders (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '订单ID',
    order_no VARCHAR(32) NOT NULL UNIQUE COMMENT '订单编号,如 ORD202405200001',
    user_id BIGINT NOT NULL COMMENT '下单用户',
    address_id BIGINT NULL COMMENT '收货地址ID',
    payment_method ENUM('alipay', 'wechat', 'bank', 'cash_on_delivery') NULL COMMENT '支付方式',
    payment_status ENUM('unpaid', 'paid', 'refunded', 'failed') DEFAULT 'unpaid' COMMENT '支付状态',
    shipping_status ENUM('pending', 'shipped', 'delivered', 'cancelled') DEFAULT 'pending' COMMENT '物流状态',
    total_amount DECIMAL(10,2) NOT NULL COMMENT '订单总额(含运费)',
    subtotal_amount DECIMAL(10,2) NOT NULL COMMENT '商品小计',
    discount_amount DECIMAL(10,2) DEFAULT 0.00 COMMENT '优惠金额',
    shipping_fee DECIMAL(10,2) DEFAULT 0.00 COMMENT '运费',
    tax_amount DECIMAL(10,2) DEFAULT 0.00 COMMENT '税费',
    currency CHAR(3) DEFAULT 'CNY' COMMENT '货币代码:CNY/USD/EUR',
    buyer_message TEXT NULL COMMENT '买家留言',
    remark TEXT NULL COMMENT '管理员备注',
    ip_address VARCHAR(45) NULL COMMENT '下单IP',
    user_agent TEXT NULL COMMENT '客户端UA',
    channel ENUM('web', 'app', 'mini_program', 'api') DEFAULT 'web' COMMENT '下单渠道',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    paid_at TIMESTAMP NULL COMMENT '支付时间',
    shipped_at TIMESTAMP NULL COMMENT '发货时间',
    delivered_at TIMESTAMP NULL COMMENT '签收时间',
    cancelled_at TIMESTAMP NULL COMMENT '取消时间',
    deleted_at TIMESTAMP NULL COMMENT '软删除',
    created_by BIGINT NULL,
    updated_by BIGINT NULL,
    tenant_id BIGINT DEFAULT 1,

    INDEX idx_order_no (order_no),
    INDEX idx_user_id (user_id),
    INDEX idx_payment_status (payment_status),
    INDEX idx_shipping_status (shipping_status),
    INDEX idx_created_at (created_at),
    INDEX idx_paid_at (paid_at),
    INDEX idx_tenant_id (tenant_id),
    INDEX idx_deleted_at (deleted_at),

    CONSTRAINT fk_order_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE RESTRICT,
    CONSTRAINT fk_order_address FOREIGN KEY (address_id) REFERENCES addresses(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单主表';

-- ==========================
-- 10. order_items - 订单明细
-- ==========================
CREATE TABLE order_items (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '订单项ID',
    order_id BIGINT NOT NULL COMMENT '所属订单',
    sku_id BIGINT NOT NULL COMMENT '商品SKU',
    product_id BIGINT NOT NULL COMMENT '商品SPU(冗余,避免关联被删)',
    name VARCHAR(200) NOT NULL COMMENT '商品名称(快照)',
    price_decimal DECIMAL(10,2) NOT NULL COMMENT '下单时单价(快照)',
    quantity INT NOT NULL COMMENT '购买数量',
    total_amount DECIMAL(10,2) NOT NULL COMMENT '小计 = price * quantity',
    attributes JSON NOT NULL COMMENT '购买时的规格快照(如颜色、内存)',
    images JSON NULL COMMENT '商品图片快照',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    INDEX idx_order_id (order_id),
    INDEX idx_sku_id (sku_id),
    INDEX idx_product_id (product_id),

    CONSTRAINT fk_orderitem_order FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
    CONSTRAINT fk_orderitem_sku FOREIGN KEY (sku_id) REFERENCES skus(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单明细表(快照)';

-- ==========================
-- 11. coupons - 优惠券
-- ==========================
CREATE TABLE coupons (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '优惠券ID',
    code VARCHAR(50) NOT NULL UNIQUE COMMENT '优惠码(如 SAVE2024)',
    name VARCHAR(100) NOT NULL COMMENT '优惠券名称',
    type ENUM('fixed_amount', 'percentage', 'free_shipping') NOT NULL COMMENT '类型:满减、折扣、免邮',
    value DECIMAL(10,2) NOT NULL COMMENT '面值(满减金额或折扣率)',
    min_order_amount DECIMAL(10,2) DEFAULT 0.00 COMMENT '最低消费门槛',
    max_discount_amount DECIMAL(10,2) NULL COMMENT '最高抵扣额(仅限满减)',
    valid_from TIMESTAMP NOT NULL COMMENT '生效时间',
    valid_to TIMESTAMP NOT NULL COMMENT '失效时间',
    total_quantity INT NOT NULL COMMENT '总发行量',
    used_quantity INT DEFAULT 0 COMMENT '已使用数量',
    is_active TINYINT(1) DEFAULT 1 COMMENT '是否启用',
    restriction JSON NULL COMMENT '限制条件:{"user_types":["new"], "product_ids":[1,2,3]}',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    created_by BIGINT NULL,
    tenant_id BIGINT DEFAULT 1,

    INDEX idx_code (code),
    INDEX idx_valid_period (valid_from, valid_to),
    INDEX idx_is_active (is_active),
    INDEX idx_tenant_id (tenant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券定义表';

-- ==========================
-- 12. coupon_usages - 优惠券使用记录
-- ==========================
CREATE TABLE coupon_usages (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '使用记录ID',
    coupon_id BIGINT NOT NULL COMMENT '关联优惠券',
    user_id BIGINT NOT NULL COMMENT '使用用户',
    order_id BIGINT NULL COMMENT '关联订单',
    used_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '使用时间',
    discount_amount DECIMAL(10,2) NOT NULL COMMENT '本次抵扣金额',
    tenant_id BIGINT DEFAULT 1,

    INDEX idx_coupon_id (coupon_id),
    INDEX idx_user_id (user_id),
    INDEX idx_order_id (order_id),
    INDEX idx_used_at (used_at),
    INDEX idx_tenant_id (tenant_id),
    UNIQUE KEY uk_user_coupon (user_id, coupon_id), -- 一人一券最多用一次(可选)

    CONSTRAINT fk_couponusage_coupon FOREIGN KEY (coupon_id) REFERENCES coupons(id) ON DELETE CASCADE,
    CONSTRAINT fk_couponusage_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    CONSTRAINT fk_couponusage_order FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券使用记录表';

-- ==========================
-- 13. product_reviews - 商品评价
-- ==========================
CREATE TABLE product_reviews (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '评价ID',
    product_id BIGINT NOT NULL COMMENT '商品SPU',
    user_id BIGINT NOT NULL COMMENT '评价用户',
    order_item_id BIGINT NULL COMMENT '关联订单项(确保真实购买)',
    rating TINYINT NOT NULL COMMENT '评分 1~5',
    title VARCHAR(100) NULL COMMENT '标题',
    content TEXT NOT NULL COMMENT '评价内容',
    images JSON NULL COMMENT '上传图片列表',
    helpful_count INT DEFAULT 0 COMMENT '点赞数',
    is_anonymous TINYINT(1) DEFAULT 0 COMMENT '是否匿名',
    status ENUM('pending', 'approved', 'rejected', 'hidden') DEFAULT 'pending' COMMENT '审核状态',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    tenant_id BIGINT DEFAULT 1,

    INDEX idx_product_id (product_id),
    INDEX idx_user_id (user_id),
    INDEX idx_rating (rating),
    INDEX idx_status (status),
    INDEX idx_created_at (created_at),
    INDEX idx_tenant_id (tenant_id),

    CONSTRAINT fk_review_product FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE,
    CONSTRAINT fk_review_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    CONSTRAINT fk_review_order_item FOREIGN KEY (order_item_id) REFERENCES order_items(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品评价表';

✅ 二、PostgreSQL 版本(完整支持 JSONB、UUID、序列、强约束)

✅ PostgreSQL 更适合复杂电商系统:支持 JSONB 索引、序列、事务更强、更标准

-- 设置字符集(PostgreSQL 默认 UTF8)
SET client_encoding TO 'UTF8';

-- 创建序列(推荐用 SERIAL / BIGSERIAL)
-- ==========================
-- 1. users
-- ==========================
CREATE TABLE users (
    id BIGSERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    phone VARCHAR(20) UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    avatar_url VARCHAR(500),
    status VARCHAR(20) CHECK (status IN ('active', 'inactive', 'banned', 'deleted')) DEFAULT 'active',
    last_login_at TIMESTAMP WITHOUT TIME ZONE,
    login_ip INET,
    created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    deleted_at TIMESTAMP WITHOUT TIME ZONE,
    created_by BIGINT,
    updated_by BIGINT,
    tenant_id BIGINT DEFAULT 1,
    metadata JSONB,

    CONSTRAINT chk_tenant_positive CHECK (tenant_id > 0)
);

CREATE INDEX idx_users_username ON users(username);
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_phone ON users(phone);
CREATE INDEX idx_users_tenant ON users(tenant_id);
CREATE INDEX idx_users_deleted ON users(deleted_at);
CREATE INDEX idx_users_status ON users(status);
CREATE INDEX idx_users_last_login ON users(last_login_at);

-- ==========================
-- 2. user_profiles
-- ==========================
CREATE TABLE user_profiles (
    user_id BIGINT PRIMARY KEY REFERENCES users(id) ON DELETE CASCADE,
    real_name VARCHAR(50),
    gender VARCHAR(10) CHECK (gender IN ('male', 'female', 'other')),
    birth_date DATE,
    nationality VARCHAR(50),
    id_card VARCHAR(18),
    created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW()
);

-- ==========================
-- 3. addresses
-- ==========================
CREATE TABLE addresses (
    id BIGSERIAL PRIMARY KEY,
    user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    receiver_name VARCHAR(50) NOT NULL,
    phone VARCHAR(20) NOT NULL,
    province VARCHAR(50) NOT NULL,
    city VARCHAR(50) NOT NULL,
    district VARCHAR(50) NOT NULL,
    detail_address TEXT NOT NULL,
    postal_code VARCHAR(10),
    is_default BOOLEAN DEFAULT FALSE,
    is_deleted BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    created_by BIGINT,
    updated_by BIGINT,
    tenant_id BIGINT DEFAULT 1,

    CONSTRAINT chk_tenant_positive CHECK (tenant_id > 0)
);

CREATE INDEX idx_addresses_user ON addresses(user_id);
CREATE INDEX idx_addresses_default ON addresses(is_default);
CREATE INDEX idx_addresses_phone ON addresses(phone);
CREATE INDEX idx_addresses_deleted ON addresses(is_deleted);
CREATE INDEX idx_addresses_tenant ON addresses(tenant_id);

-- ==========================
-- 4. categories
-- ==========================
CREATE TABLE categories (
    id BIGSERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    slug VARCHAR(100) NOT NULL UNIQUE,
    parent_id BIGINT REFERENCES categories(id) ON DELETE SET NULL,
    level SMALLINT DEFAULT 1 CHECK (level >= 1),
    sort_order INTEGER DEFAULT 0,
    is_active BOOLEAN DEFAULT TRUE,
    description TEXT,
    icon_url VARCHAR(500),
    created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    created_by BIGINT,
    updated_by BIGINT,
    tenant_id BIGINT DEFAULT 1,

    CONSTRAINT chk_tenant_positive CHECK (tenant_id > 0)
);

CREATE INDEX idx_categories_parent ON categories(parent_id);
CREATE INDEX idx_categories_slug ON categories(slug);
CREATE INDEX idx_categories_level ON categories(level);
CREATE INDEX idx_categories_sort ON categories(sort_order);
CREATE INDEX idx_categories_tenant ON categories(tenant_id);

-- ==========================
-- 5. products
-- ==========================
CREATE TABLE products (
    id BIGSERIAL PRIMARY KEY,
    category_id BIGINT NOT NULL REFERENCES categories(id) ON DELETE RESTRICT,
    name VARCHAR(200) NOT NULL,
    subtitle VARCHAR(300),
    brand VARCHAR(100),
    model VARCHAR(100),
    description TEXT,
    spec_template JSONB,
    images JSONB,
    video_url VARCHAR(500),
    status VARCHAR(20) CHECK (status IN ('draft', 'on_sale', 'off_shelf', 'archived')) DEFAULT 'draft',
    weight_gram INTEGER,
    meta_title VARCHAR(200),
    meta_description TEXT,
    created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    created_by BIGINT,
    updated_by BIGINT,
    tenant_id BIGINT DEFAULT 1,

    CONSTRAINT chk_tenant_positive CHECK (tenant_id > 0)
);

CREATE INDEX idx_products_category ON products(category_id);
CREATE INDEX idx_products_name ON products(name);
CREATE INDEX idx_products_brand ON products(brand);
CREATE INDEX idx_products_status ON products(status);
CREATE INDEX idx_products_tenant ON products(tenant_id);
CREATE INDEX idx_products_created ON products(created_at);

-- ==========================
-- 6. skus
-- ==========================
CREATE TABLE skus (
    id BIGSERIAL PRIMARY KEY,
    product_id BIGINT NOT NULL REFERENCES products(id) ON DELETE CASCADE,
    sku_code VARCHAR(50) NOT NULL UNIQUE,
    name VARCHAR(200) NOT NULL,
    price_decimal DECIMAL(10,2) NOT NULL,
    cost_price DECIMAL(10,2),
    market_price DECIMAL(10,2),
    attributes JSONB NOT NULL,
    images JSONB,
    is_active BOOLEAN DEFAULT TRUE,
    weight_gram INTEGER,
    created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    created_by BIGINT,
    updated_by BIGINT,
    tenant_id BIGINT DEFAULT 1,

    CONSTRAINT chk_tenant_positive CHECK (tenant_id > 0)
);

CREATE INDEX idx_skus_product ON skus(product_id);
CREATE INDEX idx_skus_code ON skus(sku_code);
CREATE INDEX idx_skus_price ON skus(price_decimal);
CREATE INDEX idx_skus_active ON skus(is_active);
CREATE INDEX idx_skus_tenant ON skus(tenant_id);

-- ==========================
-- 7. inventory
-- ==========================
CREATE TABLE inventory (
    id BIGSERIAL PRIMARY KEY,
    sku_id BIGINT NOT NULL UNIQUE REFERENCES skus(id) ON DELETE CASCADE,
    stock_quantity INTEGER NOT NULL DEFAULT 0,
    reserved_quantity INTEGER NOT NULL DEFAULT 0,
    locked_quantity INTEGER NOT NULL DEFAULT 0,
    last_updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() ON UPDATE NOW(), -- PG 需触发器实现
    created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    updated_by BIGINT,
    tenant_id BIGINT DEFAULT 1,

    CONSTRAINT chk_tenant_positive CHECK (tenant_id > 0)
);

-- 👇 在 PostgreSQL 中,ON UPDATE NOW() 不原生支持,需创建触发器(见下方补充)
CREATE INDEX idx_inventory_sku ON inventory(sku_id);
CREATE INDEX idx_inventory_stock ON inventory(stock_quantity);
CREATE INDEX idx_inventory_tenant ON inventory(tenant_id);

-- ==========================
-- 8. cart_items
-- ==========================
CREATE TABLE cart_items (
    id BIGSERIAL PRIMARY KEY,
    user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    sku_id BIGINT NOT NULL REFERENCES skus(id) ON DELETE CASCADE,
    quantity INTEGER NOT NULL DEFAULT 1,
    added_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    is_deleted BOOLEAN DEFAULT FALSE,
    tenant_id BIGINT DEFAULT 1,

    CONSTRAINT chk_tenant_positive CHECK (tenant_id > 0),
    UNIQUE (user_id, sku_id)
);

CREATE INDEX idx_cart_user ON cart_items(user_id);
CREATE INDEX idx_cart_sku ON cart_items(sku_id);
CREATE INDEX idx_cart_deleted ON cart_items(is_deleted);
CREATE INDEX idx_cart_tenant ON cart_items(tenant_id);

-- ==========================
-- 9. orders
-- ==========================
CREATE TABLE orders (
    id BIGSERIAL PRIMARY KEY,
    order_no VARCHAR(32) NOT NULL UNIQUE,
    user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
    address_id BIGINT REFERENCES addresses(id) ON DELETE SET NULL,
    payment_method VARCHAR(20) CHECK (payment_method IN ('alipay', 'wechat', 'bank', 'cash_on_delivery')),
    payment_status VARCHAR(20) CHECK (payment_status IN ('unpaid', 'paid', 'refunded', 'failed')) DEFAULT 'unpaid',
    shipping_status VARCHAR(20) CHECK (shipping_status IN ('pending', 'shipped', 'delivered', 'cancelled')) DEFAULT 'pending',
    total_amount DECIMAL(10,2) NOT NULL,
    subtotal_amount DECIMAL(10,2) NOT NULL,
    discount_amount DECIMAL(10,2) DEFAULT 0.00,
    shipping_fee DECIMAL(10,2) DEFAULT 0.00,
    tax_amount DECIMAL(10,2) DEFAULT 0.00,
    currency CHAR(3) DEFAULT 'CNY',
    buyer_message TEXT,
    remark TEXT,
    ip_address INET,
    user_agent TEXT,
    channel VARCHAR(20) CHECK (channel IN ('web', 'app', 'mini_program', 'api')) DEFAULT 'web',
    created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    paid_at TIMESTAMP WITHOUT TIME ZONE,
    shipped_at TIMESTAMP WITHOUT TIME ZONE,
    delivered_at TIMESTAMP WITHOUT TIME ZONE,
    cancelled_at TIMESTAMP WITHOUT TIME ZONE,
    deleted_at TIMESTAMP WITHOUT TIME ZONE,
    created_by BIGINT,
    updated_by BIGINT,
    tenant_id BIGINT DEFAULT 1,

    CONSTRAINT chk_tenant_positive CHECK (tenant_id > 0)
);

CREATE INDEX idx_orders_no ON orders(order_no);
CREATE INDEX idx_orders_user ON orders(user_id);
CREATE INDEX idx_orders_payment ON orders(payment_status);
CREATE INDEX idx_orders_shipping ON orders(shipping_status);
CREATE INDEX idx_orders_created ON orders(created_at);
CREATE INDEX idx_orders_paid ON orders(paid_at);
CREATE INDEX idx_orders_deleted ON orders(deleted_at);
CREATE INDEX idx_orders_tenant ON orders(tenant_id);

-- ==========================
-- 10. order_items
-- ==========================
CREATE TABLE order_items (
    id BIGSERIAL PRIMARY KEY,
    order_id BIGINT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
    sku_id BIGINT NOT NULL REFERENCES skus(id) ON DELETE RESTRICT,
    product_id BIGINT NOT NULL,
    name VARCHAR(200) NOT NULL,
    price_decimal DECIMAL(10,2) NOT NULL,
    quantity INTEGER NOT NULL,
    total_amount DECIMAL(10,2) NOT NULL,
    attributes JSONB NOT NULL,
    images JSONB,
    created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),

    INDEX idx_order_items_order ON order_items(order_id),
    INDEX idx_order_items_sku ON order_items(sku_id),
    INDEX idx_order_items_product ON order_items(product_id)
);

-- ==========================
-- 11. coupons
-- ==========================
CREATE TABLE coupons (
    id BIGSERIAL PRIMARY KEY,
    code VARCHAR(50) NOT NULL UNIQUE,
    name VARCHAR(100) NOT NULL,
    type VARCHAR(20) CHECK (type IN ('fixed_amount', 'percentage', 'free_shipping')) NOT NULL,
    value DECIMAL(10,2) NOT NULL,
    min_order_amount DECIMAL(10,2) DEFAULT 0.00,
    max_discount_amount DECIMAL(10,2),
    valid_from TIMESTAMP WITHOUT TIME ZONE NOT NULL,
    valid_to TIMESTAMP WITHOUT TIME ZONE NOT NULL,
    total_quantity INTEGER NOT NULL,
    used_quantity INTEGER DEFAULT 0,
    is_active BOOLEAN DEFAULT TRUE,
    restriction JSONB,
    created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    created_by BIGINT,
    tenant_id BIGINT DEFAULT 1,

    CONSTRAINT chk_tenant_positive CHECK (tenant_id > 0)
);

CREATE INDEX idx_coupons_code ON coupons(code);
CREATE INDEX idx_coupons_valid ON coupons(valid_from, valid_to);
CREATE INDEX idx_coupons_active ON coupons(is_active);
CREATE INDEX idx_coupons_tenant ON coupons(tenant_id);

-- ==========================
-- 12. coupon_usages
-- ==========================
CREATE TABLE coupon_usages (
    id BIGSERIAL PRIMARY KEY,
    coupon_id BIGINT NOT NULL REFERENCES coupons(id) ON DELETE CASCADE,
    user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    order_id BIGINT REFERENCES orders(id) ON DELETE SET NULL,
    used_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    discount_amount DECIMAL(10,2) NOT NULL,
    tenant_id BIGINT DEFAULT 1,

    CONSTRAINT chk_tenant_positive CHECK (tenant_id > 0),
    UNIQUE (user_id, coupon_id)
);

CREATE INDEX idx_coupon_usage_coupon ON coupon_usages(coupon_id);
CREATE INDEX idx_coupon_usage_user ON coupon_usages(user_id);
CREATE INDEX idx_coupon_usage_order ON coupon_usages(order_id);
CREATE INDEX idx_coupon_usage_used_at ON coupon_usages(used_at);
CREATE INDEX idx_coupon_usage_tenant ON coupon_usages(tenant_id);

-- ==========================
-- 13. product_reviews
-- ==========================
CREATE TABLE product_reviews (
    id BIGSERIAL PRIMARY KEY,
    product_id BIGINT NOT NULL REFERENCES products(id) ON DELETE CASCADE,
    user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    order_item_id BIGINT REFERENCES order_items(id) ON DELETE SET NULL,
    rating SMALLINT CHECK (rating BETWEEN 1 AND 5),
    title VARCHAR(100),
    content TEXT NOT NULL,
    images JSONB,
    helpful_count INTEGER DEFAULT 0,
    is_anonymous BOOLEAN DEFAULT FALSE,
    status VARCHAR(20) CHECK (status IN ('pending', 'approved', 'rejected', 'hidden')) DEFAULT 'pending',
    created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    tenant_id BIGINT DEFAULT 1,

    CONSTRAINT chk_tenant_positive CHECK (tenant_id > 0)
);

CREATE INDEX idx_reviews_product ON product_reviews(product_id);
CREATE INDEX idx_reviews_user ON product_reviews(user_id);
CREATE INDEX idx_reviews_rating ON product_reviews(rating);
CREATE INDEX idx_reviews_status ON product_reviews(status);
CREATE INDEX idx_reviews_created ON product_reviews(created_at);
CREATE INDEX idx_reviews_tenant ON product_reviews(tenant_id);

-- 🔧 PostgreSQL 补充:为 inventory.last_updated_at 实现自动更新
CREATE OR REPLACE FUNCTION update_inventory_timestamp()
RETURNS TRIGGER AS $$
BEGIN
    NEW.last_updated_at = NOW();
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER tr_update_inventory_timestamp
BEFORE UPDATE ON inventory
FOR EACH ROW EXECUTE FUNCTION update_inventory_timestamp();

✅ 三、关键设计亮点总结

方面MySQLPostgreSQL
主键BIGINT AUTO_INCREMENTBIGSERIAL
JSON 支持JSON(可索引函数)JSONB(高性能,支持索引)
枚举ENUMCHECK + 字符串(更灵活)
IP 地址VARCHAR(45)INET 类型(原生支持)
自动更新时间ON UPDATE CURRENT_TIMESTAMP需触发器
并发控制乐观锁(version 字段)乐观锁 或 行锁
性能快,适合高并发读写更强事务、复杂查询、全文搜索
扩展性适合中小项目适合大型平台、微服务

✅ 四、部署建议

建议说明
🚀 生产环境推荐 PostgreSQL,更适合复杂业务、数据一致性要求高的场景
📦 快速原型MySQL 更轻量,生态成熟,适合创业团队
🔐 权限控制所有表都包含 tenant_id,便于 SaaS 多租户隔离
🔄 数据迁移使用 Flyway / Liquibase 管理 SQL 版本
📊 监控对 inventory.stock_quantity, orders.payment_status 做实时监控
📦 缓存SKU 价格、库存、优惠券用 Redis 缓存,减少 DB 压力
🧪 测试数据用 Faker 工具生成 10万+ 测试数据验证性能

✅ 五、后续可扩展方向

  • 加入 商品标签(tags)、促销活动(promotions)
  • 加入 分销系统(agent_id)
  • 加入 积分体系(points_ledger)
  • 加入 物流单号追踪(logistics_tracking)
  • 加入 商品评论情感分析(NLP)
  • 数据仓库:将订单、评价同步到 ClickHouse 或 Snowflake 做 BI 分析

✅ 结语

这个设计已经具备上线级电商系统的完整性,覆盖了从用户注册 → 商品浏览 → 加购 → 下单 → 支付 → 发货 → 评价 的全链路,并兼顾:

  • ✅ 数据一致性
  • ✅ 性能与扩展性
  • ✅ 审计与合规
  • ✅ 多租户与国际化
  • ✅ 可维护性

💬 你可以直接复制粘贴以上 SQL 到你的开发环境中运行,立即获得一个健壮的电商数据库骨架。

如果你需要配套的:

  • 📦 Spring Boot + MyBatis Plus Java 实体类
  • 📦 Django / FastAPI Python 模型
  • 📦 GraphQL Schema
  • 📦 数据字典 Excel 表

欢迎告诉我,我可以继续为你生成!

祝你项目顺利,日销百万!🚀

ShopXO v3.0.2企业级开源电商系统部署、核心功能与二次开发全解析 在构建在线商店时,选择一个功能全面、架构清晰且易于定制的电商系统是技术选型的关键。开源电商系统因其灵活性、成本可控和代码透明性,成为众多开发者和企业的首选。其核心原理通常基于成熟的MVC框架,通过模块化设计实现商品、订单、会员、营销等核心业务逻辑的解耦与复用。从技术价值看,这类系统不仅提供了开箱即用的基础功能,更重要的是为二次开发和深度定制提供了坚实基础,能有效支撑业务从零到一的快速启动和后续迭代。在实际应用场景中,无论是初创团队验证商业模式,还是企业需要搭建独立的品牌商城,一个设计良好的开源电商系统都能显 阅读详情

相关推荐

ShopXO开源电商系统深度解析:从ThinkPHP架构到企业级部署实战

企业级电商系统是构建在线零售业务的核心技术平台,其底层通常基于成熟的MVC框架实现业务逻辑与数据访问的分离。以ThinkPHP为代表的PHP框架,因其清晰的MVC分层、丰富的社区生态和高效的开发模式,常被选作此类系统的开发基石。在电商领域,这种架构的价值在于能够支撑复杂的多商户管理、商品SKU体系、订单交易流水和营销活动等高并发业务场景。对于寻求低成本、高可控性解决方案的中小企业和开发者而言,基于ThinkPHP等框架的免费开源电商系统,如ShopXO,提供了从源码学习、功能定制到生产部署的全链路实践机会。

weixin_29291185的博客 327

是一个综合性、企业级、可直接用于实际开发的电商系统核心数据库设计

电商系统数据库设计摘要 该数据库设计涵盖电商核心模块(用户、商品、订单、支付等),采用规范命名与合理数据类型,支持软删除、JSON扩展和多租户。包含12张核心表: 用户体系:users(主表)与user_profiles(扩展信息)1:1关联 商品管理:products(SPU)与skus(SKU)分离,通过inventory管理库存 订单流程:orders(主表)关联order_items(明细),支持优惠券(coupons) 其他模块:收货地址(addresses)、购物车(cart_items)、评价

python15397的博客 1055

Moltemplate建模----水盒子data文件

1功能介绍 Moltemplate是LAMMPS官方支持的建模工具之一,适用于LAMMPS建模。该程序创建了一种简单的文件格式来存储分子定义和力场,即模板LT。LT文件包含与特定分子有关的所有文本(包括坐标,键拓扑,角度,力场参数,约束,组和修复)。 Moltemplate可以复制分子,对其进行自定义,然后用它作为构建更大、更复杂分子的基础。构建后,可以自定义...

元素魔方科研服务 2593

SpringBoot企业级项目实战:电商系统开发全流程剖析

电商系统作为互联网商业的核心应用,为企业和消费者搭建了便捷的交易平台。它涵盖了商品展示、购物车管理、订单处理、用户管理等多个核心功能模块,旨在提供高效、安全、便捷的购物体验。

梵心白莲的博客 1364

别再让C盘爆红了!手把手教你将Anaconda虚拟环境迁移到其他盘(附权限问题解决)

本文详细指导如何将Anaconda虚拟环境从C盘迁移到其他驱动器,解决C盘空间不足问题。通过conda config命令和直接修改.condarc配置文件两种方法,确保环境迁移顺利进行,同时提供权限问题解决方案和长期维护技巧,帮助用户高效管理虚拟环境。

weixin_42525289的博客 420

TMC2209串口配置实战:从寄存器解析到电机精准控制

本文详细解析TMC2209步进电机驱动芯片的串口配置方法,从硬件连接到UART通信协议,再到核心寄存器功能详解。通过实战案例展示电流控制、微步细分和速度调节等关键配置,帮助工程师实现电机精准控制,并提供了常见故障诊断和优化技巧。

f6g7h8i9j的博客 1173

从零到亿级交易:ShopXO企业级电商系统的架构设计与技术实现

你是否曾面临这些痛点?企业级电商系统开发中,如何兼顾**多端适配**(PC/H5/小程序/APP)、**高并发处理**、**业务扩展性**与**开发效率**?如何设计既能支撑**日均百万级订单**,又能让第三方开发者轻松接入的插件生态?ShopXO作为国内领先的开源电商解决方案,基于ThinkPHP8框架构建了一套可复用的企业级架构,本文将深度剖析其底层设计哲学与技术实现。 读完本文你将掌握: ...

gitblog_00636的博客 1093

基于Jeecgboot3.9.0的vue3版本前后端分离的flowable流程管理平台

基于Jeecgboot3.9.0的vue3版本前后端分离的flowable流程管理平台

宁波阿成的博客 900

SpringBoot企业级项目实战:电商系统从0到1的架构演进

在当今数字化时代,电商系统已经成为企业开展业务的重要平台。它不仅可以打破地域限制,扩大市场覆盖范围,还能提高运营效率,降低成本。通过电商系统,企业可以直接与消费者进行沟通和交易,实现商品的快速流通和销售。

梵心白莲的博客 541

DNA图谱分析:自动分析DNA图谱中的变异YOLOv5、YOLOv8、YOLOv10

YOLO(You Only Look Once)是一种基于卷积神经网络(CNN)的目标检测模型,因其高效的检测速度和优异的精度而广泛应用于计算机视觉任务。一次性检测:与传统的目标检测方法不同,YOLO通过回归方法同时预测多个边界框和类别信息,从而实现高效的目标检测。高精度与高速度:YOLO在检测精度和速度之间找到了平衡,适用于实时目标检测任务。

YOLO 729

面向企业架构师的 SAP BTP 全景实践:多云、账户、运行时与端到端开发路径

摘要:SAP BTP为企业提供多云、多运行时(Cloud Foundry/Kyma/ABAP Cloud)的数字化转型平台,支持快速构建扩展应用。关键选择包括:1)根据合规与性能选择区域;2)区分Trial(90天限制)与Free Tier(无期限)方案;3)按场景选择运行时(CF适合微服务/Kyma适合云原生/ABAP Cloud适合S/4HANA扩展)。建议优先使用Free Tier进行POC,并通过BTP Cockpit统一管理,实现从验证到生产的平滑过渡。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 253

开发电商系统的技术选型

开发电商系统是一个复杂的任务,需要全面的技术选型来确保系统的稳定性、可扩展性和性能。本文将详细探讨在开发电商系统时涉及的各方面技术选型,包括架构设计、前端技术、后端技术、数据库选择、缓存策略、安全性、支付系统、日志和监控、以及自动化运维等多个方面,以期为技术人员提供一份详尽的参考指南。

nbsaas-boot基于Request-Response的企业级快速开发框架 1505

无人飞行器和车辆的协同配送物资问题——附带MATLAB代码

通过建立城市地图、生成物资点和配送任务、路径规划、协同调度以及仿真和评估等步骤,可以有效地解决物资配送的优化问题。通过建立城市地图、生成物资点和配送任务、路径规划、协同调度以及仿真和评估等步骤,可以有效地解决物资配送的优化问题。我们的目标是最小化物资配送的总时间,同时确保每个物资点都被正确配送的无人飞行器或车辆所访问。我们的目标是最小化物资配送的总时间,同时确保每个物资点都被正确配送的无人飞行器或车辆所访问。我们首先需要建立一个城市地图,包括物资点、无人飞行器的起始点和车辆的起始点。

CyberJolt的博客 948

企业级数据库管理:Navicat在电商系统中的应用实践

善用可视化工具,减少手写SQL的错误定期使用数据校验功能,确保数据一致性复杂操作前先备份,利用回滚功能降低风险建立标准的命名规范,方便团队协作合理使用定时任务,自动化重复性工作对于数据库管理工具的选择,我认为Navicat在易用性和功能性上找到了很好的平衡。特别是它的可视化操作,让不擅长SQL的同事也能参与数据库相关工作。如果你想快速体验数据库管理的便捷,可以试试InsCode(快马)平台。它内置了完整的开发环境,无需复杂配置就能开始项目,特别适合快速验证想法和协作开发。

SilvermistFalcon19的博客 1021

如何选择深度强化学习算法:MuZero/SAC/PPO/TD3/DDPG/DQN/等算法

如何选择深度强化学习算法:MuZero/SAC/PPO/TD3/DDPG/DQN/等算法

丨汀、的博客 5221

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

DB-GPT在企业数据仓库中的实战应用

通过配置DB-GPT的连接器模块,实现了与MySQL、MongoDB、API接口的自动对接。关键突破是让系统能识别不同数据源的字段语义映射,比如将电商系统的"user_id"与客服系统的"client_no"自动关联。最受业务团队好评的功能是直接输入"对比华东区2023年Q4与今年同期的退货率"这类问题,3秒内就能获得带可视化图表的结果报告。底层采用DB-GPT的SQL生成引擎,准确率经测试达到92%。例如提出"将销售额按省份汇总,排除测试订单"这样的需求,系统会自动生成对应的SQL和数据处理流水线。

IndigoNight21的博客 778

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

从零搭建企业级电商系统:Mall电商平台的完整指南

Mall电商平台是一套基于SpringBoot+MyBatis实现的企业级电商系统,包含前台商城与后台管理系统,支持Docker容器化部署。本文将带你了解如何从零开始搭建这套功能完善的电商解决方案,掌握从架构设计到实际部署的全过程。 ## 📊 系统架构概览 Mall采用微服务架构设计,通过模块化拆分实现高内聚低耦合,确保系统可扩展性和维护性。核心架构包含服务注册发现、API网关、业务服务层和

gitblog_01195的博客 903

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

电商系统|基于springboot + vue电商系统(源码+数据库+文档)

本文介绍了一个基于SpringBoot+Vue的电商系统开发项目。系统采用前后端分离架构,后端使用SpringBoot框架简化开发流程,前端采用Vue.js实现响应式界面,数据库选用MySQL。文章详细说明了系统设计原则、技术选型理由,并提供了功能演示、代码参考和测试案例。项目包含完整的商品管理模块实现代码,通过MyBatis-Plus进行数据操作。文末附有毕业设计选题推荐和源码获取方式。该系统具有规范的架构设计、完善的功能模块和良好的扩展性,适合作为计算机专业毕业设计参考项目。

Coder-coco的博客 982

【JAVA架构师成长之路】【电商系统实战】第1集:电商系统架构设计与开发实战

通过本课程,将从零开始构建一个高可用、高并发的电商系统,掌握企业级开发的完整流程与核心技术栈。

因为热爱,所以付出 569

电商系统|基于springboot 电商系统(源码+数据库+文档)

本文介绍了一个基于SpringBoot和Vue的电商系统开发方案。系统采用前后端分离架构,后端使用SpringBoot框架简化配置,前端采用Vue.js实现响应式界面,数据库选用MySQL。文章详细阐述了系统设计原则、技术选型理由,并提供了功能演示、代码参考和测试案例。此外,还包含毕设选题推荐和源码获取方式,为开发者提供了完整的项目参考方案。该系统具有良好的扩展性和维护性,适合作为电商平台开发的学习案例。

伟庭师兄的博客 1055

ShopXO:企业级免费开源电商系统的深度解析与应用实践

随着互联网技术的飞速发展,电子商务已成为现代商业活动的重要组成部分。为了满足企业对高效、灵活、可扩展电商解决方案的需求,ShopXO作为一款企业级免费开源电商系统应运而生。本文将对ShopXO进行全面解析,探讨其技术架构、核心功能、应用场景及实际使用案例,旨在为电商从业者提供一份详尽的参考指南。

chenchuang0128的博客 729

django-tenants实战教程:构建企业级多租户电商系统

在当今电商业务快速发展的背景下,企业级应用需要高效管理多个租户的数据隔离与资源共享。**django-tenants** 作为基于 PostgreSQL 模式(Schemas)的多租户解决方案,为开发者提供了轻量级yet强大的租户隔离机制,完美适用于构建SaaS平台或多商户电商系统。本文将通过实战案例,带你从环境搭建到功能实现,掌握使用 django-tenants 构建企业级应用的核心技能。

gitblog_00724的博客 864

从零开发Java电商系统:快马平台实战教程

上尝试了一个Java电商系统的实战项目,整个过程非常顺畅。这个项目特别适合想练习Java企业级开发的同学,所有功能都可以直接在平台上完成,还能一键部署测试效果。如果想继续扩展,可以考虑加入用户系统、支付接口、物流跟踪等功能。在快马平台上做这类实战项目,既不用操心环境配置,又能快速看到效果,对学习Java Web开发特别有帮助。大家如果对具体实现细节感兴趣,可以直接在平台上搜索"Java电商系统"模板,或者基于这个案例继续开发自己的版本。部署成功后,就能获得一个可公开访问的测试地址,方便分享给其他人体验。

RubyLion28的博客 995

Java编程实战指南核心技术与企业级开发应用

在数字化转型浪潮中,Java凭借其稳定、高效、跨平台的特性,持续成为企业级应用开发领域的核心语言。从传统的单体架构到现代的微服务化、云原生化,Java开发者不断将技术与业务需求结合,沉淀出一套“经久耐用”的方法论。未来十年,Java开发者需以更开放的姿态融合新技术,同时在设计中延续“百年经验”沉淀的核心原则——唯有如此,方能在时代浪潮中驾驭科技的风帆。- 策略模式(Strategy):用于实现算法家族的灵活切换。- 异步非阻塞处理:大任务(如生成订单流水)用消息队列(RabbitMQ/Kafka)解耦。

SeYNDdKA的博客 474

企业级数据仓库实战指南:从零构建完整数据体系

在当今数据驱动的商业环境中,构建一个稳定可靠的企业级数据仓库已成为每个技术团队必须掌握的核心能力。本实战指南将带领您从零开始,系统性地构建一个覆盖实时与离线场景的完整数据仓库体系,解决企业在数据处理中面临的关键挑战。 ## 🎯 数据仓库架构设计的核心挑战 ### 如何设计可扩展的技术架构 [![企业级数据仓库架构图](https://raw.gitcode.com/gh_mirrors/d

gitblog_00462的博客 802

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 112
上一篇: 电商系统中用户可能触发的所有核心 SQL 操作
下一篇: 用户在访问电商系统的首页会触发什么SQL操作?
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值