进销存系统入门:数据库基础与表结构初步设计

进销存系统入门:数据库基础与表结构初步设计

这一篇不是教你“什么是数据库 101”,
而是 站在“我马上要写 C# 程序”的角度,思考数据库该怎么设计


一、为什么在写 C# 之前,必须先把数据库想清楚?

如果你有 Java + JDBC 经验,一定踩过这些坑:

  • 表结构随便建,后面发现字段不够
  • 表之间关系不清,SQL 越写越复杂
  • 程序逻辑写了一半,发现数据根本存不下

数据库不是“存数据的地方”
数据库是整个系统的“地基”

进销存系统的本质其实只有一句话:

谁的什么商品,在什么地方,有多少。


二、进销存系统最小数据模型(MVP)

我们先不做“企业级 ERP”,只做一个能跑起来的系统

最核心的 3 类数据

数据类型 说明
商品 我卖/管的是什么
库存 商品现在还剩多少
出入库记录 库存为什么变化

本篇先做 前两张表
出入库记录留给下一篇


三、商品表(Product)设计

商品表需要存什么?

从业务角度拆:

  • 商品唯一标识
  • 商品名称
  • 商品价格
  • 商品单位
  • 商品状态

商品表 SQL 设计

CREATE TABLE product (
    id INT PRIMARY KEY IDENTITY(1,1),
    product_code VARCHAR(50) NOT NULL UNIQUE,
    product_name VARCHAR(100) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    unit VARCHAR(20),
    status INT DEFAULT 1,
    create_time DATETIME DEFAULT GETDATE()
);

字段解释(非常重要)

字段 说明
id 主键,程序内部使用
product_code 商品编码,业务唯一
product_name 商品名称
price 单价
unit 单位(件 / 箱 / 个)
status 1=正常,0=下架
create_time 创建时间

⚠️ 不要把商品名当主键
⚠️ 业务字段和技术主键要分开


四、库存表(Stock)设计

库存表解决什么问题?

库存不是商品本身,而是:

某个商品,在某个地方,还剩多少

库存表 SQL

CREATE TABLE stock (
    id INT PRIMARY KEY IDENTITY(1,1),
    product_id INT NOT NULL,
    quantity INT NOT NULL DEFAULT 0,
    update_time DATETIME DEFAULT GETDATE()
);

表关系说明

  • stock.product_idproduct.id
  • 一个商品 → 一条库存记录(先简化)

如果你想更专业,可以加外键:

ALTER TABLE stock
ADD CONSTRAINT fk_stock_product
FOREIGN KEY (product_id) REFERENCES product(id);

五、为什么不直接把库存字段放在商品表?

很多新手会这么写:

quantity INT

这是一个设计陷阱

原因:

  • 商品是“静态信息”
  • 库存是“动态状态”
  • 后期一定会有:
    • 多仓库
    • 冻结库存
    • 批次库存

商品 ≠ 库存


六、站在程序员角度理解“数据存哪里”

你未来在 C# 里做的事情其实只有三类:

  • 查商品
  • 改库存
  • 记录变化原因

数据库提前拆清楚:

行为
查商品列表 product
显示库存 stock
入库 / 出库 出入库表(下一篇)
posted @ 2025-10-27 21:19  元始天尊123  阅读(1)  评论(0)    收藏  举报