大数跨境
0
0

FastAPI框架:MySQL 在 ERP 系统中的数据表结构设计

FastAPI框架:MySQL 在 ERP 系统中的数据表结构设计 David跨境日记
2025-10-17
5
导读:“ERP(企业资源计划)系统涉及企业核心业务流程,数据表结构设计需兼顾业务完整性、数据一致性和查询效率。

“ERP(企业资源计划)系统涉及企业核心业务流程,数据表结构设计需兼顾业务完整性、数据一致性和查询效率。结合 FastAPI 的异步特性和 MySQL 的事务支持,以下是一套合理的 ERP 系统数据表结构设计方案。

设计原则

  1. 业务驱动:按采购、销售、库存、生产等核心模块划分
  2. 范式设计:遵循第三范式,减少数据冗余
  3. 关系清晰:明确表间关联(一对一、一对多、多对多)
  4. 可扩展性:预留字段和表结构扩展空间
  5. 审计跟踪:所有表包含创建 / 更新时间和操作人
  6. 性能优化:合理设计索引和分区策略

核心数据表结构

1. 基础信息模块

1.1 公司信息表(companies)

CREATE TABLE companies (    id INT AUTO_INCREMENT PRIMARY KEY,    company_code VARCHAR(20NOT NULL UNIQUE COMMENT '公司编码',    company_name VARCHAR(100NOT NULL COMMENT '公司名称',    address VARCHAR(255) COMMENT '地址',    contact_person VARCHAR(50) COMMENT '联系人',    contact_phone VARCHAR(20) COMMENT '联系电话',    email VARCHAR(100) COMMENT '邮箱',    tax_id VARCHAR(50) COMMENT '税号',    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用,1-启用',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    created_by INT NOT NULL COMMENT '创建人',    updated_by INT NOT NULL COMMENT '更新人',    INDEX idx_company_code (company_code)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '公司信息表';

1.2 部门表(departments)

CREATE TABLE departments (    id INT AUTO_INCREMENT PRIMARY KEY,    company_id INT NOT NULL COMMENT '所属公司ID',    dept_code VARCHAR(20NOT NULL COMMENT '部门编码',    dept_name VARCHAR(100NOT NULL COMMENT '部门名称',    parent_id INT COMMENT '上级部门ID',    manager_id INT COMMENT '部门经理ID',    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用,1-启用',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    created_by INT NOT NULL,    updated_by INT NOT NULL,    UNIQUE KEY uk_dept_code (company_id, dept_code),    INDEX idx_company (company_id),    INDEX idx_parent (parent_id),    FOREIGN KEY (company_id) REFERENCES companies(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '部门表';

1.3 用户表(users)

CREATE TABLE users (    id INT AUTO_INCREMENT PRIMARY KEY,    company_id INT NOT NULL COMMENT '所属公司ID',    dept_id INT COMMENT '所属部门ID',    user_code VARCHAR(20NOT NULL COMMENT '用户编码',    username VARCHAR(50NOT NULL COMMENT '用户名',    password_hash VARCHAR(255NOT NULL COMMENT '密码哈希',    full_name VARCHAR(50NOT NULL COMMENT '姓名',    phone VARCHAR(20) COMMENT '电话',    email VARCHAR(100) COMMENT '邮箱',    role_ids VARCHAR(255) COMMENT '角色ID,逗号分隔',    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用,1-启用',    last_login_at DATETIME COMMENT '最后登录时间',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    created_by INT NOT NULL,    updated_by INT NOT NULL,    UNIQUE KEY uk_user_code (company_id, user_code),    UNIQUE KEY uk_username (username),    INDEX idx_company_dept (company_id, dept_id),    FOREIGN KEY (company_id) REFERENCES companies(id),    FOREIGN KEY (dept_id) REFERENCES departments(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '用户表';

2. 供应链模块

2.1 供应商表(suppliers)

CREATE TABLE suppliers (    id INT AUTO_INCREMENT PRIMARY KEY,    company_id INT NOT NULL COMMENT '所属公司ID',    supplier_code VARCHAR(20NOT NULL COMMENT '供应商编码',    supplier_name VARCHAR(100NOT NULL COMMENT '供应商名称',    short_name VARCHAR(50) COMMENT '简称',    contact_person VARCHAR(50) COMMENT '联系人',    contact_phone VARCHAR(20) COMMENT '联系电话',    email VARCHAR(100) COMMENT '邮箱',    address VARCHAR(255) COMMENT '地址',    tax_id VARCHAR(50) COMMENT '税号',    bank_info VARCHAR(255) COMMENT '银行信息',    supplier_type TINYINT COMMENT '供应商类型',    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用,1-启用',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    created_by INT NOT NULL,    updated_by INT NOT NULL,    UNIQUE KEY uk_supplier_code (company_id, supplier_code),    INDEX idx_company (company_id),    INDEX idx_supplier_name (supplier_name),    FOREIGN KEY (company_id) REFERENCES companies(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '供应商表';

2.2 客户表(customers)

CREATE TABLE customers (    id INT AUTO_INCREMENT PRIMARY KEY,    company_id INT NOT NULL COMMENT '所属公司ID',    customer_code VARCHAR(20NOT NULL COMMENT '客户编码',    customer_name VARCHAR(100NOT NULL COMMENT '客户名称',    short_name VARCHAR(50) COMMENT '简称',    contact_person VARCHAR(50) COMMENT '联系人',    contact_phone VARCHAR(20) COMMENT '联系电话',    email VARCHAR(100) COMMENT '邮箱',    address VARCHAR(255) COMMENT '地址',    tax_id VARCHAR(50) COMMENT '税号',    customer_level TINYINT COMMENT '客户等级',    credit_limit DECIMAL(18,2DEFAULT 0 COMMENT '信用额度',    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用,1-启用',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    created_by INT NOT NULL,    updated_by INT NOT NULL,    UNIQUE KEY uk_customer_code (company_id, customer_code),    INDEX idx_company (company_id),    INDEX idx_customer_name (customer_name),    FOREIGN KEY (company_id) REFERENCES companies(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '客户表';

3. 产品管理模块

3.1 物料分类表(material_categories)

CREATE TABLE material_categories (    id INT AUTO_INCREMENT PRIMARY KEY,    company_id INT NOT NULL COMMENT '所属公司ID',    category_code VARCHAR(20NOT NULL COMMENT '分类编码',    category_name VARCHAR(100NOT NULL COMMENT '分类名称',    parent_id INT COMMENT '上级分类ID',    level INT NOT NULL COMMENT '层级',    sort_order INT DEFAULT 0 COMMENT '排序',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    created_by INT NOT NULL,    updated_by INT NOT NULL,    UNIQUE KEY uk_category_code (company_id, category_code),    INDEX idx_company (company_id),    INDEX idx_parent (parent_id),    FOREIGN KEY (company_id) REFERENCES companies(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '物料分类表';

3.2 物料表(materials)

CREATE TABLE materials (    id INT AUTO_INCREMENT PRIMARY KEY,    company_id INT NOT NULL COMMENT '所属公司ID',    category_id INT NOT NULL COMMENT '分类ID',    material_code VARCHAR(50NOT NULL COMMENT '物料编码',    material_name VARCHAR(200NOT NULL COMMENT '物料名称',    specification VARCHAR(255) COMMENT '规格型号',    unit VARCHAR(20NOT NULL COMMENT '单位',    material_type TINYINT NOT NULL COMMENT '物料类型:1-原材料,2-半成品,3-成品',    bar_code VARCHAR(100) COMMENT '条形码',    cost_price DECIMAL(18,4DEFAULT 0 COMMENT '成本价',    selling_price DECIMAL(18,4DEFAULT 0 COMMENT '售价',    tax_rate DECIMAL(10,2DEFAULT 0 COMMENT '税率(%)',    min_stock DECIMAL(18,4DEFAULT 0 COMMENT '最低库存',    max_stock DECIMAL(18,4DEFAULT 0 COMMENT '最高库存',    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用,1-启用',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    created_by INT NOT NULL,    updated_by INT NOT NULL,    UNIQUE KEY uk_material_code (company_id, material_code),    INDEX idx_company_category (company_id, category_id),    INDEX idx_material_name (material_name),    INDEX idx_bar_code (bar_code),    FOREIGN KEY (company_id) REFERENCES companies(id),    FOREIGN KEY (category_id) REFERENCES material_categories(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '物料表';

4. 库存管理模块

4.1 仓库表(warehouses)

CREATE TABLE warehouses (    id INT AUTO_INCREMENT PRIMARY KEY,    company_id INT NOT NULL COMMENT '所属公司ID',    warehouse_code VARCHAR(20NOT NULL COMMENT '仓库编码',    warehouse_name VARCHAR(100NOT NULL COMMENT '仓库名称',    address VARCHAR(255) COMMENT '地址',    manager_id INT COMMENT '仓库管理员ID',    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用,1-启用',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    created_by INT NOT NULL,    updated_by INT NOT NULL,    UNIQUE KEY uk_warehouse_code (company_id, warehouse_code),    INDEX idx_company (company_id),    FOREIGN KEY (company_id) REFERENCES companies(id),    FOREIGN KEY (manager_id) REFERENCES users(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '仓库表';

4.2 库存表(inventory)

CREATE TABLE inventory (    id INT AUTO_INCREMENT PRIMARY KEY,    company_id INT NOT NULL COMMENT '所属公司ID',    warehouse_id INT NOT NULL COMMENT '仓库ID',    material_id INT NOT NULL COMMENT '物料ID',    quantity DECIMAL(18,4NOT NULL DEFAULT 0 COMMENT '库存数量',    locked_quantity DECIMAL(18,4NOT NULL DEFAULT 0 COMMENT '锁定数量',    available_quantity DECIMAL(18,4NOT NULL DEFAULT 0 COMMENT '可用数量',    cost_price DECIMAL(18,4DEFAULT 0 COMMENT '成本价',    total_cost DECIMAL(18,4DEFAULT 0 COMMENT '总成本',    last_stockin_time DATETIME COMMENT '最后入库时间',    last_stockout_time DATETIME COMMENT '最后出库时间',    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    updated_by INT NOT NULL,    UNIQUE KEY uk_warehouse_material (warehouse_id, material_id),    INDEX idx_company (company_id),    INDEX idx_material (material_id),    FOREIGN KEY (company_id) REFERENCES companies(id),    FOREIGN KEY (warehouse_id) REFERENCES warehouses(id),    FOREIGN KEY (material_id) REFERENCES materials(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '库存表';

4.3 库存交易记录表(inventory_transactions)

CREATE TABLE inventory_transactions (    id INT AUTO_INCREMENT PRIMARY KEY,    company_id INT NOT NULL COMMENT '所属公司ID',    transaction_no VARCHAR(50NOT NULL COMMENT '交易单号',    transaction_type TINYINT NOT NULL COMMENT '交易类型:1-入库,2-出库,3-调拨,4-盘点',    source_type TINYINT COMMENT '来源类型:1-采购,2-销售,3-生产',    source_no VARCHAR(50) COMMENT '来源单号',    warehouse_id INT NOT NULL COMMENT '仓库ID',    material_id INT NOT NULL COMMENT '物料ID',    quantity DECIMAL(18,4NOT NULL COMMENT '数量',    unit_cost DECIMAL(18,4DEFAULT 0 COMMENT '单位成本',    total_cost DECIMAL(18,4DEFAULT 0 COMMENT '总成本',    batch_no VARCHAR(50) COMMENT '批次号',    transaction_time DATETIME NOT NULL COMMENT '交易时间',    remarks VARCHAR(500) COMMENT '备注',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    created_by INT NOT NULL,    INDEX idx_company (company_id),    INDEX idx_transaction_no (transaction_no),    INDEX idx_source_no (source_no),    INDEX idx_warehouse_material (warehouse_id, material_id),    INDEX idx_transaction_time (transaction_time),    FOREIGN KEY (company_id) REFERENCES companies(id),    FOREIGN KEY (warehouse_id) REFERENCES warehouses(id),    FOREIGN KEY (material_id) REFERENCES materials(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '库存交易记录表';

5. 采购管理模块

5.1 采购订单表(purchase_orders)

CREATE TABLE purchase_orders (    id INT AUTO_INCREMENT PRIMARY KEY,    company_id INT NOT NULL COMMENT '所属公司ID',    po_no VARCHAR(50NOT NULL COMMENT '采购单号',    supplier_id INT NOT NULL COMMENT '供应商ID',    order_date DATE NOT NULL COMMENT '订单日期',    expected_delivery_date DATE COMMENT '预计交货日期',    warehouse_id INT NOT NULL COMMENT '收货仓库ID',    total_amount DECIMAL(18,2NOT NULL DEFAULT 0 COMMENT '订单总金额',    total_tax DECIMAL(18,2NOT NULL DEFAULT 0 COMMENT '总税额',    total_amount_with_tax DECIMAL(18,2NOT NULL DEFAULT 0 COMMENT '价税合计',    status TINYINT NOT NULL COMMENT '状态:1-草稿,2-已审核,3-部分收货,4-全部收货,5-已取消',    payment_terms VARCHAR(100) COMMENT '付款条件',    remarks VARCHAR(500) COMMENT '备注',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    created_by INT NOT NULL,    updated_by INT NOT NULL,    reviewed_at DATETIME COMMENT '审核时间',    reviewed_by INT COMMENT '审核人',    UNIQUE KEY uk_po_no (company_id, po_no),    INDEX idx_company (company_id),    INDEX idx_supplier (supplier_id),    INDEX idx_order_date (order_date),    INDEX idx_status (status),    FOREIGN KEY (company_id) REFERENCES companies(id),    FOREIGN KEY (supplier_id) REFERENCES suppliers(id),    FOREIGN KEY (warehouse_id) REFERENCES warehouses(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '采购订单表';

5.2 采购订单明细表(purchase_order_items)

CREATE TABLE purchase_order_items (    id INT AUTO_INCREMENT PRIMARY KEY,    po_id INT NOT NULL COMMENT '采购订单ID',    material_id INT NOT NULL COMMENT '物料ID',    specification VARCHAR(255) COMMENT '规格型号',    unit VARCHAR(20NOT NULL COMMENT '单位',    order_quantity DECIMAL(18,4NOT NULL COMMENT '订购数量',    received_quantity DECIMAL(18,4NOT NULL DEFAULT 0 COMMENT '已收数量',    unit_price DECIMAL(18,4NOT NULL COMMENT '单价',    tax_rate DECIMAL(10,2DEFAULT 0 COMMENT '税率(%)',    tax_amount DECIMAL(18,2DEFAULT 0 COMMENT '税额',    amount DECIMAL(18,2NOT NULL COMMENT '金额',    amount_with_tax DECIMAL(18,2NOT NULL COMMENT '价税合计',    sort_order INT DEFAULT 0 COMMENT '排序',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    INDEX idx_po (po_id),    INDEX idx_material (material_id),    FOREIGN KEY (po_id) REFERENCES purchase_orders(id) ON DELETE CASCADE,    FOREIGN KEY (material_id) REFERENCES materials(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '采购订单明细表';

6. 销售管理模块

6.1 销售订单表(sales_orders)

CREATE TABLE sales_orders (    id INT AUTO_INCREMENT PRIMARY KEY,    company_id INT NOT NULL COMMENT '所属公司ID',    so_no VARCHAR(50NOT NULL COMMENT '销售单号',    customer_id INT NOT NULL COMMENT '客户ID',    order_date DATE NOT NULL COMMENT '订单日期',    expected_ship_date DATE COMMENT '预计发货日期',    warehouse_id INT NOT NULL COMMENT '发货仓库ID',    total_amount DECIMAL(18,2NOT NULL DEFAULT 0 COMMENT '订单总金额',    total_tax DECIMAL(18,2NOT NULL DEFAULT 0 COMMENT '总税额',    total_amount_with_tax DECIMAL(18,2NOT NULL DEFAULT 0 COMMENT '价税合计',    status TINYINT NOT NULL COMMENT '状态:1-草稿,2-已审核,3-部分发货,4-全部发货,5-已取消',    payment_terms VARCHAR(100) COMMENT '付款条件',    remarks VARCHAR(500) COMMENT '备注',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    created_by INT NOT NULL,    updated_by INT NOT NULL,    reviewed_at DATETIME COMMENT '审核时间',    reviewed_by INT COMMENT '审核人',    UNIQUE KEY uk_so_no (company_id, so_no),    INDEX idx_company (company_id),    INDEX idx_customer (customer_id),    INDEX idx_order_date (order_date),    INDEX idx_status (status),    FOREIGN KEY (company_id) REFERENCES companies(id),    FOREIGN KEY (customer_id) REFERENCES customers(id),    FOREIGN KEY (warehouse_id) REFERENCES warehouses(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '销售订单表';

6.2 销售订单明细表(sales_order_items)

CREATE TABLE sales_order_items (    id INT AUTO_INCREMENT PRIMARY KEY,    so_id INT NOT NULL COMMENT '销售订单ID',    material_id INT NOT NULL COMMENT '物料ID',    specification VARCHAR(255) COMMENT '规格型号',    unit VARCHAR(20NOT NULL COMMENT '单位',    order_quantity DECIMAL(18,4NOT NULL COMMENT '订购数量',    shipped_quantity DECIMAL(18,4NOT NULL DEFAULT 0 COMMENT '已发数量',    unit_price DECIMAL(18,4NOT NULL COMMENT '单价',    tax_rate DECIMAL(10,2DEFAULT 0 COMMENT '税率(%)',    tax_amount DECIMAL(18,2DEFAULT 0 COMMENT '税额',    amount DECIMAL(18,2NOT NULL COMMENT '金额',    amount_with_tax DECIMAL(18,2NOT NULL COMMENT '价税合计',    sort_order INT DEFAULT 0 COMMENT '排序',    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    INDEX idx_so (so_id),    INDEX idx_material (material_id),    FOREIGN KEY (so_id) REFERENCES sales_orders(id) ON DELETE CASCADE,    FOREIGN KEY (material_id) REFERENCES materials(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '销售订单明细表';

FastAPI 模型映射

使用 SQLAlchemy ORM 映射上述表结构,示例如下:

from sqlalchemy.ext.asyncio import AsyncAttrsfrom sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationshipfrom sqlalchemy import Integer, String, Numeric, DateTime, ForeignKey, Boolean, Text, Index, UniqueConstraintfrom datetime import datetimefrom typing import Optional, Listclass Base(AsyncAttrs, DeclarativeBase):    passclass Material(Base):    __tablename__ = "materials"
    id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)    company_id: Mapped[int] = mapped_column(ForeignKey("companies.id"))    category_id: Mapped[int] = mapped_column(ForeignKey("material_categories.id"))    material_code: Mapped[str] = mapped_column(String(50))    material_name: Mapped[str] = mapped_column(String(200))    specification: Mapped[Optional[str]] = mapped_column(String(255))    unit: Mapped[str] = mapped_column(String(20))    material_type: Mapped[int] = mapped_column()    bar_code: Mapped[Optional[str]] = mapped_column(String(100))    cost_price: Mapped[float] = mapped_column(Numeric(184), default=0)    selling_price: Mapped[float] = mapped_column(Numeric(184), default=0)    tax_rate: Mapped[float] = mapped_column(Numeric(102), default=0)    min_stock: Mapped[float] = mapped_column(Numeric(184), default=0)    max_stock: Mapped[float] = mapped_column(Numeric(184), default=0)    status: Mapped[int] = mapped_column(default=1)    created_at: Mapped[datetime] = mapped_column(default=datetime.now)    updated_at: Mapped[datetime] = mapped_column(default=datetime.now, onupdate=datetime.now)    created_by: Mapped[int] = mapped_column()    updated_by: Mapped[int] = mapped_column()
    # 关系定义    inventory_items: Mapped[List["Inventory"]] = relationship(back_populates="material")    po_items: Mapped[List["PurchaseOrderItem"]] = relationship(back_populates="material")    so_items: Mapped[List["SalesOrderItem"]] = relationship(back_populates="material")
    # 约束    __table_args__ = (        UniqueConstraint("company_id""material_code", name="uk_material_code"),        Index("idx_company_category""company_id""category_id"),        Index("idx_material_name""material_name"),        Index("idx_bar_code""bar_code"),    )

设计优化建议

  1. 分表策略

    • 历史订单表按年度分表(如sales_orders_2023
    • 库存交易记录表按月份分表
  2. 索引优化

    • 为高频查询字段创建索引(如订单号、物料编码)
    • 为关联查询创建联合索引(如company_id + status
    • 避免过度索引影响写入性能
  3. 事务管理

    • 库存变动必须在事务中执行
    • 订单状态变更使用乐观锁避免并发问题
  4. 数据归档

    • 定期归档历史数据到归档表
    • 归档表可使用压缩存储节省空间
  5. 读写分离

    • 报表查询、历史数据查询走从库
    • 实时交易、库存变更走主库

这套数据表结构设计覆盖了 ERP 系统的核心业务,通过合理的关系设计和索引策略,能够支持 FastAPI 构建高性能、高可用的 ERP 系统。实际应用中可根据企业具体业务需求进行调整和扩展。



关于【黄哥开源】

  • 聚焦开源整合前沿技术,覆盖企业,教育,物联网,园区、工地智慧城市建设等核心领域。

  • 提供更多前沿技术、高可用的开源项目。

  • 商务合作/项目开发/联系微信:mingyu17173




【声明】内容源于网络
0
0
David跨境日记
跨境分享说 | 每日分享跨境见解
内容 42855
粉丝 2
David跨境日记 跨境分享说 | 每日分享跨境见解
总阅读214.3k
粉丝2
内容42.9k