2008-12-11 31 views
8

Gần đây tôi đã được hỏi câu hỏi phỏng vấn trên hệ thống đặt chỗ dựa trên giả thuyết và cách tôi thiết kế lược đồ cơ sở dữ liệu để giảm thiểu trùng lặp và tối đa hóa tính linh hoạt.Cơ sở dữ liệu Schema - Hệ thống đặt chỗ/sẵn có

Trường hợp sử dụng là quản trị viên sẽ nhập tính khả dụng của thuộc tính vào hệ thống. Có thể có nhiều khoảng thời gian được đặt. Ví dụ: từ ngày 1 tháng 4 năm 2009 đến ngày 14 tháng 4 năm 2009 và ngày 3 tháng 7 năm 2009 đến ngày 21 tháng 7 năm 2009.

Sau đó, người dùng chỉ có thể đặt trước trong khoảng thời gian có thời gian bằng hoặc ngắn hơn.

Làm cách nào bạn lưu trữ thông tin này trong cơ sở dữ liệu?

Bạn có sử dụng một cái gì đó đơn giản (thực sự đơn giản) như;

AVAILABILITY(property_id, start_date, end_date); 
BOOKING(property_id, start_date, end_date); 

Sau đó, bạn có thể dễ dàng xây dựng một trang web hiển thị lịch khả dụng với các khoảng thời gian đã được đặt blanked out. Nó sẽ được dễ dàng để xây dựng các báo cáo từ lược đồ cơ sở dữ liệu này? Nó có dễ dàng như nó có vẻ không?

Trả lời

12

Nó có thể được dễ dàng hơn để làm việc với một bảng duy nhất cho cả hai sẵn sàng và đặt phòng, với một granularity trong tổng số 1 trong ngày:

property_date (property_id, date, status); 

tình trạng cột sẽ có (ít nhất) 2 giá trị sau:

  • sẵn
  • Thẻ vàng

Bước vào một giai đoạn sẵn sàng ví dụ. Ngày 1 đến ngày 14 tháng 4 sẽ đòi hỏi (ứng dụng) chèn 14 hàng vào property_date mỗi với trạng thái 'Có sẵn'. (Đối với người dùng nó sẽ có vẻ giống như một hành động duy nhất).

Đặt chỗ cho giai đoạn từ ngày 3 đến ngày 11 tháng 4 sẽ đòi hỏi phải kiểm tra xem hàng 'Sẵn có' có tồn tại mỗi ngày không và thay đổi trạng thái thành 'Đã đặt'.

Mô hình này có thể có vẻ một chút "tiết", nhưng nó có một số ưu điểm:

  1. Kiểm tra tính sẵn sàng cho ngày nào là dễ dàng
  2. Thêm một phòng tự động cập nhật các tính sẵn sàng, không có một riêng biệt Bảng tính khả dụng để tiếp tục đồng bộ hóa.
  3. Hiển thị tính khả dụng trong trang web sẽ rất đơn giản
  4. Thật dễ dàng để thêm trạng thái mới để ghi lại các loại không khả dụng khác nhau - ví dụ: đóng cửa để bảo trì.

NB Nếu "có sẵn" là trạng thái phổ biến nhất của thuộc tính, tốt hơn là đảo ngược logic để trạng thái 'Không khả dụng' và không có hàng cho ngày có nghĩa là có sẵn.

+0

Tôi sẽ đề xuất chính xác điều này. –

+0

+1, Đây chính xác là những gì tôi đang tìm kiếm. Bất kỳ gợi ý nào về thời điểm có các phòng khác nhau trong khách sạn? –

Các vấn đề liên quan