Nhóm tác giả đã lựa chọn bối cảnh “Xây dựng mô hình cơ sở dữ liệu về quản lý việc mua bán vé tàu hỏa trên nền tảng trực tuyến” để làm đề tài, do nhận thấy tầm quan trọng của hệ thống quả
LÝ DO CHỌN ĐỀ TÀ
Công nghệ thông tin đã và đang trở thành một phần không thể thiếu trong mọi hoạt động sản xuất, vận hành và đời sống sinh hoạt của con người Đây là một công cụ hữu hiệu có khả năng hiện thực hóa mọi ý tưởng về lao động trí óc và sức lực của con người
Mọi công nghệ đều vận hành dựa trên cơ sở dữ liệu Dữ liệu ảnh hưởng đến cuộc sống hàng ngày của con người ở quy mô lớn Cửa hàng tạp hóa, ngân hàng, nhà hàng, trang web mua sắm trực tuyến, bệnh viện, cửa hàng quần áo, tất cả đều sử dụng cơ sở dữ liệu để theo dõi khách hàng, hàng tồn kho, nhân viên, thông tin kế toán và bất kỳ thứ gì có thể được nhận dạng là thông tin Cơ sở dữ liệu tồn tại trong nhiều khía cạnh của cuộc sống và cho phép thông tin được lưu trữ và sử dụng nhanh chóng, dễ dàng
Nhóm tác giả đã lựa chọn bối cảnh “Xây dựng mô hình cơ sở dữ liệu về quản lý việc mua bán vé tàu hỏa trên nền tảng trực tuyến” để làm đề tài, do nhận thấy tầm quan trọng của hệ thống quản lý dữ liệu thông minh đối với sự vận hành của loại hình kinh doanh dịch vụ vận tải đường sắt - một dịch vụ rất phổ biến với đời sống con người và yêu cầu cụ thể về khả năng quản lý hiệu quả một lượng lớn thông tin của loại hình hệ thống này
Thông qua việc trực tiếp xây dựng cơ sở dữ liệu cho bối cảnh, nhóm tác giả cũng muốn khẳng định tầm quan trọng của cơ sở dữ liệu nói riêng và công nghệ thông tin nói chung trong đời sống con người với những tiềm năng giải phóng sức lao động của con người vì không phải thực hiện thủ công những thao tác mà các hệ thống quản lý cơ sở dữ liệu có thể thực hiện
Too long to read on your phone? Save to read later on your computerSave to a Studylist
THIẾT KẾ CƠ SỞ DỮ LIÊCU
Quy trình hệ thống
Một hệ thống bán vé tàu sẽ ghi nhận lại thông tin của mỗi hành khách sau mỗi lần đặt vé tàu như sau:
Mỗi khi thực hiện đăng ký với hệ thống sẽ được cung cấp một tài khoản cá nhân với ID tài khoản là duy nhất, cùng với việc cung cấp những thông tin gồm: họ tên hành khách, tuổi, giới tính, thông tin liên lạc (số điện thoại, email) Với những lần đăng nhập tiếp theo, hành khách chỉ cần nhập mã ID để truy cập vào tài khoản
Mỗi hành khách sẽ được đặt nhiều vé và mỗi vé chỉ được sở hữu bởi một hành khách Thông tin về vé bao gồm: mã vé, loại vé, giá vé, thời gian đi, trạm đón, trạm dừng và mã tàu mà vé có hiệu lực Mỗi mã vé là duy nhất và chia thành 2 loại vé (phổ thông và vé VIP) Giá vé của từng loại vé sẽ khác nhau, cụ thể: với loại vé phổ thông sẽ đồng loạt có giá tiền là 100.000 VND và với loại vé VIP, giá tiền sẽ đắt hơn 50% so với giá vé phổ thông
Sau khi hoàn tất việc đăng ký, hành khách thực hiện thanh toán Hành khách có thể lựa chọn thanh toán ngay lập tức hoặc thanh toán sau, tuy nhiên việc thanh toán sau phải tuân theo thời gian thanh toán quy định của hệ thống (thời gian thanh toán không được vượt quá 24 giờ kể từ thời gian đặt vé được ghi nhận) Sau khi ghi nhận đã thanh toán thành công, hành khách sẽ nhận được một phiếu đăng ký hoàn chỉnh nhằm nắm được thông tin về vé mình sở hữu, mã phiếu đăng ký của mỗi bản phiếu đăng ký là duy nhất và gồm các thông tin: họ tên hành khách, thời gian đặt vé, số lượng vé, mã hóa đơn của hóa đơn sau khi hành khách đã thực hiện thanh toán thành công, ID của tài khoản đặt vé và mã tàu mà hành khách sẽ di chuyển Khách hàng có thể đặt vé nhiều lần trong ngày, khi đó, số lượng vé (số lượng vé một hành khách đặt không được quá 10 vé) và tổng số tiền đã thanh toán sẽ được ghi nhận và gửi cho hành khách tương ứng.
Trên mỗi vé tàu sẽ có đúng một mã tàu mà hành khách sẽ di chuyển, và mỗi tàu sẽ gồm nhiều vé tàu Mã tàu là duy nhất đối với mỗi tàu, bên cạnh đó, hệ thống sẽ cung cấp thêm những thông tin liên quan đến tàu như sau: thời gian khởi hành, số ghế còn trống, tên trạm nơi tàu xuất phát và tên trạm tàu sẽ dừng lại Vé tàu chỉ được chấp nhận khi trạm đón và trạm dừng trên vé mà hành khách đã đặt đúng với lộ trình mà tàu đó đi qua.
Mỗi tàu sẽ xuất phát từ một trạm, bên cạnh đó, mỗi trạm sẽ đóng vai trò vừa là trạm đón khách, vừa là trạm dừng để hoàn thành chuyến đi của hành khách, thông tin của trạm gồm: mã trạm và tên trạm, trong đó mã trạm là duy nhất.
Mỗi tàu sẽ được phụ trách bởi ba nhân viên (chỉ tính trong buồng lái tàu), trong đó gồm: một lái chính và hai phụ lái Với mã nhân viên là duy nhất, những thông tin bổ sung gồm: họ tên nhân viên, tuổi, giới tính và mức lương Lái chính sẽ đảm nhận trách nhiệm cầm lái trong suốt quá trình tàu di chuyển và cần phải cung cấp thêm thông tin về số năm kinh nghiệm bản thân và số năm kinh nghiệm tối thiểu đối với lái chính là 5 năm, tuy nhiên với những trường hợp bất khả kháng, nhiệm vụ này sẽ được giao lại cho một trong hai phụ lái, và khi đó cần phải đề cập rõ lý do vì sao cần đến sự thay thế.
Song song với việc thanh toán ngay lập tức, hệ thống cho phép hành khách thanh toán trực tuyến trong vòng 24 giờ tính từ thời gian đặt vé, sau khi thanh toán, hành khách sẽ nhận được hóa đơn, bao gồm mã hóa đơn là duy nhất và ghi nhận thêm những thông tin: họ tên hành khách, số tiền thanh toán, phương thức thanh toán (VNPay hoặc MoMo) và thời gian thanh toán Sau khi hoàn thành xong bước thanh toán, hành khách sẽ được nhận một mã QR trên phiếu đăng ký với chức năng như vé để sử dụng khi lên tàu.
Mô tả dữ liệu
STT ĐỐI TƯỢNG THUỘC TÍNH KIỂU DỮ LIỆU DIỄN GIẢI
ID hoten tuoi gioitinh sodienthoai email
CHAR(5) NVARCHAR(30) INT NVARCHAR(3) VARCHAR(12) VARCHAR(20)
Quản lý thông tin tài khoản khách hàng trên hệ thống bán vé
Quản lý thông tin tàu hỏa trên hệ thống
Quản lý thông tin các trạm tàu hỏa trên hệ thống
4 NHAN_VIEN manhanvien hotennv tuoi gioitinh mucluong
CHAR(5) NVARCHAR(30) INT NVARCHAR(3) INT
Quản lý thông tin nhân viên phụ trách trên mỗi chuyến tàu hỏa
Quản lý thông tin nhân viên phụ trách trên mỗi chuyến tàu hỏa
Quản lý thông tin nhân viên phụ trách trên mỗi chuyến tàu hỏa
7 VE mave thoigiandi vitrighe loaive giave
CHAR(3) DATETIME VARCHAR(5) VARCHAR(3) INT
Quản lý thông tin về vé bán ra trên hệ thống bán vé
Quản lý thông tin tổng hợp sau khi thực hiện đặt vé
9 HOA_DON mahoadon thoigianthanhtoan phuongthucthanhtoan
Quản lý thông tin ghi nhận hóa đơn sau khi thanh toán thành công trên hệ thống
Mô hình hóa dữ liệu ERD
Các lược đồ quan hệ RD
Nếu không có từ khóa NULL theo sau kiểu dữ liệu thì các thuộc tính sẽ mang đặc tính
TAI_KHOAN(ID, hoten, tuoi, gioitinh, sodienthoai, email)
Mô tả: Lược đồ quan hệ TAI_KHOAN được dùng để lưu trữ thông tin về tài khoản hành khách trên hệ thống bán vé
ID CHAR(5) PRIMARY KEY: ID của tài khoản hành khách hoten NVARCHAR(30): họ và tên của hành khách thực hiện đăng kí tài khoản tuoi INT: tuổi của hành khách thực hiện đăng kí tài khoản gioitinh NVARCHAR(3) CHECK (gioitinh IN (N’Nam’, N’Nữ’)) sodienthoai VARCHAR(12): số điện thoại của hành khách đăng ký tài khoản email VARCHAR(30): email của hành khách đăng ký tài khoản
TAU(matau, thoigiankhoihanh, soluongghetrong, matramkhoihanh, matramdung)
Mô tả: Lược đồ quan hệ TAU được dùng để lưu trữ thông tin về các chuyến tàu trên hệ thống bán vé matau CHAR(3) PRIMARY KEY: mã của chuyến tàu trên hệ thống bán vé thoigiankhoihanh DATETIME: thời gian khởi hành chuyến tàu soluongghetrong INT: số lượng ghế trống trên tàu matramkhoihanh CHAR(2): mã trạm bắt đầu hành trình của tàu matramdung CHAR(2): mã trạm kết thúc hành trình của tàu
Mô tả: Lược đồ quan hệ TRAM_TAU được dùng để lưu trữ thông tin về trạm tàu, trạm
DE đón, trạm dừng trên hệ thống bán vé matram CHAR(2) PRIMARY KEY: mã của trạm tàu trên hệ thống bán vé tentram NVARCHAR(20): tên của trạm tàu
NHAN_VIEN(manhanvien, hotennv, tuoi, gioitinh, matau)
Mô tả: Lược đồ quan hệ NHAN_VIEN được dùng để lưu trữ thông tin về các nhân viên phụ trách chuyến tàu manhanvien CHAR(5) PRIMARY KEY: mã nhân viên phụ trách chuyến tàu hotennv NVARCHAR(30): họ và tên nhân viên tuoi INT: tuổi của nhân viên gioitinh NVARCHAR(3) CHECK (gioitinh IN (N’Nam’, N’Nữ’)): giới tính của nhân viên matau CHAR(3): mã của chuyến tàu trên hệ thống bán vé
LAI_CHINH(manhanvien, sonamkinhnghiem, matau)
Mô tả: Lược đồ quan hệ LAI_CHINH được dùng để lưu trữ thông tin về nhân viên phụ trách lái chuyến tàu trên hệ thống bán vé manhanvien CHAR(5) PRIMARY KEY:mã nhân viên phụ trách chuyến tàu sonamkinhnghiem INT DEFAULT(5): số năm kinh nghiệm lái tàu matau CHAR(3): mã của chuyến tàu trên hệ thống bán vé
PHU_LAI(manhanvien, lydothay, matau)
Mô tả: Lược đồ quan hệ PHU_LAI được dùng để lưu trữ thông tin về nhân viên phụ lái
DE hỗ trợ lái chính trên hệ thống bán vé manhanvien CHAR(5) PRIMARY KEY: mã nhân viên phụ trách chuyến tàu lydothay NVARCHAR(100): lý do phụ lái vào thay lái chính matau CHAR(3):mã của chuyến tàu trên hệ thống bán vé
VE(mave, thoigiandi, vitrighe, loaive, giave, ID, maphieu, matau, matramdon, matramtra)
Mô tả: Lược đồ quan hệ VE được dùng để lưu trữ thông tin về vé được bán ra trên hệ thống bán vé mave CHAR(3) PRIMARY KEY : mã số của vé thoigiandi DATETIME : thời gian đi của tàu vitrighe VARCHAR(5): vị trí ghế của hành khách loaive VARCHAR(3) CHECK (loaive IN (‘PT’, ‘VIP’)) : loại vé hành khách đăng ký giave INT : giá vé
ID CHAR(5) : mã định danh của khách hàng maphieu INT : mã phiếu của bản chi tiết đăng ký matau CHAR(3): mã của chuyến tàu trên hệ thống bán vé matramdon CHAR(2): mã trạm đón khách matramtra CHAR(2): mã trạm trả khách
PHIEU_DANGKY(maphieu, thoigiandatve, soluongve, mahoadon, ID, matau)
Mô tả: Lược đồ quan hệ PHIEU_DANGKY được dùng để lưu trữ thông tin tổng hợp sau khi hành khách hoàn thành xong bước đăng ký vé maphieu INT PRIMARY KEY : mã phiếu của bản chi tiết đăng ký thoigiandatve DATETIME: ngày hành khách đặt vé
DE soluongve INT : số lượng vé hành khách đã đặt mahoadon CHAR(5) : mã số của hóa đơn
ID CHAR(5) : mã định danh của hành khách matau CHAR(5): mã tàu trên vé mà hành khách khách đã chọn
HOA_DON(mahoadon, thoigianthanhtoan, phuongthucthanhtoan, ID)
Mô tả: Lược đồ quan hệ HOA_DON được dùng để lưu trữ thông tin tổng hợp sau khi hành khách hoàn thành việc thanh toán cho phiếu đăng ký vé mahoadon CHAR(5) PRIMARY KEY : mã số của hóa đơn thoigianthanhtoan DATETIME: ngày thanh toán phuongthucthanhtoan VARCHAR(5) : phương thức thanh toán
ID CHAR(5) : mã định danh của hành khách
Mô tả dữ liệu phụ thuộc khóa chính, khóa ngoại
RÀNG BUỘC TOÀN VẸN VÀ CHUẨN HÓA
Ràng buộc toàn vẹn
3.1.1 Ràng buộc toàn vẹn dữ liệu
Mỗi khi thực hiện đăng ký với hệ thống sẽ được cung cấp một tài khoản cá nhân với ID tài khoản là duy nhất.
Ngữ cảnh: TAI_KHOAN x,y TAI_KHOAN: x.ID y.ID
Ràng buộc Thêm Xóa Sửa
Mỗi nhân viên có mã nhân viên riêng biệt và không trùng nhau.
Ngữ cảnh: NHAN_VIEN x,y NHAN_VIEN: x.manhanvien y.manhanvien
Ràng buộc Thêm Xóa Sửa
Mã trạm là duy nhất.
Ngữ cảnh: TRAM_TAU x,y TRAM_TAU: x.matram y.matram
Ràng buộc Thêm Xóa Sửa
Mã tàu là duy nhất đối với mỗi tàu.
Ngữ cảnh: TAU x,y TAU: x.matau y.matau
Ràng buộc Thêm Xóa Sửa
Thuộc tính ID của quan hệ VE được tham chiếu đến ID của quan hệ TAI_KHOAN. Ngữ cảnh: TAI_KHOAN, VE x VE, y TAI_KHOAN: x.ID = y.ID
Ràng buộc Thêm Xóa Sửa
Thuộc tính ID của quan hệ HOA_DON được tham chiếu đến ID của quan hệ TAI_KHOAN.
Ngữ cảnh: HOA_DON, TAI_KHOAN x HOA_DON, y TAI_KHOAN: x.ID = y.ID
Ràng buộc Thêm Xóa Sửa
Thuộc tính ID của quan hệ PHIEU_DANGKY được tham chiếu đến ID của quan. Ngữ cảnh: PHIEU_DANGKY, TAI_KHOAN x PHIEU_DANGKY, y TAI_KHOAN: x.ID = y.ID
Ràng buộc Thêm Xóa Sửa
Thuộc tính mahoadon của quan hệ PHIEU_ DANGKY được tham chiếu đến mahoadon của quan hệ HOA_DON.
Ngữ cảnh: PHIEU_DANGKY, HOA_DON x PHIEU_DANGKY, y HOA_DON: x.mahoadon = y.mahoadon
Ràng buộc Thêm Xóa Sửa
Thuộc tính maphieu của quan hệ VE được tham chiếu đến maphieu của quan hệ PHIEU_ DANGKY.
Ngữ cảnh: PHIEU_DANGKY, VE x VE, y PHIEU_DANGKY : x.maphieu= y.maphieu
Ràng buộc Thêm Xóa Sửa
Thuộc tính matau của quan hệ NHAN_VIEN được tham chiếu đến matau của quan hệ TAU.
Ngữ cảnh: NHAN_VIEN, TAU x NHAN_VIEN, y TAU: x.matau = y.matau
Ràng buộc Thêm Xóa Sửa
Thuộc tính matau của quan hệ VE được tham chiếu đến matau của quan hệ TAU. Ngữ cảnh: VE, TAU x VE, y TAU: x.matau = y.matau
Ràng buộc Thêm Xóa Sửa
Thuộc tính loại vé của bảng VE chỉ có giá trị ‘phổ thông’ hoặc ‘VIP’.
Ngữ cảnh: VE x VE: x.loaive {‘PT’, ‘VIP’}
Ràng buộc Thêm Xóa Sửa
Thuộc tính giới tính của bảng NHAN_VIEN chỉ nhận giá trị ‘Nam’ hoặc ‘Nữ’. Ngữ cảnh: NHAN_VIEN x NHAN_VIEN : x.gioitinh {‘Nam’, N‘Nữ’}
Ràng buộc Thêm Xóa Sửa
Thuộc tính sodienthoai của bảng TAI_KHOAN chỉ chứa giá trị số.
∀ x ∈ TAI_KHOAN: (x.sodienthoai NOT LIKE ‘%[^0-9]%’)
Ràng buộc Thêm Xóa Sửa
3.1.2 Ràng buộc toàn vẹn trên 1 quan hệ, 1 thuộc tính
Số năm kinh nghiệm tối thiểu đối với lái chính là 5 năm.
Ngữ cảnh: LAI_CHINH d LAI_CHINH: d.sonamkinhnghiem 5
Ràng buộc Thêm Xóa Sửa
Khách hàng chỉ được thực hiện đặt vé khi số lượng ghế trống vẫn còn.
Ngữ cảnh: TAU d TAU: d.soluongghetrong 0
Ràng buộc Thêm Xóa Sửa
Số lượng đặt vé của hành khách không được quá 10 vé.
Ngữ cảnh: PHIEU_DANGKY d PHIEU_DANGKY: d.soluongve e.giave = 150000
Ràng buộc Thêm Xóa Sửa
VE + loaive, giave + loaive, giave
3.1.4 Ràng buộc toàn vẹn trên 1 quan hệ, liên bộ
Trong buồng lái được phụ trách bởi ba nhân viên.
Ngữ cảnh: NHAN_VIEN a NHAN_VIEN: card( { t NHAN_VIEN | t.manhanvien = a.manhanvien } ) 3=
Ràng buộc Thêm Xóa Sửa
3.1.5 Ràng buộc toàn vẹn trên nhiều quan hệ
Hệ thống cho phép hành khách thanh toán trực tuyến trong vòng 24 giờ tính từ thời gian đặt vé.
Ngữ cảnh: HOA_DON, PHIEU_DANGKY d HOA_DON, e PHIEU_DANGKY: d.mahoadon=e.mahoadon => d.thoigianthanhtoan
Ràng buộc Thêm Xóa Sửa
HOA_DON + thoigianthanhtoan mahoadon + thoigianthanhtoan
Thời gian khởi hành của vé bằng thời gian đi của tàu.
Ngữ cảnh: VE, TAU d VE, e TAU: d.thoigiandi = e.thoigiankhoihanh d.matau = e.matau
Ràng buộc Thêm Xóa Sửa
Vé tàu chỉ được chấp nhận khi trạm đón và trạm dừng trên vé mà hành khách đã đặt đúng với lộ trình mà tàu đó đi qua.
Ngữ cảnh: VE, TAU d VE, e TAU: d.matramdon = e.matramkhoihanh d.matramtra = e.matramdung d.matau
Ràng buộc Thêm Xóa Sửa
Hành khách chỉ có thể thực hiện đặt vé thành công khi vị trí ghế được chọn vẫn còn trống.
Ngữ cảnh: VE, TAU d, e VE, x TAU: x.matau = d.matau x.matau=e.matau => d.vitrighe e.vitrighe
Ràng buộc Thêm Xóa Sửa
Mỗi nhân viên chỉ được đảm nhận một nhiệm vụ (hoặc đảm nhận vị trí lái chính hoặc đảm nhận vị trí phụ lái).
Ngữ cảnh: LAI_CHINH, PHU_LAI x LAI_CHINH, y PHU_LAI: x.manhanvien y.manhanvien
Ràng buộc Thêm Xóa Sửa
Số lượng vé được ghi nhận tại phiếu đăng ký phải phù hợp với tổng số vé mà một ID hành khách đã thực hiện đăng ký tại bước chọn vé.
Ngữ cảnh: PHIEU_DANGKY, VE c PHIEU_DANGKY, card({ d VE | d.ID = c.ID }) c.soluongve=
Ràng buộc Thêm Xóa Sửa
Số lượng ghế trống trên tàu sẽ được cập nhật mỗi khi hành khách thực hiện thao tác huỷ hoặc đặt vé.
Ngữ cảnh: VE, TAU c VE: c.soluongghetrong (mới) = c.soluongghetrong (cũ) card({ d TAU| c.matau = d.matau }) ±
Ràng buộc Thêm Xóa Sửa
Hành khách được quyền thực hiện đặt vé trước giờ tàu chạy, tuy nhiên không được đặt vé trước quá 3 tháng tính đến thời điểm tàu khởi hành.
Ngữ cảnh: PHIEU_DANGKY, TAU c PHIEU_DANGKY, d TAU : c.matau = d.matau
=> c.thoigiandatve < d.thoigiankhoihanh c.thoigiandatve + 3 (tháng) ≤ d.thoigiankhoihanh
Ràng buộc Thêm Xóa Sửa
3.1.6 Bảng tổng hợp tầm ảnh hưởng
CHINH PHU_LAI VE PHIEU_
Chuẩn hóa
TAI_KHOAN(ID, hoten, tuoi, gioitinh, sodienthoai, email)
F={ID→ hoten, tuoi, gioitinh, sodienthoai, email}
TAU(matau, thoigiankhoihanh, soluongghetrong, matramkhoihanh, matramdung)
F={ matau→thoigiankhoihanh, soluongghetrong, matramkhoihanh, matramdung}
NHAN_VIEN(manhanvien, hotennv, tuoi, gioitinh, matau)
F={manhanvien→hotennv, tuoi, gioitinh, matau}
LAI_CHINH(manhanvien, sonamkinhnghiem, matau)
PHU_LAI(manhanvien, lydothay, matau)
VE(mave, thoigiandi, vitrighe, loaive, giave, ID, maphieu, matau, matramdon, matramtra)
F={f1: mave→thoigiandi, loaive, ID, maphieu, matau, matramdon, matramtra; f2: loaive→giave}
PHIEU_DANGKY(maphieu,thoigiandatve,soluongve,mahoadon, ID)
F={maphieu→thoigiandatve,soluongve,mahoadon, ID}
HOA_DON(mahoadon, thoigianthanhtoan, phuongthucthanhtoan, ID)
HIỆN THỰC TRÊN MS SQL SERVER 21
Lệnh truy vấn dữ liệu
Cho biết thông tin tài khoản của các khách hàng có giới tính nữ.
Cho biết họ tên và số điện thoại của các hành khách đi chuyến tàu có mã tàu là “T02”.
FROM TAI_KHOAN JOIN VE ON TAI_KHOAN ID VE = ID
Cho biết thông tin của những hành khách đã thực hiện đăng ký tài khoản nhưng chưa
E thực hiện mua vé (thực hiện sắp xếp từ bé đến lớn theo độ tuổi).
WHERE TAI_KHOAN ID NOT IN (SELECT ID FROM HOA_DON )
ORDER BY TAI_KHOAN tuoi
4.1.3 Truy vấn có điều kiện
Cho biết thông tin tài khoản của những khách hàng có thời gian đặt vé từ 18/12/2023 đến 22/12/2023.
FROM TAI_KHOAN JOIN PHIEU_DANGKY ON TAI_KHOAN ID PHIEU_DANGKY = ID WHERE PHIEU_DANGKY.thoigiandatve
4.1.4 Truy vấn có tính toán
Cho biết họ tên của khách hàng đã phải thanh toán số tiền lớn nhất để đặt vé.
SELECT SUM( giave ) AS sotienphaitra TAI_KHOAN hoten ,
JOIN VE ON TAI_KHOAN ID VE = ID
JOIN PHIEU_DANGKY ON TAI_KHOAN ID PHIEU_DANGKY = ID
GROUP BY VE , ID TAI_KHOAN hoten
HAVING SUM( giave ) >= ALL ( SELECT SUM( giave )
4.1.5 Truy vấn gom nhóm (GROUP BY)
Cho biết số lượng nhân viên nam của tàu có mã tàu “T01”.
SELECT matau, COUNT (*) AS soluongnhanviennam
WHERE gioitinh = N'Nam' and matau = 'T01'
4.1.6 Truy vấn gom nhóm có điều kiện (HAVING)
Cho biết mã tàu nào có nhiều hành khách đăng ký nhất và họ tên các nhân viên phụ trách tàu đó.
SELECT VE matau , COUNT (*) soluongkhach as , NHAN_VIEN hotennv
FROM VE JOIN NHAN_VIEN ON VE matau = NHAN_VIEN matau
GROUP BY VE matau NHAN_VIEN hotennv ,
HAVING COUNT(*) >= ALL ( SELECT COUNT(*)FROM VE
4.1.7 Truy vấn có giao | hội | trừ (INTERSECT | UNION | EXCEPT)
Cho biết thông tin tài khoản của tất cả hành khách đã đặt vé có tuổi từ 20 trở xuống đi chuyến tàu T02 nhưng không thực hiện thanh toán bằng VNPAY.
FROM TAI_KHOAN JOIN VE
ON TAI_KHOAN ID VE = ID
FROM TAI_KHOAN JOIN HOA_DON
ON TAI_KHOAN ID HOA_DON = ID
Cho biết thông tin của nhân viên là lái chính của tàu “T02”
AND manhanvien IN (SELECT manhanvien FROM LAI_CHINH )
Viết TRIGGER ràng buộc dữ liệu cho các bảng
Ràng buộc 15: Số năm kinh nghiệm tối thiểu đối với lái chính là 5 năm.
CREATE TRIGGER sonamkinhnghiem ON LAI_CHINH
SELECT @sonamkinhnghiem sonamkinhnghiem = FROM inserted
PRINT (N'Không đủ điều kiện phụ trách vị trí lái chính')
Ràng buộc 16: Khách hàng chỉ được thực hiện đặt vé khi số lượng ghế trống vẫn còn.
CREATE TRIGGER soluongghetrong ON TAU
SELECT @soluongghetrong soluongghetrong = FROM inserted
PRINT (N'Không còn ghế để thực hiện thao tác đặt vé')
Ràng buộc 17: Số lượng đặt vé của hành khách không được quá 10 vé.
CREATE TRIGGER soluongdatve ON PHIEU_DANGKY
SELECT @soluongve soluongve = FROM inserted
PRINT (N'Hành khách đã đăng ký vượt quá số lượng vé cho phép')
Ràng buộc 18: Với loại vé VIP, giá tiền sẽ đắt hơn 50% so với giá vé phổ thông.
CREATE TRIGGER giatienvenam ON VE
DECLARE @giave INT , @loaive VARCHAR (3)
SELECT @giave= giave @loaive loaive , = FROM inserted
IF ( @loaive = 'VIP'and @giave 150000 )
PRINT (N'Giá vé không hợp lệ')
Ràng buộc 19: Trong buồng lái được phụ trách bởi ba nhân viên.
CREATE TRIGGER soluongnhanvien ON NHAN_VIEN
DECLARE @manhanvien CHAR ( ), 5 @matau CHAR (3)
SELECT @manhanvien manhanvien = , @matau=matau FROM inserted
PRINT (N'Số lượng nhân viên không đúng với yêu cầu')
Ràng buộc 20: Hệ thống cho phép hành khách thanh toán trực tuyến trong vòng 24 giờ tính từ thời gian đặt vé.
Trigger trên bảng HOA_DON
CREATE TRIGGER thoigian ON HOA_DON
DECLARE @thoigian DATETIME , @mahoadon CHAR ( 5 )
SELECT @thoigian =thoigianthanhtoan, @mahoadon mahoadon = FROM INSERTED IF
EXISTS (SELECT*FROM PHIEU_DANGKY DK WHERE (( DK mahoadon =
OR ( (DK mahoadon @mahoadon = AND DATEDIFF hour ( , DK thoigiandatve ,
PRINT (N'Thời gian thanh toán không hợp lệ')
Trigger trên bảng PHIEU_DANGKY
CREATE TRIGGER thoigian ON PHIEU_DANGKY
DECLARE @thoigiandatve DATETIME , @mahoadon CHAR ( ) 5
SELECT @thoigiandatve = thoigiandatve @mahoadon mahoadon , = FROM inserted
IF exists ( SELECT FROM * HOA_DON HD
WHERE (( HD mahoadon @mahoadon = AND @thoigiandatve HD > thoigianthanhtoan )
OR ( HD mahoadon @mahoadon = AND
DATEDIFF HOUR ( , @thoigiandatve HD thoigianthanhtoan 24 , ) > )))
PRINT (N'Đã xảy ra lỗi trong quá trình thực hiện thanh toán')
Ràng buộc 21: Thời gian đi của vé bằng thời gian đi của tàu.
CREATE TRIGGER thoigiandi ON VE
DECLARE @thoigiandi DATE , @thoigiankhoihanh DATE
SELECT @thoigiandi thoigiandi = FROM VE
PRINT(N'Thời gian không phù hợp')
Ràng buộc 22: Vé tàu chỉ được chấp nhận khi trạm đón và trạm dừng trên vé mà hành khách đã đặt đúng với lộ trình mà tàu đó đi qua.
CREATE TRIGGER lotrinh ON VE
DECLARE @matramdon CHAR ( ), 3 @matramtra CHAR ( ), 3 @matau CHAR (3)
SELECT @matramdon =matramdon , @matramtra = matramtra , @matau matau = FROM inserted
WHERE @matau TAU matau = AND TAU matramkhoihanh @matramdon = )
WHERE @matau=TAU.matau AND TAU matramdung @matramtra = )
PRINT (N'Lộ trình không được hỗ trợ');
Ràng buộc 23: Hành khách chỉ có thể thực hiện đặt vé thành công khi vị trí ghế được chọn vẫn còn trống.
CREATE TRIGGER ghetrong ON VE
SELECT @vitrighe= vitrighe @matau matau , = FROM inserted
WHERE VE vitrighe= @vitrighe and VE matau=@matau
PRINT(N'Thực hiện chọn chỗ không thành công do vị trí không còn trống')
Ràng buộc 24: Mỗi nhân viên chỉ được đảm nhận một nhiệm vụ (hoặc đảm nhận vị trí lái chính hoặc đảm nhận vị trí phụ lái).
- - Trigger trên bảng LAI_CHINH
CREATE TRIGGER phancong ONLAI_CHINH
SELECT @manhanvien=manhanvien FROM inserted
IF EXISTS (SELECT @manhanvien FROM PHU_LAI WHERE PHU_LAI manhanvien =
PRINT (N'Phân công không hợp lệ')
Trigger trên bảng PHU_LAI
CREATE TRIGGER phancong1 ON PHU_LAI
SELECT @manhanvien=manhanvien FROM inserted
IF exists (SELECT @manhanvien FROM LAI_CHINH WHERE
PRINT (N'Phân công không hợp lệ')
Ràng buộc 25: Số lượng vé được ghi nhận tại phiếu đăng ký phải phù hợp với tổng số vé mà một ID hành khách đã thực hiện đăng ký tại bước chọn vé.
Trigger trên bảng PHIEU_DANGKY
CREATE TRIGGER ghinhan ON PHIEU_DANGKY
DECLARE @ID CHAR ( ), 5 @soluongghinhan INT
SELECT @ID ID = FROM inserted
SELECT @soluongghinhan = ( SELECT COUNT(*)FROM inserted GROUP BY inserted ) ID
IF EXISTS ( SELECT *FROM VE JOIN PHIEU_DANGKY DK
ON VE ID @ID = WHERE ( @soluongghinhan DK soluongve ))
PRINT (N'Số lượng vé được ghi nhận không phù hợp với lượng vé đặt')
Ràng buộc 26: Số lượng ghế trống trên tàu sẽ được cập nhật mỗi khi hành khách thực hiện thao tác huỷ hoặc đặt vé.
Thực hiện cập nhật số lượng ghế trống khi hành khách thực hiện hủy vé
CREATE TRIGGER huydatve ON VE
SELECT @matau matau = FROM deleted
SET soluongghetrong soluongghetrong = + (SELECT count(*) as soluongghedat FROM deleted WHERE @matau TAU = matau )
Thực hiện cập nhật số lượng ghế trống khi hành khách thực hiện đặt vé
CREATE TRIGGER datve ON VE
SELECT @matau matau = FROM inserted
SET soluongghetrong soluongghetrong = - (SELECT count(*) as soluongghedat FROM inserted WHERE @matau TAU = matau )
Ràng buộc 27: Hành khách được quyền thực hiện đặt vé trước giờ tàu chạy, tuy nhiên không được đặt vé trước quá 3 tháng tính đến thời điểm tàu khởi hành.
Trigger về giới hạn thời gian đặt vé
CREATE TRIGGER thoigiandatve ON PHIEU_DANGKY
DECLARE @thoigiandatve DATETIME , @matau CHAR (3)
SELECT @thoigiandatve thoigiandatve = , @matau matau = FROM inserted
IF EXISTS ( SELECT *FROM TAU
WHERE (( @matau TAU matau = AND @thoigiandatve TAU > thoigiankhoihan
OR ( @matau TAU matau = AND
DATEDIFF MONTH ( , @thoigiandatve TAU thoigiankhoihanh , ) > 3 ))) BEGIN
PRINT (N'Thời gian đặt vé không phù hợp')
THÔNG TIN CƠ SỞ DỮ LIỆU
ID hoten tuoi gioitinh sodienthoai email
ABC04 Trần Thị Dung 19 Nữ 0345654323 tranthidung@g mail.com
Hồng Yến 24 Nữ 0912543987 doanthihongye n@gmail.com
Cẩm Tiên 26 Nữ 0915354987 nguyenthicamti en@gmail.com
ABC07 Trần Tử Thanh 23 Nam 0334410729 trantuthanh@g mail.com
Bảng 2 TÀU matau thoigiankhoihanh soluongghetrong matramkhoihanh matramdung
Bảng 3 TRẠM TÀU matram tentram
Bảng 4 NHÂN VIÊN manhanvien hotennv tuoi gioitinh matau
NV001 Trần Thanh Nhã 40 Nam T01
NV002 Nguyễn Thanh Tuyền 30 Nữ T01
NV003 Nguyễn Minh Quân 35 Nam T01
NV004 Nguyễn Thành Nhân 25 Nam T02
NV005 Nguyễn Minh Nhựt 40 Nam T02
NV006 Nguyễn Thiên Phước 45 Nam T02
NV007 Nguyễn Trần Thanh 43 Nam T03
NV008 Trần Minh Tiến 25 Nam T03
NV009 Bùi Phương Tiếng 30 Nam T03
NV010 Trần Minh Anh 28 Nữ T04
NV011 Nguyễn Trần Minh Quân 37 Nam T04
NV012 Đoàn Thị Hồng Thắm 30 Nữ T04
Bảng 5 LÁI CHÍNH manhanvien sonamkinhnghiem matau
Bảng 6 PHỤ LÁI manhanvien lydothay matau
NV002 Lái chính gặp vấn đề về sức khỏe T01
NV003 Thay theo lịch phân công do lịch trình dài T01
NV005 Thay theo lịch phân công do lịch trình dài T02
NV006 Thay theo lịch phân công do lịch trình dài T02
NV008 Lái chính gặp vấn đề về sức khỏe T03
NV009 Thay theo lịch phân công do lịch trình dài T03
NV011 Lái chính gặp vấn đề về sức khỏe T04
NV012 Thay theo lịch phân công do lịch trình dài T04
Bảng 7 VÉ mave thoigiandi vitrighe loaive giave ID maphieu matau matramdon matramtra
Bảng 8 PHIẾU ĐĂNG KÝ maphieu thoigiandatve soluongve mahoadon ID matau
Bảng 9 HÓA ĐƠN mahoadon thoigianthanhtoan phuongthucthanhtoan ID