數(shù)據(jù)庫(kù)課程設(shè)計(jì):倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)方案_第1頁
數(shù)據(jù)庫(kù)課程設(shè)計(jì):倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)方案_第2頁
數(shù)據(jù)庫(kù)課程設(shè)計(jì):倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)方案_第3頁
數(shù)據(jù)庫(kù)課程設(shè)計(jì):倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)方案_第4頁
數(shù)據(jù)庫(kù)課程設(shè)計(jì):倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)方案_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)庫(kù)課程設(shè)計(jì):倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)方案一、課程設(shè)計(jì)背景與需求分析1.項(xiàng)目背景倉(cāng)庫(kù)管理系統(tǒng)(WMS)是連接采購(gòu)、庫(kù)存與銷售的核心環(huán)節(jié),需實(shí)現(xiàn)商品入庫(kù)、出庫(kù)、庫(kù)存盤點(diǎn)、人員管理等功能的數(shù)據(jù)化管控。本設(shè)計(jì)基于MySQL數(shù)據(jù)庫(kù),采用“需求驅(qū)動(dòng)+模塊化設(shè)計(jì)”思路,滿足中小型企業(yè)倉(cāng)庫(kù)日常運(yùn)營(yíng)需求,同時(shí)符合數(shù)據(jù)庫(kù)課程對(duì)“ER模型、SQL優(yōu)化、事務(wù)處理”的教學(xué)要求。2.核心需求(功能性+非功能性)需求類型具體內(nèi)容功能性需求1.商品管理:新增/修改/查詢商品信息(名稱、規(guī)格、類別、單價(jià))2.入庫(kù)管理:記錄入庫(kù)單(單號(hào)、日期、供應(yīng)商、商品明細(xì))3.出庫(kù)管理:生成出庫(kù)單(單號(hào)、日期、客戶、商品明細(xì))4.庫(kù)存管理:實(shí)時(shí)查詢庫(kù)存、庫(kù)存預(yù)警(低于安全庫(kù)存自動(dòng)提示)5.人員管理:區(qū)分管理員、庫(kù)管員權(quán)限,記錄操作日志非功能性需求1.數(shù)據(jù)完整性:入庫(kù)/出庫(kù)數(shù)量與庫(kù)存變動(dòng)實(shí)時(shí)同步,避免數(shù)據(jù)不一致2.安全性:敏感操作(刪除商品、修改庫(kù)存)需權(quán)限驗(yàn)證3.性能:?jiǎn)伪聿樵冺憫?yīng)時(shí)間<1秒,支持50人同時(shí)在線操作3.業(yè)務(wù)流程梳理(核心流程)graphTDA[采購(gòu)下單]-->B[供應(yīng)商送貨]B-->C[庫(kù)管員驗(yàn)收商品]C-->D[生成入庫(kù)單→更新庫(kù)存表]E[銷售下單]-->F[庫(kù)管員核對(duì)庫(kù)存]F-->G[庫(kù)存充足→生成出庫(kù)單→更新庫(kù)存表]F-->H[庫(kù)存不足→觸發(fā)采購(gòu)預(yù)警]I[定期盤點(diǎn)]-->J[對(duì)比庫(kù)存表與實(shí)際數(shù)量]J-->K[差異調(diào)整→生成盤點(diǎn)單→更新庫(kù)存表]二、數(shù)據(jù)庫(kù)設(shè)計(jì)(核心環(huán)節(jié))1.概念結(jié)構(gòu)設(shè)計(jì)(ER圖)核心實(shí)體及屬性如下:商品表(Product):商品ID(主鍵)、商品名稱、規(guī)格、類別ID(外鍵)、單價(jià)、安全庫(kù)存、創(chuàng)建時(shí)間商品類別表(ProductType):類別ID(主鍵)、類別名稱、描述供應(yīng)商表(Supplier):供應(yīng)商ID(主鍵)、名稱、聯(lián)系人、電話、地址客戶表(Customer):客戶ID(主鍵)、名稱、聯(lián)系人、電話、地址入庫(kù)單表(InStock):入庫(kù)單號(hào)(主鍵)、入庫(kù)日期、供應(yīng)商ID(外鍵)、庫(kù)管員ID(外鍵)、備注入庫(kù)明細(xì)表(InStockDetail):明細(xì)ID(主鍵)、入庫(kù)單號(hào)(外鍵)、商品ID(外鍵)、入庫(kù)數(shù)量、單價(jià)、金額出庫(kù)單表(OutStock):出庫(kù)單號(hào)(主鍵)、出庫(kù)日期、客戶ID(外鍵)、庫(kù)管員ID(外鍵)、備注出庫(kù)明細(xì)表(OutStockDetail):明細(xì)ID(主鍵)、出庫(kù)單號(hào)(外鍵)、商品ID(外鍵)、出庫(kù)數(shù)量、單價(jià)、金額庫(kù)存表(Inventory):庫(kù)存ID(主鍵)、商品ID(外鍵)、當(dāng)前庫(kù)存數(shù)量、倉(cāng)庫(kù)位置、最后更新時(shí)間用戶表(User):用戶ID(主鍵)、用戶名、密碼(加密存儲(chǔ))、角色(管理員/庫(kù)管員)、電話、狀態(tài)ER圖關(guān)系說明:商品與類別:多對(duì)一(1個(gè)類別包含多個(gè)商品)入庫(kù)單與入庫(kù)明細(xì):一對(duì)多(1張入庫(kù)單包含多個(gè)商品明細(xì))商品與庫(kù)存:一對(duì)一(1個(gè)商品對(duì)應(yīng)1條庫(kù)存記錄)用戶與入庫(kù)單/出庫(kù)單:一對(duì)多(1個(gè)庫(kù)管員處理多張單據(jù))2.邏輯結(jié)構(gòu)設(shè)計(jì)(表結(jié)構(gòu)SQL)--1.商品類別表CREATETABLEProductType(type_idINTPRIMARYKEYAUTO_INCREMENT,type_nameVARCHAR(50)NOTNULLUNIQUE,type_descVARCHAR(200)DEFAULT'')ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--2.商品表CREATETABLEProduct(product_idINTPRIMARYKEYAUTO_INCREMENT,product_nameVARCHAR(100)NOTNULL,specVARCHAR(50)DEFAULT'',type_idINTNOTNULL,priceDECIMAL(10,2)NOTNULLCHECK(price>0),safe_stockINTNOTNULLDEFAULT0CHECK(safe_stock>=0),create_timeDATETIMEDEFAULTCURRENT_TIMESTAMP,FOREIGNKEY(type_id)REFERENCESProductType(type_id)ONDELETERESTRICTONUPDATECASCADE)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--3.供應(yīng)商表CREATETABLESupplier(supplier_idINTPRIMARYKEYAUTO_INCREMENT,supplier_nameVARCHAR(100)NOTNULL,contact_personVARCHAR(50)DEFAULT'',phoneVARCHAR(20)NOTNULL,addressVARCHAR(200)DEFAULT'')ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--4.客戶表CREATETABLECustomer(customer_idINTPRIMARYKEYAUTO_INCREMENT,customer_nameVARCHAR(100)NOTNULL,contact_personVARCHAR(50)DEFAULT'',phoneVARCHAR(20)NOTNULL,addressVARCHAR(200)DEFAULT'')ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--5.用戶表(管理員/庫(kù)管員)CREATETABLEUser(user_idINTPRIMARYKEYAUTO_INCREMENT,usernameVARCHAR(50)NOTNULLUNIQUE,passwordVARCHAR(100)NOTNULL,--存儲(chǔ)加密后的密碼(如MD5)roleENUM('admin','keeper')NOTNULL,phoneVARCHAR(20)DEFAULT'',statusENUM('active','inactive')DEFAULT'active',create_timeDATETIMEDEFAULTCURRENT_TIMESTAMP)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--6.入庫(kù)單表CREATETABLEInStock(in_stock_idVARCHAR(20)PRIMARYKEY,--格式:IN+日期+序號(hào)(如IN20240601001)in_dateDATENOTNULL,supplier_idINTNOTNULL,user_idINTNOTNULL,remarkVARCHAR(200)DEFAULT'',FOREIGNKEY(supplier_id)REFERENCESSupplier(supplier_id)ONDELETERESTRICTONUPDATECASCADE,FOREIGNKEY(user_id)REFERENCESUser(user_id)ONDELETERESTRICTONUPDATECASCADE)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--7.入庫(kù)明細(xì)表CREATETABLEInStockDetail(detail_idINTPRIMARYKEYAUTO_INCREMENT,in_stock_idVARCHAR(20)NOTNULL,product_idINTNOTNULL,in_quantityINTNOTNULLCHECK(in_quantity>0),unit_priceDECIMAL(10,2)NOTNULLCHECK(unit_price>0),amountDECIMAL(12,2)GENERATEDALWAYSAS(in_quantity*unit_price)STORED,--計(jì)算列FOREIGNKEY(in_stock_id)REFERENCESInStock(in_stock_id)ONDELETECASCADEONUPDATECASCADE,FOREIGNKEY(product_id)REFERENCESProduct(product_id)ONDELETERESTRICTONUPDATECASCADE,UNIQUEKEY(in_stock_id,product_id)--同一入庫(kù)單不重復(fù)添加同一商品)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--8.出庫(kù)單表CREATETABLEOutStock(out_stock_idVARCHAR(20)PRIMARYKEY,--格式:OUT+日期+序號(hào)(如OUT20240601001)out_dateDATENOTNULL,customer_idINTNOTNULL,user_idINTNOTNULL,remarkVARCHAR(200)DEFAULT'',FOREIGNKEY(customer_id)REFERENCESCustomer(customer_id)ONDELETERESTRICTONUPDATECASCADE,FOREIGNKEY(user_id)REFERENCESUser(user_id)ONDELETERESTRICTONUPDATECASCADE)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--9.出庫(kù)明細(xì)表CREATETABLEOutStockDetail(detail_idINTPRIMARYKEYAUTO_INCREMENT,out_stock_idVARCHAR(20)NOTNULL,product_idINTNOTNULL,out_quantityINTNOTNULLCHECK(out_quantity>0),unit_priceDECIMAL(10,2)NOTNULLCHECK(unit_price>0),amountDECIMAL(12,2)GENERATEDALWAYSAS(out_quantity*unit_price)STORED,FOREIGNKEY(out_stock_id)REFERENCESOutStock(out_stock_id)ONDELETECASCADEONUPDATECASCADE,FOREIGNKEY(product_id)REFERENCESProduct(product_id)ONDELETERESTRICTONUPDATECASCADE,UNIQUEKEY(out_stock_id,product_id))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--10.庫(kù)存表CREATETABLEInventory(inventory_idINTPRIMARYKEYAUTO_INCREMENT,product_idINTNOTNULLUNIQUE,current_stockINTNOTNULLDEFAULT0CHECK(current_stock>=0),warehouse_locationVARCHAR(50)DEFAULT'',last_update_timeDATETIMEDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,FOREIGNKEY(product_id)REFERENCESProduct(product_id)ONDELETECASCADEONUPDATECASCADE)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--11.操作日志表(用于審計(jì)與追溯)CREATETABLEOperationLog(log_idINTPRIMARYKEYAUTO_INCREMENT,user_idINTNOTNULL,operation_typeENUM('add','update','delete','query')NOTNULL,table_nameVARCHAR(50)NOTNULL,--操作的表名(如Product、InStock)operation_timeDATETIMEDEFAULTCURRENT_TIMESTAMP,contentVARCHAR(500)DEFAULT'',--操作內(nèi)容描述(如“刪除商品ID=101”)FOREIGNKEY(user_id)REFERENCESUser(user_id)ONDELETERESTRICTONUPDATECASCADE)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;3.索引設(shè)計(jì)(優(yōu)化查詢性能)--商品表:按名稱和類別查詢頻繁,添加索引CREATEINDEXidx_product_nameONProduct(product_name);CREATEINDEXidx_product_typeONProduct(type_id);--入庫(kù)/出庫(kù)單表:按日期查詢頻繁,添加索引CREATEINDEXidx_instock_dateONInStock(in_date);CREATEINDEXidx_outstock_dateONOutStock(out_date);--庫(kù)存表:按商品ID和庫(kù)存數(shù)量查詢(庫(kù)存預(yù)警),添加索引CREATEINDEXidx_inventory_stockONInventory(current_stock);三、功能模塊實(shí)現(xiàn)(SQL與業(yè)務(wù)結(jié)合)1.核心業(yè)務(wù)SQL示例(1)商品入庫(kù)流程(事務(wù)處理,確保數(shù)據(jù)一致性)--1.開啟事務(wù)STARTTRANSACTION;--2.插入入庫(kù)單主表INSERTINTOInStock(in_stock_id,in_date,supplier_id,user_id,remark)VALUES('IN20240601001','2024-06-01',1,2,'季度采購(gòu)入庫(kù)');--3.插入入庫(kù)明細(xì)(假設(shè)商品ID=101,入庫(kù)100件,單價(jià)50元)INSERTINTOInStockDetail(in_stock_id,product_id,in_quantity,unit_price)VALUES('IN20240601001',101,100,50.00);--4.更新庫(kù)存表(若商品已存在則更新,不存在則插入)INSERTINTOInventory(product_id,current_stock,warehouse_location)VALUES(101,100,'A區(qū)1號(hào)貨架')ONDUPLICATEKEYUPDATEcurrent_stock=current_stock+100,last_update_time=CURRENT_TIMESTAMP;--5.記錄操作日志INSERTINTOOperationLog(user_id,operation_type,table_name,content)VALUES(2,'add','InStock','創(chuàng)建入庫(kù)單IN20240601001,商品ID=101,數(shù)量100');--6.提交事務(wù)(若出現(xiàn)錯(cuò)誤則ROLLBACK)COMMIT;(2)庫(kù)存預(yù)警查詢(查詢低于安全庫(kù)存的商品)SELECTduct_id,duct_name,p.spec,p.safe_stock,i.current_stock,(p.safe_stock-i.current_stock)ASshortageFROMProductpJOINInventoryiONduct_id=duct_idWHEREi.current_stock<p.safe_stockORDERBYshortageDESC;(3)出庫(kù)業(yè)務(wù)校驗(yàn)(確保庫(kù)存充足)--出庫(kù)前校驗(yàn):查詢商品ID=101的當(dāng)前庫(kù)存是否≥出庫(kù)數(shù)量50SELECTIF(current_stock>=50,'庫(kù)存充足','庫(kù)存不足')ASstock_status,current_stockFROMInventoryWHEREproduct_id=101;--若庫(kù)存充足,執(zhí)行出庫(kù)(類似入庫(kù)事務(wù),更新庫(kù)存為current_stock-50)2.權(quán)限控制實(shí)現(xiàn)管理員權(quán)限:可執(zhí)行所有操作(如刪除商品、修改用戶角色)庫(kù)管員權(quán)限:僅可執(zhí)行入庫(kù)、出庫(kù)、盤點(diǎn)等操作,不可修改用戶信息權(quán)限校驗(yàn)SQL示例(登錄時(shí)驗(yàn)證):--驗(yàn)證用戶名、密碼,并返回角色(用于前端權(quán)限控制)SELECTuser_id,username,role,statusFROMUserWHEREusername='keeper01'ANDpassword=MD5('123456')--實(shí)際項(xiàng)目建議用更安全的加密方式(如SHA256)ANDstatus='active';四、系統(tǒng)測(cè)試與優(yōu)化1.測(cè)試用例(核心場(chǎng)景)測(cè)試場(chǎng)景測(cè)試步驟預(yù)期結(jié)果商品入庫(kù)1.新增供應(yīng)商(ID=1)2.新增商品(ID=101,安全庫(kù)存50)3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論