最新消息报道,进销存系统数据库设计,对于一个系统来说是不可缺少的一部分,那么如何做好数据库的设计呢?下面我们就来具体来说下。
理清一下整个进销存系统逻辑:
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友数进销存管理系统,为了对企业生产经营中进货、出货、批发销售、付款等进行全程进行跟踪,管理,而设计的整套方案。
相关阅读:有哪些比较好用的免费进销存管理软件?
到此这篇动态库存表自动进销存什么意思(动态库存表自动进销存什么意思呀)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/11418.html