上一篇
供应商数据库表
- 行业动态
- 2025-04-29
- 3418
供应商数据库表存储供应商基础信息,含ID(主键)、名称、联系人、电话、地址等
供应商数据库表设计详解
在企业资源规划(ERP)系统或供应链管理系统中,供应商数据库表是核心数据结构之一,用于存储和管理供应商的基本信息、业务往来记录及信用评估数据,以下从字段设计、表结构优化、数据关联性等方面展开详细说明。
基础信息表
基础信息表用于存储供应商的静态属性,如企业名称、联系方式等,以下是典型字段设计:
字段名 | 数据类型 | 说明 |
---|---|---|
supplier_id | INT (主键) | 唯一标识符,自增序列 |
name | VARCHAR(255) | 供应商全称(如“XX科技有限公司”) |
alias | VARCHAR(100) | 供应商简称(如“XX科技”) |
legal_person | VARCHAR(100) | 法人代表姓名 |
contact_name | VARCHAR(100) | 主要联系人姓名 |
contact_phone | VARCHAR(20) | 联系电话(含区号,如010-12345678 ) |
contact_email | VARCHAR(100) | 联系邮箱 |
address | VARCHAR(255) | 注册地址(可结合province 和city 字段拆分) |
province | VARCHAR(50) | 所在省份(如“广东省”) |
city | VARCHAR(50) | 所在城市(如“深圳市”) |
zip_code | VARCHAR(10) | 邮政编码 |
registration_date | DATE | 企业注册日期(格式:YYYY-MM-DD) |
business_scope | TEXT | 经营范围描述 |
status | ENUM | 合作状态(如active 、inactive 、blacklisted ) |
created_at | TIMESTAMP | 数据创建时间(自动生成) |
updated_at | TIMESTAMP | 数据更新时间(自动生成) |
设计要点:
- 主键与唯一性:
supplier_id
为主键,确保唯一性;name
和alias
可添加联合唯一索引,避免重复录入。 - 地址拆分:将地址拆分为
province
、city
等字段,便于按地域筛选供应商。 - 状态管理:通过
status
字段标记供应商状态,支持快速过滤(如仅显示合作中供应商)。
业务信息表
业务信息表用于记录供应商的动态业务数据,如合作历史、交易记录等,以下是典型字段设计:
字段名 | 数据类型 | 说明 |
---|---|---|
business_id | INT (主键) | 业务记录唯一标识符,自增序列 |
supplier_id | INT (外键) | 关联基础信息表的supplier_id ,确保数据一致性 |
product_category | VARCHAR(100) | 供应产品类别(如“电子元器件”、“机械设备”) |
annual_purchase | DECIMAL(15,2) | 年度采购金额(单位:元) |
last_order_date | DATE | 最近一次下单日期(格式:YYYY-MM-DD) |
payment_term | VARCHAR(50) | 付款条件(如“月结30天”) |
credit_rating | ENUM | 信用等级(如A 、B 、C ) |
comments | TEXT | 备注信息(如合作评价、特殊要求) |
设计要点:
- 外键关联:通过
supplier_id
与基础信息表关联,避免数据冗余。 - 数值精度:
annual_purchase
使用DECIMAL(15,2)
,支持大额采购金额记录。 - 时间字段:
last_order_date
用于分析供应商活跃度。
扩展信息表
扩展信息表用于存储非核心但可能有用的辅助数据,例如银行账户、资质文件等,以下是典型字段设计:
字段名 | 数据类型 | 说明 |
---|---|---|
extension_id | INT (主键) | 扩展记录唯一标识符,自增序列 |
supplier_id | INT (外键) | 关联基础信息表的supplier_id |
bank_name | VARCHAR(100) | 开户银行名称 |
bank_account | VARCHAR(50) | 银行账号 |
tax_number | VARCHAR(50) | 税务登记号 |
certificate_type | VARCHAR(100) | 资质证书类型(如“ISO9001”) |
certificate_expire | DATE | 资质有效期(格式:YYYY-MM-DD) |
attachment_url | VARCHAR(255) | 资质文件存储路径(如“/files/cert/2023/XX.pdf”) |
设计要点:
- 多对一关系:一个供应商可能有多个银行账户或资质文件,需通过
supplier_id
关联。 - 文件存储:
attachment_url
字段存储文件路径,实际文件可存放在OSS或本地服务器。
表结构优化建议
索引优化:
- 在基础信息表的
name
、contact_phone
字段上创建单列索引,加速模糊查询。 - 在业务信息表的
supplier_id
字段上创建外键索引,确保关联查询效率。
- 在基础信息表的
数据完整性:
- 使用外键约束(
FOREIGN KEY
)确保业务表和扩展表的数据必须存在于基础表中。 - 对
email
和phone
字段添加格式校验(如正则表达式),避免无效数据。
- 使用外键约束(
分区表设计:
- 若数据量极大(如百万级供应商),可按
province
或status
字段进行水平分区,提升查询性能。
- 若数据量极大(如百万级供应商),可按
示例SQL语句
-创建基础信息表 CREATE TABLE supplier_basic ( supplier_id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, alias VARCHAR(100), legal_person VARCHAR(100), contact_name VARCHAR(100), contact_phone VARCHAR(20), contact_email VARCHAR(100), address VARCHAR(255), province VARCHAR(50), city VARCHAR(50), zip_code VARCHAR(10), registration_date DATE, business_scope TEXT, status ENUM('active', 'inactive', 'blacklisted') DEFAULT 'active', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -创建业务信息表 CREATE TABLE supplier_business ( business_id INT PRIMARY KEY AUTO_INCREMENT, supplier_id INT, product_category VARCHAR(100), annual_purchase DECIMAL(15,2), last_order_date DATE, payment_term VARCHAR(50), credit_rating ENUM('A', 'B', 'C'), comments TEXT, FOREIGN KEY (supplier_id) REFERENCES supplier_basic(supplier_id) );
FAQs
问题1:如何选择供应商表中的“联系邮箱”字段数据类型?
解答:contact_email
字段建议使用VARCHAR(100)
,原因如下:
- 长度限制:常规邮箱地址长度不超过100字符,可覆盖大多数场景。
- 兼容性:避免使用
TEXT
类型,因其可能影响查询性能。 - 格式校验:可在应用层添加正则表达式校验(如
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$
),确保数据有效性。
问题2:如何处理供应商多地址场景?
解答:
若供应商存在多个联系地址(如注册地址、收货地址),可采用以下两种方案:
独立地址表:
创建supplier_address
表,字段包括address_id
(主键)、supplier_id
(外键)、address_type
(如“注册地址”、“收货地址”)、detail
(详细地址),通过supplier_id
关联基础表,支持一对多关系。JSON字段存储:
在基础表中新增addresses
字段(类型为JSON
),存储多地址数组,[ {"type": "register", "detail": "北京市朝阳区XX路XX号"}, {"type": "delivery", "detail": "上海市浦东新区XX工业园"} ]
适用于读多写少的场景,但需数据库支持JSON操作(如MySQL 5.7+)。