Hãy xây dựng các thay đổi hơn nữa đối với mô hình dữ liệu mà tôi đã tạo trong bài đăng blog trước đó của mình, chẳng hạn như có một phương pháp tự động để chỉ định một người hướng dẫn và phương tiện cho một bài học, lập hóa đơn cho khách hàng và theo dõi họ.
Trước hết, tôi cần xây dựng logic ở phía ứng dụng để chỉ định một người hướng dẫn và phương tiện cho các bài học trước khi chúng thực sự diễn ra. Điều chính cần đảm bảo ở đây là tính khả dụng, tức là chỉ có thể chỉ định một người hướng dẫn hoặc phương tiện cho một bài học nếu cả hai người đều có mặt vào thời gian đã định của bài học.
Tôi cần tạo hai bảng riêng biệt để theo dõi sức chứa của người hướng dẫn và phương tiện tương ứng. Bạn có thể thắc mắc tại sao tôi lại có ý định theo dõi công suất thuê thay vì tính khả dụng. Câu trả lời là, nếu chúng ta theo dõi việc sử dụng thay vì tính khả dụng, thì chúng ta không cần tạo thêm bảng để lưu trữ lượng tài nguyên không có sẵn do người hướng dẫn nghỉ phép hoặc một số dịch vụ theo lịch trình dành cho xe cộ. Trong trường hợp không có sẵn theo kế hoạch, các bản ghi sẽ được đưa vào bảng công suất tương ứng.
Ở đây tôi đang đưa ra một giả định rằng giáo viên hướng dẫn và phương tiện chỉ có sẵn trong giờ làm việc, chẳng hạn như 8 giờ sáng đến 6 giờ chiều, vào các ngày làm việc do trường xác định. Do đó, tôi có thể nói rằng một người hướng dẫn có mặt trong một thời gian cụ thể vào một ngày làm việc nếu tôi không tìm thấy chi tiết về số lượng người của giáo viên đó cho thời gian và ngày được chỉ định trong staff_occupancy
bảng.
Cấu trúc cho bảng staff_occupancy
như sau:
Một số biến thể có thể được đưa vào khi cần thiết. Ví dụ:phải có khoảng cách ít nhất 15 phút giữa hai bài học tiếp theo cho một người hướng dẫn.
Cấu trúc cho bảng vehicle_occupancy
như sau:
Việc phân bổ người hướng dẫn và phương tiện được ghi trong reservation
bàn. Tôi đã thêm hai cột, staff_id
và vehicle_id
, vào bảng này. Những phân bổ này rõ ràng sẽ xảy ra dựa trên tính sẵn có của chúng.
Ngoài ra, tôi sẽ giữ lại reservation_id
trong staff_occupancy
và vehicle_occupancy
bảng, để trong trường hợp hủy bài học, có thể dễ dàng giải phóng số lượng nhân viên và phương tiện có liên quan. Nhưng tôi sẽ giữ cả hai cột này là nullable như việc sử dụng người hướng dẫn và phương tiện sẽ không nhất thiết là do đặt trước. Điều gì sẽ xảy ra nếu một người hướng dẫn nghỉ việc? Hay một trong những phương tiện đi vào trung tâm dịch vụ trong một ngày?
Để cho phép xóa mềm trong các trường hợp như vậy, tôi sẽ thêm một cột có tên là is_active
trong cả hai bảng này.
Lập hóa đơn
Đối với yêu cầu lập hóa đơn, tôi sẽ tạo một bảng, đó là invoice
, để giữ các chi tiết lập hóa đơn bao gồm customer_id
và reservation_id
. Ở đây, việc lập hóa đơn được thực hiện cho khách hàng nhưng dựa trên các bài học đã thực hiện cho khách hàng. Do đó, chúng tôi cần reservation_id
trong bảng hóa đơn, để tại bất kỳ thời điểm nhất định nào, người ta có thể lấy một báo cáo về việc lập hóa đơn chi tiết dựa trên việc đặt trước cho một khách hàng. Tôi cũng sẽ tạo một cột, đó là invoice_status_id
, trong bảng lưu trữ trạng thái của hóa đơn.
Mô hình cơ sở dữ liệu
Đây là cấu trúc cơ sở dữ liệu cập nhật được thiết kế trong Vertabelo:
Kết luận
Đến đây chắc hẳn bạn đã bắt đầu tin rằng việc lập mô hình dữ liệu cho hệ thống đặt chỗ của một trường dạy lái xe cũng thú vị và hấp dẫn như việc học lái xe?
Vui lòng gửi câu hỏi và đề xuất của bạn về bài viết. Tôi rất sẵn lòng trả lời chúng và kết hợp các đề xuất của bạn vào bài viết tiếp theo của tôi.