Đề tài : Inventory GVHD : Th.S Nguyễn Danh TúPage 2 of 28Mở Đầu Bước sang thế k 21 đánh dấu sự kiện cuộc cách mạng 4.0 chính thức nổ ra, một kỷ nguyên mới đã xuất hiện, kỷ nguyên của côn
Trang 1TRƯỜNG ĐẠI H C BÁCH KHOA HÀ NỘIỌ
VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
- -
BÁO CÁO GIỮA KỲ
Đề tài: INVENTORY
Nhóm sinh viên thực hiện: Nhóm 19
Trang 2Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Mục lục
Mục lục 1
Mở Đầu 2
Đánh Giá Nhóm 3
Phần 1 : Đề tài nhóm 4
I Đề tài nhóm 4
II.Thông tin CSDL 5
Phần 2: Truy vấn dữ liệu 8
I Các câu lệnh truy vấn 8
II.Tối ưu truy vấn ( Index , Partition ) 15
1 Tối ưu bằng Index 15
2 Tối ưu bằng Partition 16
III.Đánh giá hiệu năng 16
Phần 3 : C ập nhậ t d ữ liệu 18
I.Thủtục (Procedure) cập nhật dữliệu 18
1.Procedure Insert 18
2.Procedure Update 18
3.Procedure Delete 19
II.Công cụ sinh thủ tục (nếu có ) 20
III.Thực hiện giao dịch ( Transaction ) 20
IV Sinh CSDL 23
1.Tạo Database mới cùng cấu trúc với Database cũ 23
2.Đổ d ữ liệu vào Database mới 23
Kết Lu n 26ậ
Tài Li u Tham Kh o 27ệ ả
Trang 3Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Page 2 of 28
Mở Đầu
Bước sang thế k 21 đánh dấu sự kiện cuộc cách mạng 4.0 chính thức nổ ra, một
kỷ nguyên mới đã xuất hiện, kỷ nguyên của công nghệ thông tin và big Data, AI, machine learning Để tham gia các ngành hot trong lĩnh vực số như Data analyst (DA), business analyst (BA), Data scientist, việc thông thạo môn cơ sở dữ liệu hay các kiến thứcchuyên môn về ữ d liệu đã trở thành điều kiện bắtbuộc của sinh viên Toán Tin, hệthống thông tin Một ví dụ điển hình về vai trò ,lợi ích , cũng như ứng dụng thực tế của việc quản trị cơ sở dữ liệu đó chính là quản trị Inventory
Inventory hái niệm hàng tồn kho thường mang lại cảm xúc không mấy tích cự- k c với người làm kinh doanh Tuy nhiên trên thực tế, dự trữ hàng tồn kho luôn là một trong những hoạt động không thể thiếu của doanh nghiệp trong quá trình kinh doanh sản xuất Những vai trò quan trọng có thể ể đến của Inventory như : tránh rủi ro do thiếu hụt khàng hoá và nguyên liệu , đảm bảo giao dịch được thuận lợi , đầu cơ sản phẩm Bên cạnh
đó , việc quản trị Inventory một cách khoa học có thể đem lại nhiều lợi ích cho doanh nghiệp , giúp duy trì mối quan hệ tốt đẹp với khách hàng , đảm bảo việc vận hành sản xuất được liên tục , hạn chế những tổn thất về biến động giá sản phẩm trên thị trường , v.v…
Nắm bắt được ý nghĩa của đề tài Inventory , cùng với đó là những hiểu biết đến từcác giờ học bổ ích và hiệu quả trên lớp học bộ môn Cơ sở ữ liệu của thầy Nguyễn Danh d
Tú , nhóm 19 chúng em quyết định chọn Inventory làm chủ đề cho bài báo cáo giữa kỳcủa mình
Năm 2021 là một năm học khó khăn , với nhiều biến cố do dịch Covid 19 đem lại Việc không được tới trường để tham gia những giờ học trực tiếp cũng khiến cho việc học và trao đổi giữa thầy trò trở nên khó khăn hơn.Tuy nhiên thầy và các bạn v n nỗ ẫ lực để khắc phục tình hình , hoàn thành môn học.Nhân đây em xin gửi lời cảm ơn chân thành tới thầy
đã luôn tạo điều kiện , nhiệt tình giảng dạy và giúp đỡ chúng em trong suốt quá trình vừa qua.Bài báo cáo của chúng em có thể tồn tại một vài thiếu sót , rất mong nhận được góp ý của thầy và các bạ trong lớp.n
Em xin chân thành cảm ơn!
HUST , ngày 12/08/2021
Trang 4Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Đánh Giá Nhóm
Trang 5Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
• Vậy vai trò c a quủ ản trị hàng tồn kho là gì? Đó chính là
-Đảm bảo hàng hóa tồn kho luôn đủ để bán ra thị trường, không bị gián đoạn
-Loại trừ các rủi ro tiềm tàng của hàng tồn kho như hàng bị đọng, giảm phẩm chất, hế ứ t hạn do tồn kho quá lâu
-Cân đối giữa các khâu Mua vào – dự trữ – sản xuất tiêu thụ–
-Tối ưu hóa lượng hàng lưu kho nhằm tăng hiệu quả kinh doanh và giảm chi phí đầu tư cho doanh nghiệp
-Cơ sở ật chất, máy móc sản xuất, trang thiết bị có đủ v để đáp ứng lượng nguyên vật liệu/hàng hóa này?
-Quan hệ cung cầu: Liệu nhu cầu thị trường trong thời gian tới có tiêu thụ hết lượng – hàng hóa này trước khi chúng hết hạn/lỗi thời không? ếu thời gian tồn kho hàng quá Nlâu, phải tính đến các thất thoát và rủi ro hàng tồn kho Chi phí để quản lý, bảo quản hàng trong thời gian này là bao nhiêu?
-Doanh nghiệp cần một khoản tiền lớn để thanh toán chi phí mua vào nguyên vật liệu Trong khi đó có thể dùng tiền này để đầu tư, chi trả cho các hoạt động khác, vậy đầu tư nào sẽ có lợi hơn?
Trang 6Đề tài : Inventory GVHD : Th.S Nguyễn Danh TúNhư vậy, thông qua hoạt động quản trị kho hàng, doanh nghiệp sẽ có quyết định nhập lượng nguyên vật liệu thế nào hợp lý, vừa chớp lấy cơ hội giảm chi phí mua vào, nhưng vẫn phải đảm bảo quá trình lưu trữ ản xuất, bán hàng diễn ra ổn định., s
Trang 7Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Page 6 of 28
E-R DIAGRAM
Links: /view?usp=sharing
https://drive.google.com/file/d/1sEE6biwGoovRMseUl_5uzsoOBOKzFeu-R-E DIAGRAM
Trang 8Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Đạt 1NF : Tất cả các thuộc tính của các bảng đều là giá trị nguyên tố
Đạt 2NF : Mọi thuộc tính không khóa đều phụ thuộc hàm đầy đủ vào khóa chính Không đạt 3NF : Không có bảng nào đạt chuẩn 3NF
Ví dụ không đạt chuẩn 3NF :
Bảng Stock Holding: có khóa chính là: Stock Holding Key
Stock Holding Key → Stock Item Key → Last Cost Price
→ Phụ thuộc bắc cầu vào khóa chính
Trang 9Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Page 8 of 28
Phần 2: Truy vấn dữ liệu
I Các câu lệnh truy vấn
1.Liệt kê các mặt hàng là áo hoodie màu đen
SELECT FROM * [Dimension] [Stock Item]
WHERE Color = 'Black'
AND [Stock Item] like '%Hoodie%'
ORDER BY [WWI Stock Item ID] ASC
2.Thống kê số lượng các sản phẩm bán ra trong 1 thành phố
SELECT [Description] [Product] as , SUM ( [Quantity] ) [Total] as
FROM [Dimension] [City] INNER JOIN [Fact] [Order]
ON [Dimension] [City] [City Key] [Fact] = [Order] [City Key]
WHERE City = 'Abbottsburg'
GROUP BY [Description]
Order by [Total] desc
3 Thống kê mặt hàng socola không bán được trong khoảng thời gian Valentine
SELECT [Stock Item]
FROM [Dimension] [Stock Item]
WHERE [Stock Item] Like '%chocolate%'
EXCEPT
SELECT [Description]
FROM [Fact] [Order]
WHERE DAY ( [Order Date Key] ) BETWEEN 10 AND 12
AND MONTH ( [Order Date Key] ) = 2
AND YEAR ( [Order Date Key] 2016 ) =
Trang 10Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
4 ổng tiền các cửa hàng đã nhập trong tháng 1/2015T
SELECT [Customer] , SUM ( [Quantity] [Unit Price] * ) AS Total
FROM [Fact] [Order] INNER JOIN [Dimension] [Customer]
ON [Fact] [Order] [Customer Key] = [Dimension] [Customer] [Customer Key]
WHERE MONTH ( [Order date Key] ) 1 =
AND YEAR ( [Order Date Key] 2015 ) =
AND [Customer] 'Unknown' !=
GROUP BY Customer
ORDER BY Total DESC
5 Thống kê mặt hàng bán chạy trong tháng 1/2016
SELECT [Stock Item]
, Sum ( [Quantity] ) AS Total
FROM [Fact] [Movement] INNER JOIN [Dimension] [Stock Item]
ON [Fact] [Movement] [Stock Item Key] [Dimension] = [Stock Item] [Stock Item Key]
WHERE MONTH ( [Date key] ) 1 =
AND YEAR ( [Date Key] 2016 ) =
AND [Quantity] < 0
GROUP BY [Stock Item]
Order by [Total] ASC
6 Lọc những sản phẩm có đơn giá nhập vào trong khoảng $100 - $200
Trang 11Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Page 10 of 28
SELECT [Stock Item Key]
, [WWI Stock Item ID]
, [Recommended Retail Price]
FROM [Dimension] [Stock Item]
WHERE [Unit Price] BETWEEN 100 AND 200
7 Các mặt hàng đã được có mặt tại từng thành phố
SELECT [City] , [Description] ,
[State Province] , [Country]
FROM [Dimension] [City] INNER JOIN [Fact] [Order]
ON [Dimension] [City] [City Key] [Fact] = [Order] [City Key]
ORDER BY [City] ASC
8 Thời gian từ khi khách đặt hàng đến khi nhận hàng
SELECT [Order Key]
, [City Key]
, [Customer Key]
, [Stock Item Key]
, [Order Date Key]
, [Picked Date Key]
, DATEDIFF ( DAY , [Order Date Key] , [Picked Date Key] ) AS Length
Trang 12Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú , [Lineage Key]
FROM [Fact] [Order]
WHERE YEAR ( [Order date key] 2014 ) =
ORDER BY Length
9 Lãi của từng mặt hàng trong tháng 1 năm 2016
SELECT [Description]
, SUM ( [Quantity] ) AS [Total Quantity]
, SUM (( [Quantity] [Recommended Retail Price] *( - [Fact] [Order] [Unit Price] ))) AS
[Total Profit]
FROM [Fact] [Order] INNER JOIN [Dimension] [Stock Item]
ON [Fact] [Order] [Stock Item Key] = [Dimension] [Stock Item] [Stock Item Key]
WHERE MONTH ( [Order date key] ) 1 =
AND YEAR ( [Order date key] 2016 ) =
GROUP BY [Description]
ORDER BY [Total Profit] DESC
10 Giá trị của đơn hàng trước và sau thuế
SELECT [WWI Order ID]
, [Order Date Key]
, [Description]
, [Package]
, [Quantity]
, [Recommended Retail Price]
, [Fact] [Order] [Tax Rate]
, [Quantity] [Recommended Retail Price] * AS [Total Excluding Tax]
, CONVERT ( decimal ( 10 , 3 ), [Quantity] * [Recommended Retail Price] * [Fact] [Order] [Tax
Rate] / 100 ) AS [Tax Amount]
, CONVERT ( decimal ( 10 3 [Quantity] [Recommended Retail , ), *
Price] *( 1 + [Fact] [Order] [Tax Rate] 100 / )) AS [Total Including Tax]
FROM [Fact] [Order] INNER JOIN [Dimension] [Stock Item]
ON [Fact] [Order] [Stock Item Key] = [Dimension] [Stock Item] [Stock Item Key]
Trang 13Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Page 12 of 28
11 Thống kê số lượng các sản phẩm bán ra trong 1 thành phố
WITH Statistic ( Product Total , ) AS
(
SELECT [Stock Item] [Product] as
, SUM ( [Quantity] ) as [Total]
FROM [Dimension] [City] a
JOIN [Fact] [Order] b
ON a [City Key] = b [City Key]
JOIN [Dimension] [Stock Item] c
ON b [Stock Item Key] = c [Stock Item Key]
WHERE City = 'Sea Island'
GROUP BY [Stock Item] )
SELECT TOP 10 * FROM Statistic
ORDER BY Total DESC
12 Lọc những đơn hàng áo Hoodie có số lượng sản phẩm lớn hơn số lượng sả phẩm n bán ra trung bình trên 1 đơn hàng
WITH Product AS SELECT ( [Stock Item]
, [Stock Item Key]
FROM [Dimension] [Stock Item]
WHERE [Stock Item] like '%Hoodie%' ),
Hoodie_Order AS ( SELECT [Order Key]
, [Order Date Key]
, [Stock Item]
, [Quantity]
,[Unit Price]
FROM Fact [Order]
INNER JOIN Product ON Fact [Order] [Stock Item Key] Product = [Stock Item Key] ),
AverageQuantity ( Quantity ) AS ( SELECT AVG ( Quantity )
Trang 14Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
FROM Hoodie_Order )
SELECT [Order Key] [Stock Item] , , [Order Date Key] , [Unit Price]
FROM AverageQuantity a , Hoodie_Order b
WHERE a Quantity < b Quantity
13 Tính khoảng thời gian từ lúc đặt hàng đến lúc nhận hàng
SELECT [Order Key]
, [City Key]
, [Customer Key]
, [Stock Item]
, [Order Date Key]
, [Picked Date Key]
, DATEDIFF ( DAY , [Order Date Key] , [Picked Date Key] ) as Datediff ,
FROM [Fact] [Order] a INNER JOIN Dimension [Stock Item] b
ON a [Stock Item Key] = b [Stock Item Key]
WHERE YEAR ( [Order date key] 2014 ) =
order by Datediff DESC
14 Truy xuất thông tin cụ thể của đơn hàng dựa trên các Key
WITH Picker as ( SELECT [Employee Key] employeekey , [Employee] Picker FROM
Dimension Employee ),
Order1 as ( SELECT [Order Key] [City] , , [Customer] , [Stock Item]
Trang 15Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
FROM [WideWorldImportersDW] [Fact] [Order] a
JOIN Dimension City b ON a [City Key] = b [City Key]
JOIN Dimension Customer c ON a [Customer Key] = c [Customer Key]
JOIN Dimension [Stock Item] d ON a [Stock Item Key] d = [Stock Item
Key]
JOIN Dimension [Employee] e ON a [Salesperson Key] = e [Employee
Key]
JOIN Picker ON a [Picker Key] = Picker employeekey
WHERE Customer != 'Unknown' )
SELECT FROM * Order1
WHERE [Order Key] = '213083'
15 Đếm số khách hàng đặt hàng của công ti ở thành phố East Fultonham
WITH Count_Customer AS ( SELECT [Customer Key] Customer_Key as
FROM Fact [Order]
WHERE [City Key] IN ( SELECT [City Key]
FROM
Dimension City
WHERE City = 'East Fultonham' )
GROUP BY [Customer Key] )
SELECT count ( [Customer_Key] ) AS Total
FROM Count_Customer
Trang 16Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
II.Tối ưu truy vấn ( Index , Partition )
1 Tối ưu bằng Index
Trước khi thêm index
Sau khi thêm index
Kế hoạch thực thi
Đánh INDEX
Kế hoạch thực thi
Trang 17Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Page 16 of 28
2 Tối ưu bằng Partition
III.Đánh giá hiệu năng
Hiệu năng index :
Hiệu năng Partition :
Tạo bảng và đồng thời phân đoạn
Trang 18Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Trang 19Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Page 18 of 28
Phần 3 : Cập nhật dữ liệu I.Thủ tục (Procedure) cập nhật dữ liệu
1.Procedure Insert
2.Procedure Update
Trang 20Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Trang 21Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Page 20 of 28
II.Công c sinh th ụ ủ tục (nếu có )
III.Thực hiện giao dịch ( Transaction )
Tình huống 1: Công ty có thêm nhà cung cấp, thêm thông tin nhà cung cấp vào bảng
Supplier
Tình huống 2: Công ty có mặt hàng mới nhưng đang sản xuất, thêm thông tin mặt hàng
vào để khách hàng đặt trước
Trang 22Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Tình huống 3: Công ty có mặt hàng mới và hàng đã về kho, update lại thông tin vào
StockHolding và insert vào Movement
Tình huống 4: Xuất hết phiên bản cũ của mặt hàng mới ở tình huống 3, update ở Stock Holding số lượng hàng về 0 và insert đơn xuất ở Movement
Trang 23Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
Page 22 of 28
Tình huống 5: Có thêm đơn hàng mới, insert vào vào bảng Order, kiểm tra số lượng
hàng trong kho không đủ nên Rollback
Tình huống 5: Có thêm đơn hàng mới, insert vào vào bảng Order, kiểm tra số lượng
hàng trong kho đủ nên Commit
Trang 24Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
IV Sinh CSDL
1.Tạo D atabase mới cùng c u trúc vấ ới Database cũ
Source code:
https://drive.google.com/drive/folders/19hZwNpqxOiE_18W3qGYZWZrLJkt8AInd?usp=sharing
2.Đổ dữ liệu vào Database mới
a.Đổ d ữ liệu sử ụ d ng con trỏ Cursor
b.Đổ d ữ liệu sử dụng câu l nhệ
Trang 25Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
INSERT INTO Copy_WideWorldImportersDW.dbo.Customer
SELECT * FROM [WideWorldImportersDW].Dimension.Customer
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.[Date]
SELECT * FROM [WideWorldImportersDW].Dimension.[Date]
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.City
SELECT * FROM [WideWorldImportersDW].Dimension.City
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.Employee
SELECT * FROM [WideWorldImportersDW].Dimension.Employee
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.[Stock Item]
SELECT * FROM [WideWorldImportersDW].Dimension.[Stock Item]
Trang 26Đề tài : Inventory GVHD : Th.S Nguyễn Danh Tú
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.[Transaction Type]
SELECT * FROM [WideWorldImportersDW].Dimension.[Transaction Type]
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.[Payment Method]
SELECT * FROM [WideWorldImportersDW].Dimension.[Payment Method]
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.Supplier
SELECT * FROM [WideWorldImportersDW].Dimension.Supplier
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.Purchase
SELECT * FROM [WideWorldImportersDW].Fact.Purchase
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.[Stock Holding]
SELECT * FROM [WideWorldImportersDW].Fact.[Stock Holding]
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.Movement
SELECT * FROM [WideWorldImportersDW].Fact.Movement
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.[Transaction]
SELECT * FROM [WideWorldImportersDW].Fact.[Transaction]
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.[Order]
SELECT * FROM [WideWorldImportersDW].Fact.[Order]
GO
INSERT INTO Copy_WideWorldImportersDW.dbo.Sale
SELECT * FROM [WideWorldImportersDW].Fact.Sale
GO