612 lines
30 KiB
Markdown
612 lines
30 KiB
Markdown
## partsinquiry 数据库文档
|
||
|
||
更新日期:2025-09-16(已插入演示数据)
|
||
|
||
说明:本文件根据远程库 mysql.tonaspace.com 中 `partsinquiry` 的实际结构生成,字段/索引/外键信息以线上为准。
|
||
|
||
### shops
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | 店铺/租户ID |
|
||
| name | VARCHAR(100) | NOT NULL | | 店铺名称 |
|
||
| status | TINYINT UNSIGNED | NOT NULL | 1 | 状态:1启用 0停用 |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明:
|
||
- id: 主键,自增
|
||
- name: 店铺名称
|
||
- status: 店铺状态(1启用/0停用)
|
||
- created_at/updated_at: 创建/更新时间
|
||
- deleted_at: 逻辑删除时间
|
||
|
||
### users
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | 用户ID |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | 所属店铺 |
|
||
| phone | VARCHAR(32) | YES | | 手机号 |
|
||
| name | VARCHAR(64) | NOT NULL | | 姓名 |
|
||
| role | VARCHAR(32) | NOT NULL | staff | 角色:owner/staff/finance/... |
|
||
| password_hash | VARCHAR(255) | YES | | 密码哈希(若采用短信登录可为空) |
|
||
| status | TINYINT UNSIGNED | NOT NULL | 1 | 状态:1启用 0停用 |
|
||
| is_owner | TINYINT(1) | NOT NULL | 0 | 是否店主 |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明:
|
||
- shop_id: 归属店铺
|
||
- role: 角色标识字符串
|
||
- is_owner: 是否店主标记
|
||
- 其余同名含义
|
||
|
||
### user_identities
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| provider | ENUM('wechat_mp','wechat_app') | NOT NULL | | 身份提供方:小程序/APP |
|
||
| openid | VARCHAR(64) | NOT NULL | | |
|
||
| unionid | VARCHAR(64) | YES | | |
|
||
| nickname | VARCHAR(64) | YES | | |
|
||
| avatar_url | VARCHAR(512) | YES | | |
|
||
| last_login_at | DATETIME | YES | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
|
||
字段说明:
|
||
- provider: wechat_mp(小程序)、wechat_app(APP)
|
||
- openid/unionid: 微信身份标识
|
||
|
||
### wechat_sessions
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| provider | ENUM('wechat_mp','wechat_app') | NOT NULL | | |
|
||
| openid | VARCHAR(64) | NOT NULL | | |
|
||
| session_key | VARCHAR(128) | NOT NULL | | |
|
||
| expires_at | DATETIME | NOT NULL | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
|
||
字段说明:
|
||
- session_key/expires_at: 会话密钥与过期时间
|
||
|
||
### system_parameters
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | 创建/最后修改人 |
|
||
| key | VARCHAR(64) | NOT NULL | | 参数键 |
|
||
| value | JSON | NOT NULL | | 参数值(JSON) |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
|
||
字段说明:
|
||
- key/value: 键/值(JSON)
|
||
|
||
### product_units
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| name | VARCHAR(16) | NOT NULL | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(product_units):
|
||
- name: 单位名称,如 件/个/箱
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_units_shop` (`shop_id`) - UNIQUE: `ux_units_shop_name` (`shop_id`,`name`)
|
||
**Foreign Keys**: - `fk_units_shop`: `shop_id` → `shops(id)` ON UPDATE NO ACTION ON DELETE NO ACTION - `fk_units_user`: `user_id` → `users(id)` ON UPDATE NO ACTION ON DELETE NO ACTION
|
||
|
||
### global_skus
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| name | VARCHAR(120) | NOT NULL | | SKU名称 |
|
||
| brand | VARCHAR(64) | YES | | |
|
||
| model | VARCHAR(64) | YES | | |
|
||
| spec | VARCHAR(128) | YES | | |
|
||
| barcode | VARCHAR(32) | YES | | |
|
||
| unit_id | BIGINT UNSIGNED | YES | | |
|
||
| tags | JSON | YES | | |
|
||
| status | ENUM('published','offline') | NOT NULL | published | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(global_skus):
|
||
- name/brand/model/spec/barcode: SKU 基本属性
|
||
- unit_id: 对应的计量单位
|
||
- tags: 结构化标签 JSON
|
||
- status: 上架状态(published/offline)
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_global_skus_brand_model` (`brand`,`model`) - UNIQUE: `ux_global_skus_barcode` (`barcode`)
|
||
**Foreign Keys**: - `fk_globalsku_unit`: `unit_id` → `product_units(id)` ON UPDATE NO ACTION ON DELETE NO ACTION
|
||
|
||
### product_categories
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| name | VARCHAR(64) | NOT NULL | | |
|
||
| parent_id | BIGINT UNSIGNED | YES | | |
|
||
| sort_order | INT | NOT NULL | 0 | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(product_categories):
|
||
- parent_id: 父分类,可为空
|
||
- sort_order: 排序
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_categories_shop` (`shop_id`) - KEY: `idx_categories_parent` (`parent_id`) - UNIQUE: `ux_categories_shop_name` (`shop_id`,`name`)
|
||
**Foreign Keys**: - `fk_categories_shop`: `shop_id` → `shops(id)` ON UPDATE NO ACTION ON DELETE NO ACTION - `fk_categories_user`: `user_id` → `users(id)` ON UPDATE NO ACTION ON DELETE NO ACTION - `fk_categories_parent`: `parent_id` → `product_categories(id)` ON UPDATE NO ACTION ON DELETE NO ACTION
|
||
|
||
### products
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| name | VARCHAR(120) | NOT NULL | | 供全文检索 |
|
||
| category_id | BIGINT UNSIGNED | YES | | |
|
||
| unit_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| brand | VARCHAR(64) | YES | | |
|
||
| model | VARCHAR(64) | YES | | |
|
||
| spec | VARCHAR(128) | YES | | |
|
||
| origin | VARCHAR(64) | YES | | |
|
||
| barcode | VARCHAR(32) | YES | | |
|
||
| alias | VARCHAR(120) | YES | | |
|
||
| description | TEXT | YES | | |
|
||
| global_sku_id | BIGINT UNSIGNED | YES | | |
|
||
| safe_min | DECIMAL(18,3) | YES | | |
|
||
| safe_max | DECIMAL(18,3) | YES | | |
|
||
| search_text | TEXT | YES | | 供全文检索的聚合字段(名称/品牌/型号/规格/别名) |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(products):
|
||
- category_id/unit_id/global_sku_id: 归属分类/单位/全局SKU
|
||
- safe_min/safe_max: 安全库存上下限
|
||
- search_text: 聚合检索字段(触发器维护)
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_products_shop` (`shop_id`) - KEY: `idx_products_category` (`category_id`) - KEY: `idx_products_unit` (`unit_id`) - FULLTEXT: `ft_products_search` (`name`,`brand`,`model`,`spec`,`search_text`) - UNIQUE: `ux_products_shop_barcode` (`shop_id`,`barcode`)
|
||
**Foreign Keys**: - `fk_products_shop`: `shop_id` → `shops(id)` - `fk_products_user`: `user_id` → `users(id)` - `fk_products_category`: `category_id` → `product_categories(id)` - `fk_products_unit`: `unit_id` → `product_units(id)` - `fk_products_globalsku`: `global_sku_id` → `global_skus(id)`
|
||
|
||
### product_aliases
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| product_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| alias | VARCHAR(120) | NOT NULL | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(product_aliases):
|
||
- alias: 商品别名(同义词)
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_product_alias_product` (`product_id`) - UNIQUE: `ux_product_alias` (`product_id`,`alias`)
|
||
**Foreign Keys**: - `fk_alias_shop`: `shop_id` → `shops(id)` - `fk_alias_user`: `user_id` → `users(id)` - `fk_alias_product`: `product_id` → `products(id)`
|
||
|
||
### product_images
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| product_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| url | VARCHAR(512) | NOT NULL | | |
|
||
| hash | VARCHAR(64) | YES | | 内容哈希(去重) |
|
||
| sort_order | INT | NOT NULL | 0 | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
|
||
字段说明(product_images):
|
||
- url/hash: 图片地址/内容哈希
|
||
- sort_order: 展示顺序
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_product_images_product` (`product_id`) - UNIQUE: `ux_product_image_hash` (`product_id`,`hash`)
|
||
**Foreign Keys**: - `fk_pimg_shop`: `shop_id` → `shops(id)` - `fk_pimg_user`: `user_id` → `users(id)` - `fk_pimg_product`: `product_id` → `products(id)` ON DELETE CASCADE
|
||
|
||
### product_prices
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| product_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| purchase_price | DECIMAL(18,2) | NOT NULL | 0.00 | |
|
||
| retail_price | DECIMAL(18,2) | NOT NULL | 0.00 | |
|
||
| wholesale_price | DECIMAL(18,2) | NOT NULL | 0.00 | |
|
||
| big_client_price | DECIMAL(18,2) | NOT NULL | 0.00 | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
|
||
字段说明(product_prices):
|
||
- purchase_price: 当前进价(用于近似毛利)
|
||
- retail/wholesale/big_client_price: 售价列
|
||
|
||
**Indexes**: - PRIMARY KEY: `product_id` - KEY: `idx_prices_shop` (`shop_id`)
|
||
**Foreign Keys**: - `fk_prices_product`: `product_id` → `products(id)` ON DELETE CASCADE - `fk_prices_shop`: `shop_id` → `shops(id)` - `fk_prices_user`: `user_id` → `users(id)`
|
||
|
||
### inventories
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| product_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| quantity | DECIMAL(18,3) | NOT NULL | 0.000 | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
|
||
字段说明(inventories):
|
||
- quantity: 当前库存数量(按商品一行聚合)
|
||
|
||
**Indexes**: - PRIMARY KEY: `product_id` - KEY: `idx_inventories_shop` (`shop_id`)
|
||
**Foreign Keys**: - `fk_inv_product`: `product_id` → `products(id)` ON DELETE CASCADE - `fk_inv_shop`: `shop_id` → `shops(id)` - `fk_inv_user`: `user_id` → `users(id)`
|
||
|
||
### customers
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| name | VARCHAR(120) | NOT NULL | | |
|
||
| phone | VARCHAR(32) | YES | | 座机 |
|
||
| address | VARCHAR(255) | YES | | 送货地址 |
|
||
| mobile | VARCHAR(32) | YES | | 手机 |
|
||
| level | VARCHAR(32) | YES | | 客户等级标签 |
|
||
| contact_name | VARCHAR(64) | YES | | 联系人 |
|
||
| price_level | ENUM('零售价','批发价','大单报价') | NOT NULL | 零售价 | 默认售价列(中文存储) |
|
||
| status | TINYINT UNSIGNED | NOT NULL | 1 | |
|
||
| ar_opening | DECIMAL(18,2) | NOT NULL | 0.00 | 期初应收 |
|
||
| remark | VARCHAR(255) | YES | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(customers):
|
||
- level: 等级标签
|
||
- price_level: 默认售价列(中文存储:零售价/批发价/大单报价)
|
||
- ar_opening: 期初应收
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_customers_shop` (`shop_id`) - KEY: `idx_customers_phone` (`phone`) - KEY: `idx_customers_mobile` (`mobile`)
|
||
**Foreign Keys**: - `fk_customers_shop`: `shop_id` → `shops(id)` - `fk_customers_user`: `user_id` → `users(id)`
|
||
|
||
### suppliers
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| name | VARCHAR(120) | NOT NULL | | |
|
||
| contact_name | VARCHAR(64) | YES | | 联系人 |
|
||
| mobile | VARCHAR(32) | YES | | 手机 |
|
||
| phone | VARCHAR(32) | YES | | 电话 |
|
||
| address | VARCHAR(255) | YES | | 经营地址 |
|
||
| status | TINYINT UNSIGNED | NOT NULL | 1 | |
|
||
| ap_opening | DECIMAL(18,2) | NOT NULL | 0.00 | 期初应付 |
|
||
| ap_payable | DECIMAL(18,2) | NOT NULL | 0.00 | 当前应付(实时维护) |
|
||
| remark | VARCHAR(255) | YES | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(suppliers):
|
||
- ap_opening/ap_payable: 期初应付/当前应付
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_suppliers_shop` (`shop_id`) - KEY: `idx_suppliers_phone` (`phone`) - KEY: `idx_suppliers_mobile` (`mobile`)
|
||
**Foreign Keys**: - `fk_suppliers_shop`: `shop_id` → `shops(id)` - `fk_suppliers_user`: `user_id` → `users(id)`
|
||
|
||
### accounts
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| name | VARCHAR(64) | NOT NULL | | |
|
||
| type | ENUM('cash','bank','alipay','wechat','other') | NOT NULL | cash | |
|
||
| bank_name | VARCHAR(64) | YES | | 银行名称(type=bank 可用) |
|
||
| bank_account | VARCHAR(64) | YES | | 银行账号(type=bank 可用) |
|
||
| balance | DECIMAL(18,2) | NOT NULL | 0.00 | |
|
||
| status | TINYINT UNSIGNED | NOT NULL | 1 | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(accounts):
|
||
- type: 账户类型(cash/bank/alipay/wechat/other)
|
||
- bank_name/bank_account: 银行账户信息(type=bank 时使用)
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_accounts_shop` (`shop_id`) - UNIQUE: `ux_accounts_shop_name` (`shop_id`,`name`)
|
||
**Foreign Keys**: - `fk_accounts_shop`: `shop_id` → `shops(id)` - `fk_accounts_user`: `user_id` → `users(id)`
|
||
|
||
### sales_orders
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | 创建人 |
|
||
| customer_id | BIGINT UNSIGNED | YES | | |
|
||
| order_no | VARCHAR(32) | NOT NULL | | |
|
||
| order_time | DATETIME | NOT NULL | | |
|
||
| status | ENUM('draft','approved','returned','void') | NOT NULL | draft | |
|
||
| amount | DECIMAL(18,2) | NOT NULL | 0.00 | 应收合计 |
|
||
| paid_amount | DECIMAL(18,2) | NOT NULL | 0.00 | 已收合计 |
|
||
| remark | VARCHAR(255) | YES | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(sales_orders):
|
||
- status: 单据状态(draft/approved/returned/void)
|
||
- amount/paid_amount: 应收/已收合计
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_sales_shop_time` (`shop_id`,`order_time`) - KEY: `idx_sales_customer` (`customer_id`) - UNIQUE: `ux_sales_order_no` (`shop_id`,`order_no`)
|
||
**Foreign Keys**: - `fk_sales_shop`: `shop_id` → `shops(id)` - `fk_sales_user`: `user_id` → `users(id)` - `fk_sales_customer`: `customer_id` → `customers(id)`
|
||
|
||
### sales_order_items
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| order_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| product_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| quantity | DECIMAL(18,3) | NOT NULL | | |
|
||
| unit_price | DECIMAL(18,2) | NOT NULL | | |
|
||
| discount_rate | DECIMAL(5,2) | NOT NULL | 0.00 | 折扣百分比0-100 |
|
||
| amount | DECIMAL(18,2) | NOT NULL | | |
|
||
|
||
字段说明(sales_order_items):
|
||
- quantity/unit_price/discount_rate/amount: 数量/单价/折扣%/行金额
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_soi_order` (`order_id`) - KEY: `idx_soi_product` (`product_id`)
|
||
**Foreign Keys**: - `fk_soi_order`: `order_id` → `sales_orders(id)` ON DELETE CASCADE - `fk_soi_product`: `product_id` → `products(id)`
|
||
|
||
### purchase_orders
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| supplier_id | BIGINT UNSIGNED | YES | | |
|
||
| order_no | VARCHAR(32) | NOT NULL | | |
|
||
| order_time | DATETIME | NOT NULL | | |
|
||
| status | ENUM('draft','approved','void','returned') | NOT NULL | draft | |
|
||
| amount | DECIMAL(18,2) | NOT NULL | 0.00 | 应付合计 |
|
||
| paid_amount | DECIMAL(18,2) | NOT NULL | 0.00 | 已付合计 |
|
||
| remark | VARCHAR(255) | YES | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(purchase_orders/purchase_order_items):
|
||
- 与销售单结构类似,含应付与明细
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_purchase_shop_time` (`shop_id`,`order_time`) - KEY: `idx_purchase_supplier` (`supplier_id`) - UNIQUE: `ux_purchase_order_no` (`shop_id`,`order_no`)
|
||
**Foreign Keys**: - `fk_purchase_shop`: `shop_id` → `shops(id)` - `fk_purchase_user`: `user_id` → `users(id)` - `fk_purchase_supplier`: `supplier_id` → `suppliers(id)`
|
||
|
||
### purchase_order_items
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| order_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| product_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| quantity | DECIMAL(18,3) | NOT NULL | | |
|
||
| unit_price | DECIMAL(18,2) | NOT NULL | | |
|
||
| amount | DECIMAL(18,2) | NOT NULL | | |
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_poi_order` (`order_id`) - KEY: `idx_poi_product` (`product_id`)
|
||
**Foreign Keys**: - `fk_poi_order`: `order_id` → `purchase_orders(id)` ON DELETE CASCADE - `fk_poi_product`: `product_id` → `products(id)`
|
||
|
||
### payments
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| biz_type | ENUM('sale','purchase','other') | NOT NULL | | |
|
||
| biz_id | BIGINT UNSIGNED | YES | | 业务表ID:sales_orders/purchase_orders/other_transactions |
|
||
| account_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| direction | ENUM('in','out') | NOT NULL | | 收款/付款 |
|
||
| amount | DECIMAL(18,2) | NOT NULL | | |
|
||
| pay_time | DATETIME | NOT NULL | | |
|
||
| remark | VARCHAR(255) | YES | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
|
||
字段说明(payments):
|
||
- biz_type/biz_id: 业务来源及关联主键
|
||
- direction: in 收款 / out 付款
|
||
- account_id: 使用的结算账户
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_payments_shop_time` (`shop_id`,`pay_time`) - KEY: `idx_payments_biz` (`biz_type`,`biz_id`)
|
||
**Foreign Keys**: - `fk_payments_shop`: `shop_id` → `shops(id)` - `fk_payments_user`: `user_id` → `users(id)` - `fk_payments_account`: `account_id` → `accounts(id)`
|
||
|
||
### other_transactions
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| type | ENUM('income','expense') | NOT NULL | | |
|
||
| category | VARCHAR(64) | NOT NULL | | |
|
||
| counterparty_type | VARCHAR(32) | YES | | customer/supplier/other |
|
||
| counterparty_id | BIGINT UNSIGNED | YES | | |
|
||
| account_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| amount | DECIMAL(18,2) | NOT NULL | | |
|
||
| tx_time | DATETIME | NOT NULL | | |
|
||
| remark | VARCHAR(255) | YES | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(other_transactions):
|
||
- type/category: 收入/支出与分类
|
||
- counterparty_type/id: 往来单位(可空)
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_ot_shop_time` (`shop_id`,`tx_time`) - KEY: `idx_ot_account` (`account_id`)
|
||
**Foreign Keys**: - `fk_ot_shop`: `shop_id` → `shops(id)` - `fk_ot_user`: `user_id` → `users(id)` - `fk_ot_account`: `account_id` → `accounts(id)`
|
||
|
||
### finance_categories
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| type | ENUM('income','expense') | NOT NULL | | 分类类型 |
|
||
| key | VARCHAR(64) | NOT NULL | | 分类键(稳定标识) |
|
||
| label | VARCHAR(64) | NOT NULL | | 分类名称(支持中文) |
|
||
| sort_order | INT | NOT NULL | 0 | 排序 |
|
||
| status | TINYINT UNSIGNED | NOT NULL | 1 | 1启用 0停用 |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
|
||
字段说明(finance_categories):
|
||
- key: 稳定标识(代码不随展示文案改变)
|
||
- label: 展示名称
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - UNIQUE: `ux_finance_cat` (`shop_id`,`type`,`key`) - KEY: `idx_finance_cat_shop_type` (`shop_id`,`type`)
|
||
**Foreign Keys**: - `fk_finance_cat_shop`: `shop_id` → `shops(id)`
|
||
|
||
### 触发器
|
||
- `trg_products_bi`: BEFORE INSERT ON `products` → 设置 `products.search_text`
|
||
- `trg_products_au`: BEFORE UPDATE ON `products` → 维护 `products.search_text`
|
||
- `trg_palias_ai`: AFTER INSERT ON `product_aliases` → 重建 `products.search_text`
|
||
- `trg_palias_au`: AFTER UPDATE ON `product_aliases` → 重建 `products.search_text`
|
||
- `trg_palias_ad`: AFTER DELETE ON `product_aliases` → 重建 `products.search_text`
|
||
|
||
|
||
### notices
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| title | VARCHAR(120) | NOT NULL | | |
|
||
| content | VARCHAR(500) | NOT NULL | | |
|
||
| tag | VARCHAR(32) | YES | | |
|
||
| is_pinned | TINYINT(1) | NOT NULL | 0 | |
|
||
| starts_at | DATETIME | YES | | |
|
||
| ends_at | DATETIME | YES | | |
|
||
| status | ENUM('draft','published','offline') | NOT NULL | published | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(notices):
|
||
- is_pinned: 是否置顶
|
||
- starts_at/ends_at: 生效时间窗
|
||
- status: 草稿/发布/下线
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_notices_time` (`starts_at`,`ends_at`)
|
||
**Foreign Keys**: - 无
|
||
|
||
### inventory_movements
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| product_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| source_type | VARCHAR(32) | NOT NULL | | sale/purchase/sale_return/purchase_return/adjust |
|
||
| source_id | BIGINT UNSIGNED | YES | | 关联单据ID |
|
||
| qty_delta | DECIMAL(18,3) | NOT NULL | | 数量增减(正加负减) |
|
||
| amount_delta | DECIMAL(18,2) | YES | | 金额变动(可空) |
|
||
| reason | VARCHAR(64) | YES | | |
|
||
| tx_time | DATETIME | NOT NULL | | |
|
||
| remark | VARCHAR(255) | YES | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
|
||
字段说明(inventory_movements):
|
||
- qty_delta: 数量变动(入库为正、出库为负)
|
||
- amount_delta: 金额变动(可选)
|
||
- source_type/source_id: 变动来源追溯
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_im_shop_time` (`shop_id`,`tx_time`) - KEY: `idx_im_product` (`product_id`)
|
||
**Foreign Keys**: - `fk_im_shop`: `shop_id` → `shops(id)` - `fk_im_user`: `user_id` → `users(id)` - `fk_im_product`: `product_id` → `products(id)`
|
||
|
||
### 附:演示种子数据(非完整,仅用于联调验证)
|
||
- 演示店铺:演示店A(用户 3,全部店长 owner)
|
||
- 商品域:基础单位3条、类别2条、全局SKU2条、商品2条(含别名/价格/库存/图片)
|
||
- 往来与账户:客户2、供应商2、账户3
|
||
- 单据:销售单1(含明细2)与进货单1(含明细2)、收付款各1、其他收支2
|
||
- 审核与公告:part_submissions 1、attachments 1、notices 2、新增 wechat 身份与会话各1
|
||
|
||
### sales_return_orders
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| customer_id | BIGINT UNSIGNED | YES | | |
|
||
| order_no | VARCHAR(32) | NOT NULL | | |
|
||
| order_time | DATETIME | NOT NULL | | |
|
||
| status | ENUM('approved','void') | NOT NULL | approved | |
|
||
| amount | DECIMAL(18,2) | NOT NULL | 0.00 | |
|
||
| paid_amount | DECIMAL(18,2) | NOT NULL | 0.00 | |
|
||
| remark | VARCHAR(255) | YES | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(sales_return_orders):
|
||
- 与销售单结构一致,用于退货业务;状态为 approved/void
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - UNIQUE: `ux_sr_order_no` (`shop_id`,`order_no`) - KEY: `idx_sr_shop_time` (`shop_id`,`order_time`)
|
||
**Foreign Keys**: - `fk_sr_shop`: `shop_id` → `shops(id)` - `fk_sr_user`: `user_id` → `users(id)` - `fk_sr_customer`: `customer_id` → `customers(id)`
|
||
|
||
### sales_return_order_items
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| order_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| product_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| quantity | DECIMAL(18,3) | NOT NULL | | |
|
||
| unit_price | DECIMAL(18,2) | NOT NULL | | |
|
||
| discount_rate | DECIMAL(5,2) | NOT NULL | 0.00 | |
|
||
| amount | DECIMAL(18,2) | NOT NULL | | |
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_sroi_order` (`order_id`) - KEY: `idx_sroi_product` (`product_id`)
|
||
**Foreign Keys**: - `fk_sroi_order`: `order_id` → `sales_return_orders(id)` ON DELETE CASCADE - `fk_sroi_product`: `product_id` → `products(id)`
|
||
|
||
### purchase_return_orders
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| shop_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| user_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| supplier_id | BIGINT UNSIGNED | YES | | |
|
||
| order_no | VARCHAR(32) | NOT NULL | | |
|
||
| order_time | DATETIME | NOT NULL | | |
|
||
| status | ENUM('approved','void') | NOT NULL | approved | |
|
||
| amount | DECIMAL(18,2) | NOT NULL | 0.00 | |
|
||
| paid_amount | DECIMAL(18,2) | NOT NULL | 0.00 | |
|
||
| remark | VARCHAR(255) | YES | | |
|
||
| created_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| updated_at | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP | |
|
||
| deleted_at | DATETIME | YES | | |
|
||
|
||
字段说明(purchase_return_orders):
|
||
- 与销售单结构一致,用于退货业务;状态为 approved/void
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - UNIQUE: `ux_pr_order_no` (`shop_id`,`order_no`) - KEY: `idx_pr_shop_time` (`shop_id`,`order_time`)
|
||
**Foreign Keys**: - `fk_pr_shop`: `shop_id` → `shops(id)` - `fk_pr_user`: `user_id` → `users(id)` - `fk_pr_supplier`: `supplier_id` → `suppliers(id)`
|
||
|
||
### purchase_return_order_items
|
||
| Column Name | Data Type | Nullable | Default | Comment |
|
||
| ----------- | --------- | -------- | ------- | ------- |
|
||
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | |
|
||
| order_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| product_id | BIGINT UNSIGNED | NOT NULL | | |
|
||
| quantity | DECIMAL(18,3) | NOT NULL | | |
|
||
| unit_price | DECIMAL(18,2) | NOT NULL | | |
|
||
| amount | DECIMAL(18,2) | NOT NULL | | |
|
||
|
||
**Indexes**: - PRIMARY KEY: `id` - KEY: `idx_proi_order` (`order_id`) - KEY: `idx_proi_product` (`product_id`)
|
||
**Foreign Keys**: - `fk_proi_order`: `order_id` → `purchase_return_orders(id)` ON DELETE CASCADE - `fk_proi_product`: `product_id` → `products(id)`
|
||
|