1. Trang chủ
  2. » Giáo Dục - Đào Tạo

(Tiểu luận) đồ án giữa kỳ đề tài hệ thống quản lý bán vé tàu hỏa

53 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 53
Dung lượng 2,16 MB

Cấu trúc

  • I. LÝ DO CHỌN ĐỀ TÀ (4)
  • II. THIẾT KẾ CƠ SỞ DỮ LIÊCU (5)
    • 2.1. Quy trình hệ thống (5)
    • 2.2. Mô tả dữ liệu (7)
    • 2.3. Mô hình hóa dữ liệu ERD (9)
    • 2.4. Các lược đồ quan hệ RD (10)
    • 2.5. Mô tả dữ liệu phụ thuộc khóa chính, khóa ngoại (14)
  • III. RÀNG BUỘC TOÀN VẸN VÀ CHUẨN HÓA (15)
    • 3.1. Ràng buộc toàn vẹn (15)
      • 3.1.1 Ràng buộc toàn vẹn dữ liệu (15)
        • 3.1.1.1 Ràng buộc Unique (15)
        • 3.1.1.2 Ràng buộc khoá ngoại (16)
        • 3.1.1.3 Ràng buộc Check (18)
      • 3.1.2. Ràng buộc toàn vẹn trên 1 quan hệ, 1 thuộc tính (19)
      • 3.1.3 Ràng buộc toàn vẹn trên 1 quan hệ, liên thuộc tính (20)
      • 3.1.4 Ràng buộc toàn vẹn trên 1 quan hệ, liên bộ (20)
      • 3.1.5 Ràng buộc toàn vẹn trên nhiều quan hệ (20)
      • 3.1.6 Bảng tổng hợp tầm ảnh hưởng (24)
    • 3.2. Chuẩn hóa (26)
  • IV. HIỆN THỰC TRÊN MS SQL SERVER 21 (27)
    • 4.1. Lệnh truy vấn dữ liệu (27)
      • 4.1.1. Truy vấn một bảng (27)
      • 4.1.2. Truy vấn nhiều bảng (27)
      • 4.1.3. Truy vấn có điều kiện (28)
      • 4.1.4. Truy vấn có tính toán (28)
      • 4.1.5. Truy vấn gom nhóm (GROUP BY) (29)
      • 4.1.6. Truy vấn gom nhóm có điều kiện (HAVING) (30)
      • 4.1.7. Truy vấn có giao | hội | trừ (INTERSECT | UNION | EXCEPT) (30)
      • 4.1.8. Truy vấn con (31)
    • 4.2. Viết TRIGGER ràng buộc dữ liệu cho các bảng (31)
  • V. THÔNG TIN CƠ SỞ DỮ LIỆU (41)
  • VI. PHỤ LỤC (46)
    • 6.1. Bảng phân chia công việc (46)
    • 6.2. Câu lệnh tạo bảng dữ liệu (48)

Nội dung

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

Ngày đăng: 13/04/2024, 21:14

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w