ASSIGNMENT DBI202 – DATABASE OF LIBRARY MANAGEMENT SYSTEM STUDENT NAME: NGUYỄN HOÀNG TRUNG| HE172826 STUDENT NAME: NGUYỄN ĐẮC HỢP | HE170497 STUDENT NAME: NGUYỄN ĐỨC MINH | HE172826 STUDENT NAME: NGUYEN THANH PHUC | HE170081 TEACHER: NGUYỄN THỊ OANH 1 1.1. Mô tả bài toán nghiệp vụ - Công ty TNHH thương mại và dịch vụ Phương Linh cho thuê các loại ô tô: 4 chỗ, 8 chỗ, 16 chỗ, 30 chỗ hay 45 chỗ. - Khách đến công ty thuê ô tô sẽ làm việc với bộ phận kế toán. Bộ phận này sẽ tìm trong BẢNG BÁO GIÁ xem loại ô tô khách yêu cầu có không? - Trường hợp không có loại xe khách yêu cầu thì sẽ thông báo cho khách biết. - Trường hợp có loại xe như khách yêu cầu. Bộ phận kế toán sẽ tiến hành kiểm tra trong SỔ XE, SỔ ĐẶT XE. + Nếu không còn xe thì sẽ thông báo cho khách ngày gần nhất có thể có loại xe khách yêu cầu. Nếu khách có nhu cầu đặt trước xe thì ghi lại thông tin và yêu cầu của khách hàng vào sổ đặt xe. Khi có xe sẽ liên hệ để thông báo cho khách hàng. Lúc đó nếu khách hàng không có nhu cầu nữa thì sẽ xoá nhu cầu của khách hàng khỏi sổ đặt xe. Nếu khách hàng đồng ý thuê xe thì sẽ tiến hành làm thủ tục thuê xe khi liên hệ cũng được xoá khỏi sổ đặt xe. + Nếu công ty vẫn còn xe cho thuê thì tiến hành làm thủ tục, hợp đồng theo yêu cầu của khách hàng. Thời gian, địa điểm khách nhận và trả xe được thoả thuận trong HỢP ĐỒNG cho thuê ô tô. - Khách có thể thuê nhiều xe, nhiều loại xe khác nhau. - Thủ tục cho thuê xe đơn giản bao gồm: chứng minh thư, hộ khẩu, giấy giới thiệu của cơ quan, đoàn thể nơi khách hàng làm việc hoặc cư trú và đặt trước 50% tiền thuê xe là có thể nhận xe theo hợp đồng đã ký kết. 50% tiền thuê xe còn lại sẽ được khách hàng thanh toán khi trả xe.Bộ phận kế toán sẽ viết hoá đơn thanh toán trước 50% và hợp đồng cho thuê ô tô. Các thông tin cần thiết sẽ được ghi vào Sổ xe. - Khách hàng nhận ô tô theo thời gian và địa điểm đã thoả thuận trong hợp đồng. Lái xe của công ty sẽ kiểm tra lại hợp đồng cho thuê ô tô và hoá đơn thanh toán khi khách nhận xe. Nếu đúng, lái xe cùng với khách 2 hàng sẽ thực hiện hợp đồng như đã kí kết. Thông tin xe ra khỏi bãi được bộ phận bãi xe ghi SỔ XE RA - Nếu trong thời gian từ lúc kí hợp đồng cho đến khi nhận xe khách hàng muốn huỷ hợp đồng thì khách sẽ phải chịu 10% tổng số tiền thuê xe. Bộ phận kế toán sẽ trả lại số tiền cho khách, huỷ hợp đồng và hoá đơn thanh toán. Cập nhật lại Sổ xe. - Khi trả xe,khách hàng phải hoàn tất thủ tục cho thuê ô tô với lái xe. Lái xe kí nhận đã thu 50% tiền thuê ô tô còn lại vào hoá đơn thanh toán cho khách và kết thúc hợp đồng. Trường hợp khách cầm xe quá thời gian quy định (quá giờ, lưu đêm) trong hợp đồng thì sẽ bị tính thêm tiền phụ trội theo như bảng giá cho thuê xe của công ty quy định. Nếu việc quá thời gian do phía công ty gây ra (xe hỏng, lái xe gây tai nạn) gây ra thì khách hàng không phải chịu thêm bất cứ chi phí nào khác. Lái xe có trách nhiệm giao tiền thuê xe của khách khi hoàn tất thủ tục cho bộ phận kế toán, ký xác nhận vào HOÁ ĐƠN THANH TOÁN do bộ phận kế toán giữ. Sổ xe được cập nhật. Thông tin xe đã về bãi được cập nhật trong SỔ XE VÀO. - Những ô tô hỏng hoặc cần được bảo dưỡng sẽ được chuyển sang bộ phận sửa chữa và ngược lại, xe đã được sửa chữa, bảo dưỡng xong sẽ được đưa ra bãi. Sổ xe vào, Sổ xe ra được cập nhật lại. Bộ phận sửa chữa cũng cập nhật lại SỔ SỬA CHỮA. - Các bộ phận phải viết BÁO CÁO tình trạng xe đang cho thuê, xe đã trả, xe được thuê nhiều nhất,… Để cập nhật lại bảng giá xe cũng như báo cáo cho giám đốc khi được yêu cầu 3 a. Biểu đồ ngữ cảnh y.c. đặt xe 0 hủy đặt xe t..báo có xe Phiếu y/c, CMT, GPLX Hợp đồng thuê xe y.c.hủy hợp đồng t.báo hủy hợp đồng Khách hàng Hệ thống quản lý cho thuê ô tô y/c báo cáo q.đinh quản lý B.bản giao xe Giám đốc Báo cáo y.c. gia hạn B.bản nhận xe t.t sự cố B.bản xử lý sự cố Hóa đơn t.toán Hình 1.1. Biểu đồ ngữ cảnh của hệ thống 1.4.2. Biểu đồ phân rã chức năng Quản lý cho thuê ô tô 1. Nhận thuê xe 2. Quản lý thuê xe 1.1.Tiếp nhận yêu cầu, ghi sổ 2.1. Lập biên 3. Giải quyết sự 4.Báo cáo cố bản giao xe 3.1 Kiểm tra biên bản 4.1. Báo cáo ngày 1.2. Thông báo có xe 2.2. Lập biên bản nhận xe 3.2.Lập biên bản sự cố 4.2. Báo cáo định kỳ 1.3. Ký hợp đồng 2.3. Lập phiếu thanh toán 3.3Viết hóa đơn bồi thƣờng 1.4. Lập lich Hình 1.2. Biểu đồ phân rã chức năng 4 1.4.3. Mô tả chi tiết các chức năng sơ cấp − Tiếp nhận yêu cầu, vào sổ: Khách tới thuê xe cần ghi đầy đủ thông tin về họ tên, địa chỉ, CMND, số điện thoại, số giấy phép lái xe và loại xe muốn thuê. Số ngày dự định thuê, ngày bắt đầu nhận. Nhân viên sẽ kiểm tra thông tin và lƣu các thông tin đó vào sổ khách hàng. − Thông báo có xe: Kiểm tra xem loại xe mà khách hàng muốn thuê có còn chiếc nào đang ở trạng thái chờ thuê không. Nếu có thì thông báo cho khách đăng ký chờ thuê − Ký hợp đồng: Sau khi khách hàng đồng ý thuê xe sẽ ký hợp đồng và đặt cọc tiền. − Lập lịch: Thƣờng xuyên bổ sung xe mới ký hợp đồng vào lịch cho thuê để theo dõi các xe đang thuê, sẽ cho thuê. − Lập biên bản giao xe: Sau khi ký hợp đồng thì thông tin về thời gian và xe đƣợc thuê đƣợc ghi vào lịch xếp xe. Lúc khách nhận xe sẽ cập nhật trạng thái xe vào sổ này. − Lập biên bảnnhận xe: Khi khách trả xe, nhân viên kiểm tra tình trạng xe, lập biên bản giao nhận xe ghi rõ tình trạng của xe trƣớc khi trả, có đối chiếu với tình trạng khi nhận. Nếu có sự bất thƣờng thì ghi sổ và chuyển sang bộ phận xử lý sự cố giải quyết. − Lập phiếu thanh toán: Nhân viên thanh toán dựa trên hợp đồng thuê, biên bản trả xe, nếu xe không có điều gì bất thƣờng trong biên bản nhận xe thì tiến hành lập hóa đơn thu tiền của khách và xác nhận vào biên bản giao nhận xe. − Kiểm tra biên bản: Dựa vào biên bản giao nhận xe sẽ xác định xem xe có điều gì bất thƣờng so với lúc giao xe không, nếu có thì mức độ nhƣ thế nào. − Lập biên bản sự cố: Khi xảy ra sự cố phải lập biên bản về thiệt hại và xác định mức bồi thƣờng hợp lý. − Viết hóa đơn bồi thƣờng: Dựa vào biên bản sự cố, kế toán viết phiếu thu tiền bồi thƣờng của khách. − Báo cáo ngày: Hàng ngày, nhân viên theo dõi việc cho thuê báo cáo về tình hình cho thuê trong ngày và những sự cố (nếu có) để lãnh đạo biết. 5 − Báo cáo định kỳ: Định kỳ (tuần, tháng,..) nhân viên dựa vào các số theo dõi để lập báo cáo về số xe cho thuê, số ngƣời thuê, doanh thu, sự cố và những số liệu phân tích theo yêu cầu của lãnh đạo 1.4.4. Danh sách hồ sơ dữ liệu đƣợc sử dụng 1. Danh sách Xe 2. DS Khách hàng 3. Lịch chờ thuê xe 4. Lịch xếp xe (theo dõi nhận trả) 5. Hợp đồng thuê 6. Biên bản giao xe 7. Biên bản nhận xe 8. Biên bản sự cố 9. Hóa đơn thanh toán 10. Các báo cáo 6 Biểu đồ hoạt động 7 1.4.5. Các biểu đồ tiến trình nghiệp vụ phức tạp a. Tiến trình ký hợp đồng cho thuê Sự kiện Hồ sơ dữ liệu Nhân viên Có khách đến thuê Tiếp nhận yêu cầu, vào sổ DS Khách hàng Lịch chờ thuê xe Kiếm tra xe Nhận thông báo Thông báo để khách chờ 0 Có xe Hợp đồng thuê xe 1 Lịch chờ thuê xe Ký hợp đồng Lịch thuê xe Cập nhật thông tin khách (hủy, kéo dài) Cập nhật lịch cho thuê Hình 1.4. Tiền trình nghiệp vụ ký hợp đồng cho thuê xe 8 b. Tiến trình nghiệp vụ xử lý sự cố Sự kiện Hồ sơ dữ liệu Nhân viên Xảy ra sự cố Kiểm tra biên bản giao nhận 0 Biên bản giao xe Biên bản nhận xe Có sự cố 1 Nhận hóa đơn và biên bản sự cố Lập biên bản sự cố Biên bản sự cố Viết hóa đơn bồi thƣờng Hóa đơn Hình 1.5. Tiến trình nghiệp vụ xử lý sự cố 9 Chương 2 PHÂN TÍCH HỆ THỐNG 2.1. Các mô hình xử lý nghiệp vụ 2.1.1. Biểu đồ luồng dữ liệu mức 0 Yêu cầu đặt xe Hủy đặt xe k Các báo cáo Quy định quản lý 4.0 Phiếu y/c,CMND,GPLX Thông báo có xe KHÁCH HÀNG Hợp đồng thuê xe T.báo hủy hợp đồng y/c báo cáo Báo cáo GIÁM ĐỐC 1.0 y/c hủy hợp đồng Nhận yêu cầu thuê Báo cáo d Lịch chờ thuê c a f Biên bản giao xe g Biên bản nhận xe b i Lịch thuê xe Danh sách Xe DS Khách hàng e Hợp đồng thuê xe Hóa đơn thanh toán 2.0 3.0 Quản lý Biên bản giao xe Thông tin sự cố thuê xe KHÁCH HÀNG Gia hạn Biên bản sự cố Biên bản nhận xe Giải quyết sự cố Hóa đơn Hóa đơn h Hình 2.1. Biểu đồ luồng dữ liệu mức 0 Biên bản sự cố 2.1.2. Biểu đồ luồng dữ liệu mức 1 2.1.2.1. Biểu đồ luồng dữ liệu tiến trình ”1.0 nhận thuê xe” Phiếu y/c, GPLX, CMND Khách hàng Hợp đồng thuê xe 1.1 Ko có loại xe y/c, giấy tờ ko hợp lệ Tiếp nhận yêu cầu, vào sổ b DS Khách hàng Nhân viên a Danh sách xe c Lịch chờ thuê xe Có xe trống 1.3 Ký hợp đồng Khách còn nhu cầu thuê xe Nhân viên 1.2 t.t hợp đồng e Hợp đồng thuê xe Thông báo có xe d Lịch xếp xe Nhân viên 1.4 Lập lịch Nhân viên t.t xe Hủy hợp đồng Gia hạn Khách hàng Hủy đặt xe Hình 2.2. Biểu đồ luồng dữ liệu mức 1: Nhận đăng ký thuê xe 16 2.1.2.2. Biểu đồ luồng dữ liệu tiến trình ”2.0 Quản lý thuê xe” Phiếu thanh toán 2.1 Biên bản giao xe Khách hàng e Hợp đồng thuê xe Lập biên bản giao xe f Biên bản giao xe Nhân viên d Lịch xếp xe g Biên bản nhận xe 2.4 Hóa đơn thanh toán i Lập phiếu thanh toán Biên bản nhận xe Kế toán 2.2 Lập biên bản nhận xe Nhân viên Hình 2.3. Biểu đồ luồng dữ liệu mức 1: Quản lý thuê xe 2.1.2.3. Biểu đồ luồng dữ liệu tiến trình ”3.0 Giải quyết sự cố” Biên bản giao xe Biên bản nhận xe Khách hàng g Biên bản nhận xe Hóa đơn f Biên bản giao xe b DS Khách hàng 3.1 Kiểm tra biên bản giao nhận Nhân viên Thông tin sự cố e Hợp đồng thuê xe h Biên bản sự cố 3.3 Viết hóa đơn bồi thƣờng i Hóa đơn thanh toán 3.2 Lập biên bản sự cố Biên bản sự cố Nhân viên Kế toán Hình 2.4. Biểu đồ luồng dữ liệu mức 1: Giải quyết sự cố 17 2.1.2.4. Biểu đồ luồng dữ liệu tiến trình ”4.0 Báo cáo” Yêu cầu báo cáo Yêu cầu báo cáo Giám đốc Báo cáo Báo cáo a Danh sách xe 4.1 Báo cáo ngày Nhân viên b DS Khách hàng 4.2 f Biên bản giao xe Báo cáo định kỳ g Biên bản nhận xe e Nhân viên Hợp đồng thuê xe h Biên bản sự cố k Các báo cáo Các báo cáo ngày Hình 2.5. Biểu đồ luồng dữ liệu mức 1: Lập các báo cáo 2.2. Mô hình dữ liệu quan niệm 2.2.1. Xác định các thực thể a. Liệt kê, chính xác hóa và lựa chọn thông tin Tên đƣợc chính xác của các đặc trƣng 1 A. DANH SÁCH XE Biển kiểm soát xe Loại xe Số lƣợng xe của từng loại xe Tên xe Mô tả xe Phí thiếu xăng khi nhận xe Phí đi quá km quy định Giá thuê xe/1 ngày đêm Mô tả tình trạng xe Trạng thái của xe Viết gọn tên đặc trƣng 2 Số xe Loại xe Số lƣợng Số chỗ Mô tả Phí xăng Phí quá km Giá Mô tả TT Trạng thái 18 Dấu loại thuộc tính 3 B. DS KHÁCH HÀNG Số thứ tự Tên khách hàng Địa chỉ Số giấy phép lái xe Số điện thoại Số chứng minh nhân dân C. LỊCH CHỜ THUÊ XE Loại xe Khách hàng Ngày vào sổ Ngày giờ nhận xe Số ngày thuê D. LICH BỐ TRÍ THUÊ XE Loại xe Khách hàng Ngày giờ giao xe Ngày giờ trả Ngày giờ trả thực tế Gia hạn thuê xe E. HỢP ĐỒNG THUÊ XE Số hợp đồng Ngày làm hợp đồng Đại diện bên thuê Địa chỉ bên thuê Số điện thoại bên thuê Đại diện làm hợp đồng bên cho thuê Chức vụ ngƣời làm hợp đồng Loại xe Biển kiểm soát (BKS) Đơn giá thuê Tiền đặt cọc Ngày giờ thuê Ngày giờ trả Khuyến mãi Giấy tờ, đồ giữ lại của khách Nội dung hợp đồng F. BIÊN BẢN GIAO XE Số biên bản giao xe 19 STT Tên KH Địa chỉ GPLX Số ĐTKH CMTKH Mã loại Mã KH Ngày ĐK Ngày đặt Số ngày √ √ Mã loại Mã KH Ngay giao Ngày trả Ngày trả TT Gia hạn √ √ Số HĐ Ngày HĐ Tên KH Địa chỉ Số ĐTKH Tên NV Vai trò Tên loại Số xe Giá Tiền đặt Ngày giao Ngày trả Khuyến mãi Giấy tờ GL Nội dung HĐ Số BBGN √ √ √ √ √ √ √ √ Tên khách hàng Địa chỉ Số điên thoại Loại xe Số xe Ngày giờ giao xe Tình trạng xe khi giao Số km lúc giao xe Vạch xăng lúc giao xe G. BIÊN BẢN NHẬN XE Số biên bản nhận xe Tên khách hàng Địa chỉ Số điên thoại Loại xe Số xe Ngày giờ nhận xe Số km lúc nhận xe Vạch xăng lúc nhận xe Tình trạng xe khi nhận H.BIÊN BẢN SỰ CỐ Số biên bản sự cố Tên sự cố Ngày lập biên bản Đại diện giải quyết sự cố bên cho thuê Chức vụ giải quyết sự cố bên cho thuê Bên thuê xe Số điện thoại Loại xe thuê Biển kiểm soát Ngày giờ thuê xe Ngày giờ trả xe Trƣởng ca tiếp nhận sự cố Nội dung sự cố Tiền bồi thƣờng I. HÓA ĐƠN THANH TOÁN Số hóa đơn thanh toán Ngày viết hóa đơn Tên khách hàng 20 Tên KH Địa chỉ Số ĐTKH Tên loại Số xe Ngày giao TT giao Km đi Xăng đi Số BBGN Tên KH Địa chỉ Số ĐTKH Tên loại Số xe Ngày nhận Km về Xăng về TT nhận Số BBSC Tên SC Ngày lập Tên NV Vai trò Tên KH Số ĐTKH Tên loại Số xe Ngày giao Ngày nhận Tên NV ND sự cố Tiền phạt Số HĐTT Ngày HĐ Tên KH √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ Loại xe thuê Số xe Ngày giờ giao Ngày giờ nhận Lý do Hồ sơ đi kèm Tiền thanh toán Tên loại Số xe Ngày giao Ngày nhận Lý do Hồ sơ kèm Tiền TT √ √ √ √ √ b. xác định thực thể và gán thuộc tính Số xe => XE ( Số xe,,tên xe, phí xăng, phí quá km, giá, mô tả TT, trạng thái) Mã khách hàng => KHÁCH HÀNG (mã KH, CMND, Tên KH, Địa chỉ, GPLX, Số ĐT) hợp đồng => HỢP ĐỒNG (mã HĐ, loại HĐ, nội dung HĐ) đại diên công ty, kế toán,.. => NHÂN VIÊN (Mã NV, tên NV, vai trò, CMTND, điện thoại) Biên bản sự cố => SỰ CỐ (mã SC, tên SC) Tên loại xe => LOẠI XE(mã loại, tên loại, mô tả, số lượng) 2.2.2. Xác định mối quan hệ giữa các thực thể Các động từ: đặt thuê (xe), ký (hợp đồng), lập lịch (thuê), giao (xe), nhận (xe), lập biên bản (sự cố) , thanh toán (hóa đơn, bồi thường) a. Các mối quan hệ tương tác Câu hỏi cho “Đặt thuê” Ai đặt thuê? Đạt thuê cái gì? Ai nhận đặt? Đặt thuê khi nào? Bao lâu? Đặt từ khi nào? Câu hỏi cho “lập lich thuê” Ai thuê? Thuê cái gì? Ai lập lịch? Câu trả lời nhận được từ Thực thể Thuộc tính KHÁCH HÀNG XE NHÂNVIÊN Ngày đặt Số ngày Ngày ĐK Câu trả lời nhận được từ Thực thể Thuộc tính KHÁCH HÀNG XE NHÂNVIÊN 21 Thuê từ khi nào? Thuê đến bao giờ? Thuê nhƣ thế nào? Thuê đến khi nào? Câu hỏi cho “ký HĐ” Ai ký? Ký cái gì? Ký với ai Ký về cái gì Bằng cách nào? Khi nào? Ký nhƣ thế nào? Ký nhƣ thế nào? Ký nhƣ thế nào? Câu hỏi cho “giao” Nhận từ ai? Nhận cái gì? Ai nhân? bằng cách nào? khi nào? Số km khi giao là bao nhiêu? Số xăng khi giao là bao nhiêu? Tình hình xe khi giao? Câu hỏi cho “nhận” Nhận từ ai? Nhận cái gì? Ai nhân? bằng cách nào? Ngày giao Ngày nhận Gia hạn Ngày trả TT Câu trả lời nhận đƣợc từ Thực thể Thuộc tính KHÁCH HÀNG HỢP ĐỒNG NHÂNVIÊN XE Số HĐ Ngày HĐ Tiền đặt Khuyến mãi Giấy tờ GL Câu trả lời nhận đƣợc từ Thực thể Thuộc tính KHÁCH HÀNG XE NHÂN VIÊN Số BBG Ngày giao Km đi Xăng đi Trạng thái đi Câu trả lời nhận đƣợc từ Thực thể Thuộc tính KHÁCH HÀNG XE NHÂN VIÊN Số BBN 22 Ngày nhận Km về Xăng về Trạng thái về khi nào? Số km khi nhận là bao nhiêu? Số xăng khi nhận là bao nhiêu? Tình hình xe khi nhận? Câu hỏi cho “lập BBSC” Câu trả lời nhận đƣợc từ Thực thể Thuộc tính Ai lập BBSC NHÂNVIÊN Cho ai? KHÁCH HÀNG Loại sự cố gì? SỰ CỐ Sự cố cho cái gì? XE bằng cách nào? Số BBSC khi nào? Ngày SC Vì sao? Nội dung SC Phạt bồi thƣờng sự cố bao nhiêu? Tiền phạt Câu hỏi cho “thanh toán” Ai thanh toán? Thanh toán với ai? Thanh toán vì cái gì? bằng cách nào? khi nào? Trên cơ sở nào? Bao nhiêu? Câu trả lời nhận đƣợc từ Thực thể Thuộc tính KHÁCH HÀNG NHÂN VIÊN XE Số HĐTT Ngày TT Số HĐ, số BBSC Tiền TT b. Các mối quan hệ phụ thuộc - Mối quan hệ THUỘC giữa XE và LOẠI XE 23 2.2.3. Biểu đồ của mô hình dữ liệu quan niệm SốHĐ NgàyHĐ NộiDungHĐ MãHĐ KÝ KẾT HĐ HỢP ĐỒNG SốLượng LoạiHĐ KhuyếnMãi ĐịaChỉ GPLX TênKH GiấyTờGL MãKH LOẠI XE KHÁCH HÀNG TênLoại MôTả TiềnĐặt SốĐTKH MãLoại CMTKH NgàyĐặt NgàyĐK THUỘC ĐĂNG KÝ THUÊ Giá KmĐi MôTảTT GIAOXE XE XăngĐi NgàyNhận NgàyGiao PhíQuáKm SốBBN Hủy SốBBG TrạngThái SốXe TênXe SốNgày TrangTháiĐi PhíXăng LẬP LICH KmVề NgàyGiaoTT GiaHạn MãNV CMTNV NHẬNXE XăngVề TênNV NHÂN VIÊN TrạngTháiVề NgàyTT SốĐTNV sốHĐTT THANHTOÁN/ BỒI THƢỜNG TiềnTT LýDo HồSơKèm sốBBSC ngàyBBSC LẬP BIÊN BẢN SỰ CỐ NộiDungSC MãSC TiềnPhạt SỰ CỐ TênSC Hình 2.6. Mô hình dữ liệu ER 24 VaiTrò Chƣơng 3 THIẾT KẾ HỆ THỐNG 3.1. Thiết kế cơ sở dữ liệu 3.1.1. Chuyển mô hình ER sang mô hình quan hệ 3.1.1.1. Biểu diễn các thực thể thành quan hệ 1. Thực thể HỢPĐỒNG: → HỢPĐỒNG (MãHĐ, LoạiHĐ, NộiDungHĐ) (1) 2. Thực thể KHÁCH HÀNG: →KHÁCH HÀNG (MãKH, TênKH, CMTKH, ĐịaChỉ, SốĐTKH, GPLX) (2) 3. Thực thể NHÂN VIÊN: → NHÂN VIÊN (MãNV, tênNV, VaiTrò, CMTNV, SốĐTNV) (3) 4. Thực thể LOẠI XE → LOAIXE (MãLoại, TênLoại, SốLượng, MôTả) (4) 5. Thực thể XE: → XE (SốXe, MãLoại, TênXe, PhíXăng, PhíQuáKm, Giá, MôTảTT, TrạngThái) (5) 6. Thực thể SỰ CỐ: → SỰ CỐ (MãSC, TênSC) (6) 3.1.1.2. Biểu diễn các mối quan hệ thành quan hệ 7. Mối quan hệ < KÝ KẾT HĐ > : → BẢNHỢPĐỒNG (SốHĐ, MãHĐ, SốXe, MãKH, MãNV, NgàyHĐ, TiềnĐặt, KhuyếnMãi, GiấyTờGL) (7) 8. Mối quan hệ < ĐĂNG KÝ THUÊ>: → LỊCHCHỜTHUÊ (STT, MãKH, MãLoại, NgàyĐK, NgàyĐặt, SốNgày, Hủy) (8) 9. Mối quan hệ <LẬP LỊCH>: → LỊCHTHUÊ (SốXe, MãKH, NgàyGiao, NgàyTrả, NgàyGiaoTT, GiaHan) (9) 10. Mối quan hệ <GIAOXE>: → BIÊNBẢNGIAO ( sốBBG, SốXe, MãKH MãNV, NgàyGiao, KmĐi, XăngĐi, TrạngThái Đi) (10) 11. Mối quan hệ <NHÂNXE>: → BIÊNBẢNNHẬN(sốBBN, SốXe, MãKH MãNV, NgàyNhận, KmVề, XăngVề, TrạngTháiVề) (11) 12. Mối quan hệ <LẬP BB SỰCỐ>: → BIÊNBẢNSỰCỐ (sốBBSC, MãSC, SốXe, MãKH, NgàyBBSC, NộiDungSC, TiềnPhạt, MãNV ) (12) 13. Mối quan hệ <THANHTOÁN>: → HÓAĐƠNTT (SốHĐTT, SốHĐ, MãNV, MãKH, NgàyTT, LýDo, HồSơKèm, TiềnTT) (13) 3.1.1.3. Chuẩn hóa các quan hệ nhận được Tất cả các qua hệ trên đã là chuẩn 3 nên không cần chuẩn hóa. 26 3.1.1.4. Mô hình dữ liệu quan hệ HỢP ĐỒNG (1) #MãHĐ LoạiHĐ NộiDungHĐ BẢN HĐ (7) #SốHĐ MãHĐ SốXe MãKH MãNV NgàyHĐ TiềnĐặt KhuyếnMãi GiấytờGL BB GIAO (10) #SốBBG SốXe MãKH MãNV NgàyGiao KmĐi XăngĐi TrạngTháiĐi LOẠI XE (4) #Mãloại TênLoại SốLượng MôTả BB NHẬN (11) #MãNV TênNV VaiTrò CMTNV Số ĐTNV KHÁCH (2) HÓA ĐƠN TT (13) #SốHĐTT SốHĐ MãKH MãNV NgàyTT LýDo HồSơKèm NHÂN VIÊN (3) #MãKH TênKH Địachỉ SốĐTKH CMTKH GPLX XE (5) #SốXe MãLoại TênXe Giá PhíXăng PhíQuáKm MôTảTT TrạngThái LỊCH CHỜ (8) LỊCH THUÊ (9) #STT MãKH MãLoại NgàyĐK NgàyThuê SốNgày Hủy #SốXe #MãKH NgàyGiao NgàyNhận NgàygiaoTT GiaHạn Hình 3.1. Biểu đồ liên kết của Mô hình dữ liệu quan hệ 27 #SốBBN SốXe MãKH MãNV NgàyNhận KmVề XăngVề TrạngTháiVề BB SỰ CỐ (12) #SốBBSC SốXe MãKH MãNV MãSC NgàyBBSC NộiDungSC TiềnPhạt SỰ CỐ (6) #MãSC TênSC 3.1.2. Thiết kế cơ sở dữ liệu vật lý 3.1.2.1. Phân tích và phi chuẩn các quan hệ a. Quan hệ HỢPĐỒNG chỉ có một thuộc tính chính là NộiDungHĐ, nên có thể gộp vào quan hệ BẢNHỢPĐỒNG và lấy tên là HỢPĐỒNG không làm mất tính chuẩn 3 của quan hệ mới nhận đƣợc: HỢPĐỒNG (SốHĐ, LoạiHĐ, NgàyHĐ, NộiDungHĐ, TiềnĐặt, KhuyếnMãi, GiấyTờGL, SốXe, MãKH, MãNV)(7’) Làm như vậy ta giảm được một quan hệ. b. Quan hệ SỰCỐ chỉ có một thuộc tính chính là TênSC, nên có thể gộp vào quan hệ BIÊNBẢNSỰCỐ và lấy tên là SỰCỐ không làm mất tính chuẩn 3 của quan hệ mới nhận được: SỰCỐ( sốBBSC, SốXe, MãKH, MãNV, TênSC, NgàyBBSC, NộiDungSC, TiềnPhạt)(12’) Làm nhƣ vậy ta giảm được một quan hệ. c. Hai quan hệ BIÊNBẢNGIAO và BIÊNBẢNNHẬN có cùng cấu trúc ta có thể gộp làm một để được quan hệ BIÊNBẢNGN vẫn là chuẩn 3: BIÊNBẢNGN (SốBBGN, SốXe, MãKH, MãNV, NgàyGiao, KmĐi, XăngĐi, TrạngTháiĐi, NgàyNhận, KmVề, XăngVề, TrạngTháiVề) (10’) Nhƣ vậy ta chỉ còn lại 10 quan hệ (2), (3), (4), (5), (7’), (8), (9), (10’), (12’) (13) 3.1.2.2. Tạo các bảng quan hệ Khi chọn hệ quản trị cơ sở dữ liệu SQL để tổ chức lƣu trữ dữ liệu, ta thiết kế được các bảng dữ liệu tƣơng ứng với hệ quản trị này như sau: a. Table KHACHHANG Thuộc tính MaKH TenKH DiaChi DienThoaiKH CMTKH GPLX Kiểu dữ liệu Ký tự Ký tự Ký tự Số Số Ký tự Cỡ 10 50 100 12 12 10 28 Định dạng Chữ hoa + số Chữ Chữ + số Số nguyên Số nguyên Chữ hoa + số Ràng buộc Khóa chính b. Table NHANVIEN Thuộc tính MaNV TenNV VaiTro CMTNV DienThoaiNV Kiểu dữ liệu Ký tự Ký tự Ký tự Số Số Cỡ 10 50 100 12 12 Định dạng Chữ hoa + số Chữ Chữ + số Số nguyên Số nguyên Ràng buộc Khóa chính Kiểu dữ liệu Ký tự Ký tự Số Ký tự Cỡ 10 50 3 1000 Định dạng Chữ hoa + số Ràng buộc Khóa chính Kiểu dữ liệu Ký tự Ký tự Ký tự Số Số Số Ký tự Số Cỡ 10 10 50 10 10 10 100 1 Định dạng Chữ hoa + số Chữ hoa + số Chữ Số nguyên Số nguyên Số nguyên Chữ Ràng buộc Khóa chính Khóa ngoài Kiểu dữ liệu Ký tự Ký tự Ký tự Ký tự Datetime Ký tự Số Số Ký tự Cỡ 10 10 10 10 8 1000 10 10 50 Định dạng HD + số Chữ hoa + số Chữ hoa + số Chữ hoa + số hh:dd/mm/yy Ràng buộc Khóa chính Khóa ngoài Khóa ngoài Khóa ngoài c. Table LOAIXE Thuộc tính MaLoai TenLoai SoLuong MoTa Số nguyên d. Table XE Thuộc tính SoXe MaLoai TenXe PhiXang PhíQuaKm DonGia MoTaTT TrangThai e. Table HOPDONG Thuộc tính SoHD SoXe MaKH MaNV NgayHD NoiDungHD TienDat KhuyenMai GiayToGuiLai 29 Số nguyên Số nguyên f. Table LICHCHOTHUE Thuộc tính STT MaKH MaLoai NgayDK NgayThue SoNgayThue Huy Kiểu dữ liệu Số Ký tự Ký tự Datetime Datetime Số int Cỡ 10 10 10 8 8 3 1 Định dạng Số nguyên Chữ hoa + số Chữ hoa + số hh:dd/mm/yy hh:dd/mm/yy Số nguyên 0 Ràng buộc Kiểu dữ liệu Ký tự Ký tự Datetime Datetime Datetime Datetime Cỡ 10 10 8 8 8 8 Định dạng Chữ hoa + số Chữ hoa + số hh:dd/mm/yy hh:dd/mm/yy hh:dd/mm/yy hh:dd/mm/yy Ràng buộc Khóa ngoài Khóa ngoài Kiểu dữ liệu Số Ký tự Ký tự Ký tự Datetime Số Ký tự Ký tự Datetime Số Ký tự Ký tự Cỡ 10 10 10 10 8 10 20 1 8 10 20 Định dạng Số nguyên Chữ hoa + số Chữ hoa + số Chữ hoa + số hh:dd/mm/yy Số nguyên Chữ + số Chữ hh:dd/mm/yy Số nguyên Chữ + số Chữ Ràng buộc Khóa chính Khóa ngoài Khóa ngoài Khóa ngoài Khóa ngoài Khóa ngoài g. Table LICHTHUE Thuộc tính SoXe MaKH NgayGiao NgayTra NgayGiaTT GiaHan h. Table BIENBANGN Thuộc tính SoBBGN SoXe MaKH MaNV NgayGiao KmDi XangDi TrangThaiDi NgayNhan KmVe XangVe TrangThaiVe 30 i. Table SUCO Thuộc tính SoBBSC SoXe MaKH TenSC NgayBBSC NoiDungSC TienPhat MaNV Kiểu dữ liệu Số Ký tự Ký tự Ký tự Datetime Ký tự Số Ký tự Cỡ 10 10 10 50 8 1000 10 10 Định dạng Số nguyên Chữ hoa + số Chữ hoa + số Chữ + số hh:dd/mm/yy Kiểu dữ liệu Số Ký tự Ký tự Datetime Ký tự Ký tự Số Cỡ 10 10 10 8 30 30 10 Định dạng Số nguyên Chữ hoa + số Chữ hoa + số hh:dd/mm/yy Chữ Chữ + số Số nguyên Số nguyên Chữ hoa + số Ràng buộc Khóa chính Khóa ngoài Khóa ngoài Khóa ngoài k. Table THANHTOAN Thuộc tính SoHDTT SoHD MaNV NgayTT LyDo HoSoKem TienTT 31 Ràng buộc Khóa chính Khóa ngoài Khóa ngoài 4. DATABASE 4.1 REATE DATABASE LIBRARY_MANAGEMENT_SYSTEM: --create database CREATE DATABASE CAR_RENTAL_SYSTEM 4.2 CREATE TABLE: -- Create the KHACHHANG table CREATE TABLE KHACHHANG ( MaKH CHAR(10) PRIMARY KEY, TenKH VARCHAR(50), DiaChi VARCHAR(100), DienThoaiKH INT, CMTKH INT, GPLX CHAR(10) ); -- Create the NHANVIEN table CREATE TABLE NHANVIEN ( MaNV CHAR(10) PRIMARY KEY, TenNV VARCHAR(50), VaiTro VARCHAR(100), CMTNV INT, DienThoaiNV INT ); 32 --Create the Tram table CREATE TABLE Tram ( MaTram CHAR(10) PRIMARY KEY, TenTram VARCHAR(50), DiaChi VARCHAR(100) ); -- Create the LOAIXE table CREATE TABLE LOAIXE ( MaLoai CHAR(10) PRIMARY KEY, TenLoai VARCHAR(50), SoLuong INT, MoTa VARCHAR(1000) ); -- Create the XE table CREATE TABLE XE ( SoXe CHAR(10) PRIMARY KEY, MaLoai CHAR(10), TenXe VARCHAR(50), PhiXang INT, PhíQuaKm INT, 33 DonGia INT, MoTaTT VARCHAR(100), TrangThai INT, foreign key (MaLoai) references LOAIXE(MaLoai), ); -- Create the HOPDONG table CREATE TABLE HOPDONG ( SoHD CHAR(10) PRIMARY KEY, SoXe CHAR(10), MaKH CHAR(10), MaNV CHAR(10), MaTramNhanXe CHAR(10), MaTramTraXe CHAR(10), NgayHD DATETIME, NoiDungHD NVARCHAR(1000), TienDat INT, KhuyenMai INT, GiayToGuiLai NVARCHAR(50), foreign key (SoXe) references XE(SoXe), foreign key (MaKH) references KHACHHANG(MaKH), foreign key (MaNV) references NHANVIEN(MaNV), foreign key (MaTramNhanXe) references Tram(MaTram), foreign key (MaTramTraXe) references Tram(MaTram), ); -- Create the LICHCHOTHUE table CREATE TABLE LICHCHOTHUE ( STT INT PRIMARY KEY, MaKH CHAR(10), MaLoai CHAR(10), NgayDK DATETIME, NgayThue DATETIME, SoNgayThue INT, Huy INT, foreign key (MaKH) references KHACHHANG(MaKH), foreign key (MaLoai) references LOAIXE(MaLoai), ); 34 -- Create the LICHTHUE table CREATE TABLE LICHTHUE ( SoXe CHAR(10), MaKH CHAR(10), NgayGiao DATETIME, NgayTra DATETIME, NgayGiaTT DATETIME, GiaHan DATETIME, foreign key (SoXe) references XE(SoXe), foreign key (MaKH) references KHACHHANG(MaKH), ); -- Create the BIENBANGN table CREATE TABLE BIENBANGN ( SoBBGN INT PRIMARY KEY, SoXe CHAR(10), MaKH CHAR(10), MaNV CHAR(10), NgayGiao DATETIME, KmDi INT, XangDi VARCHAR(20), TrangThaiDi VARCHAR(1), NgayNhan DATETIME, KmVe INT, XangVe VARCHAR(20), TrangThaiVe VARCHAR(1), foreign key (SoXe) references XE(SoXe), foreign key (MaKH) references KHACHHANG(MaKH), foreign key (MaNV) references NHANVIEN(MaNV), ); 35 -- Create the SUCO table CREATE TABLE SUCO ( SoBBSC INT PRIMARY KEY, SoXe CHAR(10), MaKH CHAR(10), TenSC NVARCHAR(50), NgayBBSC DATETIME, NoiDungSC NVARCHAR(1000), TienPhat INT, MaNV CHAR(10), foreign key (SoXe) references XE(SoXe), foreign key (MaKH) references KHACHHANG(MaKH), foreign key (MaNV) references NHANVIEN(MaNV), ); -- Create the THANHTOAN table CREATE TABLE THANHTOAN ( SoHDTT INT PRIMARY KEY, SoHD CHAR(10), MaNV CHAR(10), NgayTT DATETIME, LyDo NVARCHAR(30), HoSoKem NVARCHAR(30), TienTT INT, foreign key (SoHD) references HOPDONG(SoHD), foreign key (MaNV) references NHANVIEN(MaNV), ); 36 4.3 -- Add foreign key constraint to HOPDONG table ALTER TABLE HOPDONG ADD CONSTRAINT FK_XE_HOPDONG FOREIGN KEY (SoXe) REFERENCES XE(SoXe); -- Add unique constraint to LICHCHOTHUE table ALTER TABLE LICHCHOTHUE ADD CONSTRAINT UQ_MaKH_MaLoai UNIQUE (MaKH, MaLoai); -- Add check constraint to XE table ALTER TABLE XE ADD CONSTRAINT CK_TrangThai CHECK (TrangThai IN (0, 1)); -- Add unique constraint to NHANVIEN table ALTER TABLE NHANVIEN ADD CONSTRAINT UQ_CMTNV UNIQUE (CMTNV); 4.4 Write at least 2 query for each of the following requirements -- a. Query using inner join -- Truy xuất thông tin về khách hàng và xe thuê của họ SELECT KHACHHANG.TenKH, XE.TenXe, HOPDONG.NgayHD FROM KHACHHANG INNER JOIN HOPDONG ON KHACHHANG.MaKH = HOPDONG.MaKH INNER JOIN XE ON HOPDONG.SoXe = XE.SoXe; -- Another inner join query example -- Truy xuất thông tin về nhân viên quản lý hợp đồng cho thuê và vai trò tương ứng của họ SELECT NHANVIEN.TenNV, NHANVIEN.VaiTro, HOPDONG.NgayHD FROM NHANVIEN INNER JOIN HOPDONG ON NHANVIEN.MaNV = HOPDONG.MaNV; 37 -- b. Query using outer join -- Truy xuất thông tin về tất cả các phương tiện và chi tiết cho thuê của chúng (nếu có) SELECT XE.TenXe, HOPDONG.NgayHD, HOPDONG.NoiDungHD FROM XE LEFT OUTER JOIN HOPDONG ON XE.SoXe = HOPDONG.SoXe; -- Another outer join query example -- Truy xuất thông tin về tất cả các phương tiện và hồ sơ bảo dưỡng của chúng (nếu có) SELECT XE.TenXe, BIENBANGN.NgayGiao, BIENBANGN.NgayNhan FROM XE LEFT OUTER JOIN BIENBANGN ON XE.SoXe = BIENBANGN.SoXe; -- c. Using subquery in where -- Truy tìm khách hàng đã thuê xe có giá thuê lớn hơn 1.000.000 SELECT TenKH, MaKH FROM KHACHHANG WHERE MaKH IN (SELECT MaKH FROM HOPDONG WHERE TienDat > 1000000); -- Another subquery in where example -- Thu hồi xe có phí thuê cao hơn phí thuê trung bình SELECT HOPDONG.SoXe, XE.TenXe, HOPDONG.TienDat 38 FROM HOPDONG JOIN XE ON HOPDONG.SoXe = XE.SoXe WHERE HOPDONG.TienDat > (SELECT AVG(TienDat) FROM HOPDONG); -- d. Using subquery in from -- Truy xuất giá thuê trung bình của từng loại xe SELECT LoaiXe, AVG(AvgTienDat) AS AverageRentalFee FROM ( SELECT XE.SoXe, LOAIXE.TenLoai AS LoaiXe, AVG(HOPDONG.TienDat) AS AvgTienDat FROM XE LEFT JOIN HOPDONG ON XE.SoXe = HOPDONG.SoXe LEFT JOIN LOAIXE ON XE.MaLoai = LOAIXE.MaLoai -- Added join with LOAIXE GROUP BY XE.SoXe, LOAIXE.TenLoai ) AS Subquery GROUP BY LoaiXe; -- Another subquery in from example -- Truy xuất số lượng hồ sơ bảo dưỡng của từng xe SELECT XE.SoXe, XE.TenXe, COUNT(BIENBANGN.SoBBGN) AS NumberOfMaintenanceRecords FROM XE LEFT JOIN BIENBANGN ON XE.SoXe = BIENBANGN.SoXe GROUP BY XE.SoXe, XE.TenXe; -- e. Query using group by and aggregate functions -- Truy xuất tổng phí thuê và phí thuê trung bình của từng khách hàng SELECT MaKH, SUM(TienDat) AS TotalRentalFee, AVG(TienDat) AS AverageRentalFee FROM HOPDONG GROUP BY MaKH; 39 -- Another group by and aggregate functions example -- Truy xuất tổng số ngày thuê của từng loại xe SELECT LOAIXE.TenLoai AS VehicleType, SUM(LICHCHOTHUE.SoNgayThue) AS TotalRentedDays FROM LOAIXE LEFT JOIN LICHCHOTHUE ON LOAIXE.MaLoai = LICHCHOTHUE.MaLoai GROUP BY LOAIXE.TenLoai; -- Example of a function to calculate the total rental fee for a customer CREATE FUNCTION GetTotalRentalFeeForCustomer(@CustomerID CHAR(10)) RETURNS INT AS BEGIN DECLARE @TotalFee INT; SELECT @TotalFee = SUM(TienDat) FROM HOPDONG WHERE MaKH = @CustomerID; -- If there is no rental fee for the customer, set @TotalFee to 0 IF (@TotalFee IS NULL) SET @TotalFee = 0; RETURN @TotalFee; END; -- Example of a trigger to update the TrangThai (Status) column in XE table when a rental contract is added or updated CREATE TRIGGER UpdateTrangThaiXe ON HOPDONG AFTER INSERT, UPDATE AS BEGIN UPDATE XE SET TrangThai = 0 WHERE SoXe IN (SELECT SoXe FROM inserted WHERE TrangThai = 1); END; -- Example of a procedure to generate a rental contract for a customer 40 CREATE PROCEDURE GenerateRentalContract @CustomerID CHAR(10), @VehicleID CHAR(10), @RentalDate DATETIME, @RentalDuration INT, @RentalPurpose VARCHAR(1000) AS BEGIN INSERT INTO HOPDONG (SoXe, MaKH, NgayHD, NoiDungHD) VALUES (@VehicleID, @CustomerID, @RentalDate, @RentalPurpose); END; 41 THE END 42