私域电商软件及相关增值服务提供商    

免费试用
HiShop友数连锁 连锁生鲜/便利店/商超行业解决方案

为连锁生鲜/便利店/商超零售企业提供线上线下一体化门店管理方案,助力商家实现数字化的转型

智慧收银 线上云店 进销存管理 会员营销 智慧导购 裂变增长 直营加盟管理 数据同步
申请试用

探讨 | 进销存系统数据库设计逻辑

作者:邓文君 来源:网络 发布时间: 2019-06-25 11:21:52 阅读量:

  最新消息报道,进销存系统数据库设计,对于一个系统来说是不可缺少的一部分,那么如何做好数据库的设计呢?下面我们就来具体来说下。

探讨 | 进销存系统数据库设计逻辑

  理清一下整个进销存系统逻辑:

  1、录入出入库记录时不要实时地更新总表的记录。象YANG_说的,好不要用库存余额这样的字段。可以通过单据审核或过账过程来完成总表的记录更新问题。因为单据审核(或过账)后是不允许改的。按你上面的方法,单据除非是不允许保存后再更改,否则,改一个单据,所有时间在其后的单据的余额数都要进行更新。而且还要锁定,不允许新的单据保存(因为最后的余额还没确定)。更不能进行删除,删除也会影响大量单据的余额字段更新问题。你这样的方式,需要花太大的代价去维护库存余额的正确性。实在不可取。

  2、断货表的内容是怎么来的?余额为零时就生成记录吗?通过查询总表来得出断货的记录就可以了,何必设一个表?

  3、在实际的系统中,我觉得最好不要使用不规范的计量单位,比如:包(不是小包,是那种大的包装)、瓶、件、车等。因为不能用来确定实际数量,比如一包中可能有10瓶,可能有20瓶,很可能会有调整。我以前公司用过的系统就有过这样的问题,一包由6个单位改成5个单位,使用人理所当然地在基础资料里将6改成5,结果所有报表都不对。既然你在数据库里保存的就是瓶,就让用户录入以瓶为单位的(虽然我觉得若是生产型的企业,以瓶也不严格,因为可能有大瓶,小瓶。我们现在公司用的单位大家猜猜,是用升的,MYGOD,真是晕死了。但我觉得只有用L才是准确的,因为用瓶,根本不能确定诸如实际产量之类的数据,实际产量非要用L才准确。)。不过实际情况中也不能要求太高,但是一定要注意避免这样的问题。所以我觉得你这里肯定也最好就用瓶来做单位,不允许用其他单位。因为可能换算关系会变,但操作员的思路不会变的,他上次一包是4瓶,他会录入1包,现在是1包5瓶,他肯定也是录入1包的。结果当然会乱了。

  4、加上月结的处理,按你的思路,需要存分月的出入库总表,在月结时,当月没有业务发生的数据也要在总表中有记录,而不是等到以后月份有出入库了再去补充。这样才能保证总表中的记录的完整的。试想一下,若不是这样,你按总表出本月余额表是不是会很难?(因为本月无记录的,需要找最近月份的记录查出当时的余额,怎么样SQL语句都会难写些,效率也低很多)。我怕你到时候又要来问该怎么写这样的SQL了。

  5、很奇怪,为什么在细表中看不到单据编号,且时间只精确到日,你怎么确定单据的先后?确定不了先后怎么确定得了每张单据上的库存数?

  6、建议找点写得好的进销存系统的数据库来研究研究。不要被这样糟糕的设计耽误了。

  7、不会数据库、不会SQL不是最要紧的,设计数据库只是个技术活,对业务的理解,系统的分析与设计才是最根本的。

  下面举个进销存系统数据库设计例子:

  CREATE TABLE user(

  User_Id varchar(6),

  User_Pwd varchar(8) NULL,

  Again_Pwd varchar(8) NULL,

  Bel_Group varchar(3) NULL,

  Div_Type varchar(1) NULL,

  User_Auth varchar(1) NULL,

  Auth_Type varchar(1) NULL,

  User_Status varchar(1) NULL,

  Create_User varchar(6) NULL,

  Create_Date varchar(7) NULL,

  Create_Time varchar(6) NULL,

  Appr_User varchar(6) NULL,

  Appr_Date varchar(7) NULL,

  Appr_Time varchar(6) NULL,

  Pwd_Date varchar(7) NULL,

  Err_Count float NULL,

  Use_eJCIC varchar(1) NULL

  )

  CREATE TABLE Supplier /*供应商表*/

  (

  Supplier_ID int IDENTITY(1,1) NOT NULL, /* 供应商编号 ,主键 */

  Name varchar(250) NOT NULL, /* 供应商名称 */

  Address varchar(250) NOT NULL, /* 地址 */

  Phone varchar(25) NULL, /* 电话 */

  Fax varchar(25) NULL, /* 传真 */

  PostalCode varchar(10) NULL, /* 邮编 */

  ConstactPerson varchar(20) NULL /* 联系人 */

  )

  CREATE TABLE Customer /* 客户表*/

  (

  Customer_ID int IDENTITY(1,1) NOT NULL, /* 客户编号,主键*/

  Name varchar(250) NOT NULL, /* 客户名称 */

  Address varchar(250) NOT NULL, /* 地址 */

  Phone varchar(25) NULL, /* 电话 */

  Fax varchar(25) NULL, /* 传真 */

  PostalCode varchar(10) NULL, /* 邮编 */

  ConstactPerson varchar(20) NULL /* 联系人 */

  )

  CREATE TABLE Dept /* 部门表 */

  (

  Dept_ID int IDENTITY(1,1) NOT NULL, /* 部门编号,主键 */

  Name varchar(30) NOT NULL, /* 名称 */

  Remark varchar(250) NOT NULL/* 描述,备注 */

  )

  CREATE TABLE Dept_Supplier /* 部门--供应商表*/

  (

  Dept_ID int NOT NULL, /* 部门编号,主键 , 外键( 参照 DEPT 表 )*/

  Supplier_ID int NOT NULL /* 供应商编号 ,主键,外键( 参照 SUPPLIER 表) */

  )

  CREATE TABLE Dept_Customer /* 部门--客户表*/

  (

  Dept_ID int NOT NULL, /* 部门编号,主键 , 外键( 参照 DEPT 表 )*/

  Customer_ID int NOT NULL /* 客户编号,主键, 外键( 参照 SUPPLIER 表) */

  )

  CREATE TABLE StoreHouse /* 仓库表 */

  (

  StoreHouse_ID int IDENTITY(1,1) NOT NULL, /* 仓库编号,主键 */

  Address varchar(250) NOT NULL, /* 地址 */

  Phone varchar(25) NULL, /* 电话 */

  Employee_ID INT NOT NULL, /* 仓库保管 ,外键 ( 参照 EMPLOYEE 表 ) */

  CreateDate datetime NULL /* 仓库成立时间 */

  )

  CREATE TABLE ProductClass /* 商品总分类表 */

  (

  ProductClass_ID int IDENTITY(1,1) NOT NULL, /* 商品总分类编号, 主键 */

  Name varchar(30) NOT NULL, /* 商品分类名称 */

  Employee_ID INT NOT NULL, /* 建分类人 ,外键 ( 参照 EMPLOYEE 表 )*/

  CreateDate datetime NULL, /* 建分类时间 */

  Remark varchar(250) NULL, /* 描述,备注 */

  )

  CREATE TABLE ProductList /* 商品细分类表 */

  (

  ProductClass_ID INT NOT NULL, /* 商品总分类编号, 外键 ( 参照PRODUCTCLASS 表 ) */

  ProductList_ID int IDENTITY(1,1) NOT NULL, /* 商品细分类编号,主键 */

  Name varchar(30) NOT NULL, /* 商品名称 */

  Employee_ID INT NOT NULL, /* 建分类人,外键 ( 参照 EMPLOYEE 表 )*/

  CreateDate datetime NULL, /* 建分类时间 */

  Remark varchar(250) NULL, /* 描述 ,备注 */

  )

  CREATE TABLE ProductSpec /* 商品规格表 */

  (

  ProductSpec_ID INT IDENTITY(1,1) NOT NULL, /* 商品规格编号,主键 */

  Name varchar(30) NOT NULL, /* 商品规格名称 */

  Employee_ID INT NOT NULL, /* 操作员 ,外键 ( 参照 EMPLOYEE 表 )*/

  CreateDate datetime NULL, /* 创建时间 */

  Remark varchar(250) NULL /* 描述,备注 */

  )

  CREATE TABLE ProductUnit /* 商品计量单位表 */

  (

  ProductUnit_ID INT IDENTITY(1,1) NOT NULL, /* 计量单位编号 ,主键 */

  Name varchar(30) NOT NULL, /* 计量单位名称 */

  Employee_ID INT NOT NULL, /* 操作员 ,外键 ( 参照 EMPLOYEE 表 )*/

  CreateDate datetime NULL, /* 创建时间 */

  Remark varchar(250) NULL /* 描述,备注 */

  )

  CREATE TABLE Product /* 商品目录表 */

  (

  ProductList_ID int NOT NULL, /* 商品细分类编号, 外键 ( 参照 PRODUCTLIST 表 ) */

  Product_ID INT IDENTITY(1,1) NOT NULL, /* 商品名称编号, 主键 */

  Name varchar(30) NOT NULL, /* 商品名称 */

  ProductSpec_ID INT NOT NULL, /* 商品规格, 外键 ( 参照 PRODUCTSPEC 表 ) */

  ProductUnit_ID INT NOT NULL, /* 计量单位, 外键 ( 参照 PRODUCTUNIT 表 ) */

  Price MONEY NULL, /* 参考价格 */

  Employee_ID INT NOT NULL, /* 操作员, 外键 ( 参照 EMPLOYEE 表 )*/

  CreateDate datetime NULL, /* 创建时间 */

  Remark varchar(250) NULL /* 描述,备注 */

  )

  CREATE TABLE Product_Supplier /* 商品--供应商表 */

  (

  Product_ID INT NOT NULL, /* 商品名称编号,主键 , 外键( 参照 PRODUCT 表 )*/

  Supplier_ID INT NOT NULL /* 供应商编号 , 主键, 外键( 参照 SUPPLIER 表) */

  )

  CREATE TABLE Employee /* 员工表 */

  (

  Employee_ID INT IDENTITY(1,1) NOT NULL, /* 员工编号 */

  Dept_ID INT NOT NULL, /* 所属部门编号 */

  Name varchar(30) NOT NULL, /* 姓名 */

  Duty varchar(20) NOT NULL, /* 职务 */

  Gender varchar(6) NOT NULL, /* 性别 */

  BirthDate datetime NOT NULL, /* 出生日期 */

  HireDate datetime NULL, /* 合同签订 日期 */

  MatureDate datetime NULL, /* 合同到期日 */

  IdentityCard varchar(20) NULL, /* 身份证号 */

  Address varchar(250) NULL, /* 住址 */

  Phone varchar(25) NULL, /* 电话 */

  Email varchar(30) NULL /* E_MAIL */

  )

  /*-///////////////////////////////////////////////////////////////////////////////////////-*/

  CREATE TABLE BuyOrder /* 进货合同 */

  (

  BuyOrder_ID INT IDENTITY(1,1) NOT NULL, /* 进货合同编号 , 主键 */

  WriteDate datetime NOT NULL, /* 合同签订日期 */

  InsureDate datetime NOT NULL, /* 合同生效日期 */

  EndDate datetime NOT NULL, /* 合同到期日期 */

  Dept_ID INT NOT NULL, /* 签订部门, 外键 ( 参照 DEPT 表 ) */

  Supplier_ID INT NOT NULL, /* 供应商, 外键 ( 参照 SUPPLIER 表 ) */

  Employee_ID INT NOT NULL /* 合同主要负责人, 外键 ( 参照 EMPLOYEE 表) */

  )

  CREATE TABLE BuyOrder_Detail /* 进货合同明细表 */

  (

  BuyOrder_ID INT NOT NULL, /* 进货合同编号,主键, 外键 ( 参照 BUYORDER 表 ) */

  Product_ID INT NOT NULL, /* 所进商品编号,主键, 外键 (参照 PRODUCT 表 ) */

  Quantity INT NOT NULL, /* 商品数量 */

  Price money NOT NULL /* 商品进价 */

  )

  CREATE TABLE EnterStock /* 入库单表 */

  (

  EnterStock_ID INT IDENTITY(1,1) NOT NULL, /* 入库单编号 , 主键 */

  EnterDate datetime NOT NULL, /* 入库时间 */

  Dept_ID INT NOT NULL, /* 入库部门 ,外键 ( 参照 DEPT 表 )*/

  StoreHouse_ID INT NOT NULL, /* 所入仓库 ,外键 ( 参照 STOREHOUSE 表)*/

  Employee_ID INT NOT NULL /* 入库人 , 外键 ( 参照 EMPLOYEE 表)*/

  /*需添加 仓库保管员如何来验证入库单 ?? */

  )

  CREATE TABLE EnterStock_Detail /* 入库单明细 */

  (

  EnterStock_ID INT NOT NULL, /* 入库单编号 , 主键, 外键 (参照 ENTERSTOCK 表 )*/

  Product_ID INT NOT NULL, /* 此种商品编号,主键, 外键 (参照 PRODUCT 表 ) */

  Quantity int NOT NULL, /* 此种商品数量 */

  Price money NULL, /* 此种商品参考价格 */

  HaveInvoice bit not null, /* 此种商品有没有开发票 ( 缺省为 0 , 有没有开票 )*/

  InvoiceNum varchar(30) NULL /* 发票号 */

  )

  CREATE TABLE BackStock /* 退库单表 */

  (

  BackStock_ID INT IDENTITY(1,1) NOT NULL, /* 退库单编号 , 主键 */

  BackDate datetime NOT NULL, /* 退库时间 */

  Dept_ID INT NOT NULL, /* 退库部门 , 外键 ( 参照 DEPT 表 )*/

  StoreHouse_ID INT NOT NULL, /* 所退入仓库 ,外键 ( 参照 STOREHOUSE 表)*/

  Employee_ID INT NOT NULL, /* 退库人 , 外键 ( 参照 EMPLOYEE 表)*/

  Remark varchar(250) NULL /* 退库原因 */

  )

  CREATE TABLE BackStock_Detail /* 退库单明细表 */

  (

  BackStock_ID INT NOT NULL, /* 退库单编号 , 主键, 外键 (参照 BACKSTOCK 表 )*/

  Product_ID INT NOT NULL, /* 所退商品编号,主键, 外键 (参照 PRODUCT 表 ) */

  Quantity int NOT NULL, /* 退入数量 */

  Price money NULL /* 参考价格 */

  )

  CREATE TABLE LeaveStock /* 出库单表 */

  (

  LeaveStock_ID INT IDENTITY(1,1) NOT NULL, /* 出库单编号 , 主键, 外键 (参照 LEAVESTOCK 表 )*/

  LeaveDate datetime NOT NULL, /* 出库时间 */

  Dept_ID INT NOT NULL, /* 出库部门 , 外键 ( 参照 DEPT 表 )*/

  StoreHouse_ID INT NOT NULL, /* 所出仓库 ,外键 ( 参照 STOREHOUSE 表)*/

  ToStoreHouse_ID INT NOT NULL, /* 所入仓库 ,外键 ( 参照 STOREHOUSE 表)*/

  Employee_ID INT NOT NULL /* 出库人 , 外键 ( 参照 EMPLOYEE 表)*/

  /* 仓库保管员如何来验证出库单 ?? */

  )

  CREATE TABLE LeaveStock_Detail /* 出库单明细表 */

  (

  LeaveStock_ID INT NOT NULL, /* 出库单编号 , 主键, 外键 (参照 BACKSTOCK 表 )*/

  Product_ID INT NOT NULL, /* 所出商品编号,主键, 外键 (参照 PRODUCT 表 ) */

  Quantity int NOT NULL, /* 出库数量 */

  Price money NULL /* 出库价格 */

  )

  CREATE TABLE BackSale /* 退货单表 */

  (

  BackSale_ID INT IDENTITY(1,1) NOT NULL, /* 退货单编号 , 主键 */

  BackDate datetime NOT NULL, /* 退货日期 */

  Dept_ID INT NOT NULL, /* 退货部门 , 外键 ( 参照 DEPT 表 )*/

  StoreHouse_ID INT NOT NULL, /* 退入仓库 , 外键 ( 参照 STOREHOUSE 表)*/

  Employee_ID INT NOT NULL, /* 退货人 , 外键 ( 参照 EMPLOYEE 表)*/

  Remark varchar(250) NULL /* 退货原因 */

  )

  CREATE TABLE BackSale_Detail /* 退货单明细表 */

  (

  BackSale_ID INT NOT NULL, /* 退货单编号 , 主键, 外键 (参照 BACKSTOCK 表 )*/

  Product_ID INT NOT NULL, /* 所退商品编号,主键, 外键 (参照 PRODUCT 表 ) */

  Quantity int NOT NULL, /* 退货数量 */

  Price money NULL /* 价格 */

  )

  CREATE TABLE SaleOrder /* 销售合同 */

  (

  SaleOrder_ID INT IDENTITY(1,1) NOT NULL, /* 合同编号 , 主键 */

  WriteDate datetime NOT NULL, /* 合同签订日期 */

  InsureDate datetime NOT NULL, /* 合同生效日期 */

  EndDate datetime NOT NULL, /* 合同到期日期 */

  Dept_ID INT NOT NULL, /* 签订部门, 外键 ( 参照 DEPT 表 ) */

  Customer_ID INT NOT NULL, /* 客户编号, 外键 ( 参照 CUSTOMER 表 ) */

  Employee_ID INT NOT NULL /* 合同主要负责人, 外键 ( 参照 EMPLOYEE 表) */

  )

  CREATE TABLE SaleOrder_Detail /* 销售合同明细表 */

  (

  SaleOrder_ID INT NOT NULL, /* 销售合同编号,主键, 外键 ( 参照 BUYORDER 表 ) */

  Product_ID INT NOT NULL, /* 销售商品编号,主键, 外键 (参照 PRODUCT 表 ) */

  Quantity int not null, /* 商品数量 */

  Price money null /* 商品进价 */

  )

  CREATE TABLE Buy /* 进货表 ( 验货表 ) */

  (

  Buy_ID INT IDENTITY(1,1) NOT NULL, /* 进货编号 , 主键 */

  ComeDate datetime NOT NULL, /* 进货日期 */

  Dept_ID INT NOT NULL, /* 进货部门, 外键 ( 参照 DEPT 表 ) */

  Employee_ID INT NOT NULL /* 验货人, 外键 ( 参照 EMPLOYEE 表)*/

  )

  CREATE TABLE Buy_Detail /* 进货表明细 ( 验货表 ) */

  (

  Buy_ID INT NOT NULL, /* 进货编号,主键, 外键 ( 参照 BUY 表 ) */

  Product_ID INT NOT NULL, /* 商品编号,主键, 外键 ( 参照 PRODUCT 表 ) */

  BuyOrder_ID INT NULL, /* 采购合同, 外键 ( 参照 BUYORDER 表 ) */

  Quantity int not null, /* 数量 */

  Price money null /* 价格 */

  /* BUYORDER_ID 为 NULL 时, 为现金进货 */

  )

  CREATE TABLE Sale /* 销售 表 */

  (

  Sale_ID INT IDENTITY(1,1) NOT NULL, /* 销售 编号 */

  SaleDate datetime not null, /* 销售 日期 */

  Dept_ID INT NOT NULL, /* 销售部门, 外键 ( 参照 DEPT 表 ) */

  Employee_ID INT NOT NULL /* 售货人, 外键 ( 参照 EMPLOYEE 表)*/

  )

  CREATE TABLE Sale_Detail /* 销售明细 ( 验货表 ) */

  (

  Sale_ID INT NOT NULL, /* 销售编号,主键, 外键 ( 参照 SALE 表 ) */

  Product_ID INT NOT NULL, /* 商品编号,主键, 外键 ( 参照 PRODUCT 表 ) */

  SaleOrder_ID INT NULL, /* 销售合同, 外键 ( 参照 SALEORDER 表 ) */

  Quantity int not null, /* 数量 */

  Price money not null, /* 价格 */

  Discount int null /* 折扣 */

  /* SALEORDER_ID 为 NULL 时, 为现金销售 */

  )

  CREATE TABLE StockPile /* 库存表 */

  (

  StockPile_ID INT IDENTITY(1,1) NOT NULL, /* 库存编号 , 主键 */

  Dept_ID INT NOT NULL, /* 商品所属部门, 外键 ( 参照 DEPT 表 ) */

  StoreHouse_ID INT NOT NULL, /* 所在仓库, 外键 ( 参照 SOTREHOUSE 表 ) */

  Product_ID INT NOT NULL, /* 商品编号, 外键 ( 参照 PRODUCT 表 ) */

  FirstEnterDate datetime not null, /* 此种商品第一次入库时间 */

  LastLeaveDate datetime null, /* 此种商品最后一次出库时间 */

  Quantity int not null, /* 所存数量 */

  Price money not null /* 加权价 */

  /* LASTLEAVEDATE 为NULL 时,此种商品从来没有 卖过 */

  )

  进销存系统数据库设计,HiShop友数进销存管理系统,为了对企业生产经营中进货、出货、批发销售、付款等进行全程进行跟踪,管理,而设计的整套方案。

        相关阅读:有哪些比较好用的免费进销存管理软件?

更多连锁门店行业案例
  • 老板电器

    家电行业

  • 国洋酒业

    酒水行业

  • 中海名酒

    酒水行业

  • 义乌小商品城

    商超行业

  • 奥龙世博

    商超行业

  • 北京天坛

    装修行业

满足连锁门店多种业务场景
  • 连锁线下收银

    专注经营线下门店

    免费体验 >
    门店管理
    进销存管理
    收银系统
    会员管理
    赋能提效
    收银硬件
  • 连锁线上线下

    线上线下数据同步经营

    免费体验 >
    门店管理
    进销存管理
    收银开单
    云店小程序
    智慧导购
    数据同步
  • 连锁线上云店

    多门店线上云店拓客

    免费体验 >
    门店管理
    云店小程序
    分销裂变
    会员管理
    导购赋能
    数字营销
  • 连锁美业预约

    分时预约,提升门店服务

    免费体验 >
    预约到店
    在线预约
    排班管理
    引流拓客
    卡项营销
    开单挂单

【本站声明】

1、本网站发布的该篇文章,目的在于分享电商知识及传递、交流相关电商信息,以便您学习或了解电商知识,请您不要用于其他用途;

2、该篇文章中所涉及的商标、标识的商品/服务并非来源于本网站,更非本网站提供,与本网站无关,系他人的商品或服务,本网站对于该类商标、
     标识不拥有任何权利;

3、本网站不对该篇文章中所涉及的商标、标识的商品/服务作任何明示或暗示的保证或担保;

4、本网站不对文章中所涉及的内容真实性、准确性、可靠性负责,仅系客观性描述,如您需要了解该类商品/服务详细的资讯,请您直接与该类商
     品/服务的提供者联系。

热门产品

智慧新零售门店管理系统

连接人、货、场,构建新零售闭环

去看看
连锁收银管理系统

一站式门店收银,解决管理难题

去看看
热门场景
收银系统
门店管理
库存管理
分销裂变
收银开单
门店小程序
新零售
加盟管理
会员储值
裂变拓客
门店私域
代客下单
卡项营销
美业店务
会员促活
分时预约
收银硬件
线上线下
商品通
会员通
订单通
营销通
门店会员管理系统

搞定全生命周期会员精准营销

去看看

更多连锁业态

连锁便利店生鲜超市 连锁零食店 连锁家电店 生活商超连锁酒水店 连锁医药店零售专卖店

电话咨询 微信咨询 - 预约演示