商城类电商软件及服务提供商--HiShop海商,欢迎您!

注册有礼

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友数进销存管理系统,为了对企业生产经营中进货、出货、批发销售、付款等进行全程进行跟踪,管理,而设计的整套方案。

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

HiShop友数专注零售数字化服务 专业为连锁店提供新零售解决方案,助力连锁企业门店网店一体化经营

立即联系我们

将有专人为你做模式讲解、功能演示、专业答疑等

最新文章
热门文章
新零售关键词
亮点推荐 更多>
  • 门店数字化经营
    统筹管理
    数据同步
    赋能提效
  • 智慧导购赋能
    代客下单
    导购种草
    收银开单
  • 门店营销数字化
    拼团砍价
    分销裂变
    会员储值
  • 私域增长布局
    社群运营
    SOP管理
    会员分层
客户案例 更多>
  • 广州酒家线上线下全网全渠道数据同步
  • 美心西饼通过“新零售”重构“人货场”
  • 老板电器B2C+O2O的智能家居平台
  • 爱欢洗以服务驱动洗护业务增值

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