商城類電商軟件及服務(wù)提供商--HiShop海商,歡迎您!
最新消息報道,進(jìn)銷存系統(tǒng)數(shù)據(jù)庫設(shè)計,對于一個系統(tǒng)來說是不可缺少的一部分,那么如何做好數(shù)據(jù)庫的設(shè)計呢?下面我們就來具體來說下。
理清一下整個進(jìn)銷存系統(tǒng)邏輯:
1、錄入出入庫記錄時不要實時地更新總表的記錄。象YANG_說的,好不要用庫存余額這樣的字段??梢酝ㄟ^單據(jù)審核或過賬過程來完成總表的記錄更新問題。因為單據(jù)審核(或過賬)后是不允許改的。按你上面的方法,單據(jù)除非是不允許保存后再更改,否則,改一個單據(jù),所有時間在其后的單據(jù)的余額數(shù)都要進(jìn)行更新。而且還要鎖定,不允許新的單據(jù)保存(因為最后的余額還沒確定)。更不能進(jìn)行刪除,刪除也會影響大量單據(jù)的余額字段更新問題。你這樣的方式,需要花太大的代價去維護(hù)庫存余額的正確性。實在不可取。
2、斷貨表的內(nèi)容是怎么來的?余額為零時就生成記錄嗎?通過查詢總表來得出斷貨的記錄就可以了,何必設(shè)一個表?
3、在實際的系統(tǒng)中,我覺得最好不要使用不規(guī)范的計量單位,比如:包(不是小包,是那種大的包裝)、瓶、件、車等。因為不能用來確定實際數(shù)量,比如一包中可能有10瓶,可能有20瓶,很可能會有調(diào)整。我以前公司用過的系統(tǒng)就有過這樣的問題,一包由6個單位改成5個單位,使用人理所當(dāng)然地在基礎(chǔ)資料里將6改成5,結(jié)果所有報表都不對。既然你在數(shù)據(jù)庫里保存的就是瓶,就讓用戶錄入以瓶為單位的(雖然我覺得若是生產(chǎn)型的企業(yè),以瓶也不嚴(yán)格,因為可能有大瓶,小瓶。我們現(xiàn)在公司用的單位大家猜猜,是用升的,MYGOD,真是暈死了。但我覺得只有用L才是準(zhǔn)確的,因為用瓶,根本不能確定諸如實際產(chǎn)量之類的數(shù)據(jù),實際產(chǎn)量非要用L才準(zhǔn)確。)。不過實際情況中也不能要求太高,但是一定要注意避免這樣的問題。所以我覺得你這里肯定也最好就用瓶來做單位,不允許用其他單位。因為可能換算關(guān)系會變,但操作員的思路不會變的,他上次一包是4瓶,他會錄入1包,現(xiàn)在是1包5瓶,他肯定也是錄入1包的。結(jié)果當(dāng)然會亂了。
4、加上月結(jié)的處理,按你的思路,需要存分月的出入庫總表,在月結(jié)時,當(dāng)月沒有業(yè)務(wù)發(fā)生的數(shù)據(jù)也要在總表中有記錄,而不是等到以后月份有出入庫了再去補(bǔ)充。這樣才能保證總表中的記錄的完整的。試想一下,若不是這樣,你按總表出本月余額表是不是會很難?(因為本月無記錄的,需要找最近月份的記錄查出當(dāng)時的余額,怎么樣SQL語句都會難寫些,效率也低很多)。我怕你到時候又要來問該怎么寫這樣的SQL了。
5、很奇怪,為什么在細(xì)表中看不到單據(jù)編號,且時間只精確到日,你怎么確定單據(jù)的先后?確定不了先后怎么確定得了每張單據(jù)上的庫存數(shù)?
6、建議找點寫得好的進(jìn)銷存系統(tǒng)的數(shù)據(jù)庫來研究研究。不要被這樣糟糕的設(shè)計耽誤了。
7、不會數(shù)據(jù)庫、不會SQL不是最要緊的,設(shè)計數(shù)據(jù)庫只是個技術(shù)活,對業(yè)務(wù)的理解,系統(tǒng)的分析與設(shè)計才是最根本的。
下面舉個進(jìn)銷存系統(tǒng)數(shù)據(jù)庫設(shè)計例子:
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 /*供應(yīng)商表*/
(
Supplier_ID int IDENTITY(1,1) NOT NULL, /* 供應(yīng)商編號 ,主鍵 */
Name varchar(250) NOT NULL, /* 供應(yīng)商名稱 */
Address varchar(250) NOT NULL, /* 地址 */
Phone varchar(25) NULL, /* 電話 */
Fax varchar(25) NULL, /* 傳真 */
PostalCode varchar(10) NULL, /* 郵編 */
ConstactPerson varchar(20) NULL /* 聯(lián)系人 */
)
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 /* 聯(lián)系人 */
)
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 /* 部門--供應(yīng)商表*/
(
Dept_ID int NOT NULL, /* 部門編號,主鍵 , 外鍵( 參照 DEPT 表 )*/
Supplier_ID int NOT NULL /* 供應(yīng)商編號 ,主鍵,外鍵( 參照 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 /* 商品細(xì)分類表 */
(
ProductClass_ID INT NOT NULL, /* 商品總分類編號, 外鍵 ( 參照PRODUCTCLASS 表 ) */
ProductList_ID int IDENTITY(1,1) NOT NULL, /* 商品細(xì)分類編號,主鍵 */
Name varchar(30) NOT NULL, /* 商品名稱 */
Employee_ID INT NOT NULL, /* 建分類人,外鍵 ( 參照 EMPLOYEE 表 )*/
CreateDate datetime NULL, /* 建分類時間 */
Remark varchar(250) NULL, /* 描述 ,備注 */
)
CREATE TABLE ProductSpec /* 商品規(guī)格表 */
(
ProductSpec_ID INT IDENTITY(1,1) NOT NULL, /* 商品規(guī)格編號,主鍵 */
Name varchar(30) NOT NULL, /* 商品規(guī)格名稱 */
Employee_ID INT NOT NULL, /* 操作員 ,外鍵 ( 參照 EMPLOYEE 表 )*/
CreateDate datetime NULL, /* 創(chuàng)建時間 */
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, /* 創(chuàng)建時間 */
Remark varchar(250) NULL /* 描述,備注 */
)
CREATE TABLE Product /* 商品目錄表 */
(
ProductList_ID int NOT NULL, /* 商品細(xì)分類編號, 外鍵 ( 參照 PRODUCTLIST 表 ) */
Product_ID INT IDENTITY(1,1) NOT NULL, /* 商品名稱編號, 主鍵 */
Name varchar(30) NOT NULL, /* 商品名稱 */
ProductSpec_ID INT NOT NULL, /* 商品規(guī)格, 外鍵 ( 參照 PRODUCTSPEC 表 ) */
ProductUnit_ID INT NOT NULL, /* 計量單位, 外鍵 ( 參照 PRODUCTUNIT 表 ) */
Price MONEY NULL, /* 參考價格 */
Employee_ID INT NOT NULL, /* 操作員, 外鍵 ( 參照 EMPLOYEE 表 )*/
CreateDate datetime NULL, /* 創(chuàng)建時間 */
Remark varchar(250) NULL /* 描述,備注 */
)
CREATE TABLE Product_Supplier /* 商品--供應(yīng)商表 */
(
Product_ID INT NOT NULL, /* 商品名稱編號,主鍵 , 外鍵( 參照 PRODUCT 表 )*/
Supplier_ID INT NOT NULL /* 供應(yīng)商編號 , 主鍵, 外鍵( 參照 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, /* 職務(wù) */
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 /* 進(jìn)貨合同 */
(
BuyOrder_ID INT IDENTITY(1,1) NOT NULL, /* 進(jìn)貨合同編號 , 主鍵 */
WriteDate datetime NOT NULL, /* 合同簽訂日期 */
InsureDate datetime NOT NULL, /* 合同生效日期 */
EndDate datetime NOT NULL, /* 合同到期日期 */
Dept_ID INT NOT NULL, /* 簽訂部門, 外鍵 ( 參照 DEPT 表 ) */
Supplier_ID INT NOT NULL, /* 供應(yīng)商, 外鍵 ( 參照 SUPPLIER 表 ) */
Employee_ID INT NOT NULL /* 合同主要負(fù)責(zé)人, 外鍵 ( 參照 EMPLOYEE 表) */
)
CREATE TABLE BuyOrder_Detail /* 進(jìn)貨合同明細(xì)表 */
(
BuyOrder_ID INT NOT NULL, /* 進(jìn)貨合同編號,主鍵, 外鍵 ( 參照 BUYORDER 表 ) */
Product_ID INT NOT NULL, /* 所進(jìn)商品編號,主鍵, 外鍵 (參照 PRODUCT 表 ) */
Quantity INT NOT NULL, /* 商品數(shù)量 */
Price money NOT NULL /* 商品進(jìn)價 */
)
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 /* 入庫單明細(xì) */
(
EnterStock_ID INT NOT NULL, /* 入庫單編號 , 主鍵, 外鍵 (參照 ENTERSTOCK 表 )*/
Product_ID INT NOT NULL, /* 此種商品編號,主鍵, 外鍵 (參照 PRODUCT 表 ) */
Quantity int NOT NULL, /* 此種商品數(shù)量 */
Price money NULL, /* 此種商品參考價格 */
HaveInvoice bit not null, /* 此種商品有沒有開發(fā)票 ( 缺省為 0 , 有沒有開票 )*/
InvoiceNum varchar(30) NULL /* 發(fā)票號 */
)
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 /* 退庫單明細(xì)表 */
(
BackStock_ID INT NOT NULL, /* 退庫單編號 , 主鍵, 外鍵 (參照 BACKSTOCK 表 )*/
Product_ID INT NOT NULL, /* 所退商品編號,主鍵, 外鍵 (參照 PRODUCT 表 ) */
Quantity int NOT NULL, /* 退入數(shù)量 */
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 /* 出庫單明細(xì)表 */
(
LeaveStock_ID INT NOT NULL, /* 出庫單編號 , 主鍵, 外鍵 (參照 BACKSTOCK 表 )*/
Product_ID INT NOT NULL, /* 所出商品編號,主鍵, 外鍵 (參照 PRODUCT 表 ) */
Quantity int NOT NULL, /* 出庫數(shù)量 */
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 /* 退貨單明細(xì)表 */
(
BackSale_ID INT NOT NULL, /* 退貨單編號 , 主鍵, 外鍵 (參照 BACKSTOCK 表 )*/
Product_ID INT NOT NULL, /* 所退商品編號,主鍵, 外鍵 (參照 PRODUCT 表 ) */
Quantity int NOT NULL, /* 退貨數(shù)量 */
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 /* 合同主要負(fù)責(zé)人, 外鍵 ( 參照 EMPLOYEE 表) */
)
CREATE TABLE SaleOrder_Detail /* 銷售合同明細(xì)表 */
(
SaleOrder_ID INT NOT NULL, /* 銷售合同編號,主鍵, 外鍵 ( 參照 BUYORDER 表 ) */
Product_ID INT NOT NULL, /* 銷售商品編號,主鍵, 外鍵 (參照 PRODUCT 表 ) */
Quantity int not null, /* 商品數(shù)量 */
Price money null /* 商品進(jìn)價 */
)
CREATE TABLE Buy /* 進(jìn)貨表 ( 驗貨表 ) */
(
Buy_ID INT IDENTITY(1,1) NOT NULL, /* 進(jìn)貨編號 , 主鍵 */
ComeDate datetime NOT NULL, /* 進(jìn)貨日期 */
Dept_ID INT NOT NULL, /* 進(jìn)貨部門, 外鍵 ( 參照 DEPT 表 ) */
Employee_ID INT NOT NULL /* 驗貨人, 外鍵 ( 參照 EMPLOYEE 表)*/
)
CREATE TABLE Buy_Detail /* 進(jìn)貨表明細(xì) ( 驗貨表 ) */
(
Buy_ID INT NOT NULL, /* 進(jìn)貨編號,主鍵, 外鍵 ( 參照 BUY 表 ) */
Product_ID INT NOT NULL, /* 商品編號,主鍵, 外鍵 ( 參照 PRODUCT 表 ) */
BuyOrder_ID INT NULL, /* 采購合同, 外鍵 ( 參照 BUYORDER 表 ) */
Quantity int not null, /* 數(shù)量 */
Price money null /* 價格 */
/* BUYORDER_ID 為 NULL 時, 為現(xiàn)金進(jìn)貨 */
)
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 /* 銷售明細(xì) ( 驗貨表 ) */
(
Sale_ID INT NOT NULL, /* 銷售編號,主鍵, 外鍵 ( 參照 SALE 表 ) */
Product_ID INT NOT NULL, /* 商品編號,主鍵, 外鍵 ( 參照 PRODUCT 表 ) */
SaleOrder_ID INT NULL, /* 銷售合同, 外鍵 ( 參照 SALEORDER 表 ) */
Quantity int not null, /* 數(shù)量 */
Price money not null, /* 價格 */
Discount int null /* 折扣 */
/* SALEORDER_ID 為 NULL 時, 為現(xiàn)金銷售 */
)
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, /* 所存數(shù)量 */
Price money not null /* 加權(quán)價 */
/* LASTLEAVEDATE 為NULL 時,此種商品從來沒有 賣過 */
)
進(jìn)銷存系統(tǒng)數(shù)據(jù)庫設(shè)計,HiShop友數(shù)進(jìn)銷存管理系統(tǒng),為了對企業(yè)生產(chǎn)經(jīng)營中進(jìn)貨、出貨、批發(fā)銷售、付款等進(jìn)行全程進(jìn)行跟蹤,管理,而設(shè)計的整套方案。
相關(guān)閱讀:有哪些比較好用的免費進(jìn)銷存管理軟件?