2012-08-11 22 views
5

Tôi đã thấy loại sự cố này một vài lần và đang cố gắng quyết định cách lưu trữ phạm vi tốt nhất theo cách không trùng lặp. Ví dụ: khi lên lịch một số loại tài nguyên mà chỉ một người có thể sử dụng tại một thời điểm. Chủ yếu là những gì tôi đã nhìn thấy một cái gì đó như thế này:Phương pháp được đề xuất xử lý các phạm vi không trùng lặp (ví dụ: lập lịch)

PERSON   ROOM  START_TIME  END_TIME 
Col. Mustard Library  08:00   10:00 
Prof. Plum  Library  10:00   12:00 
  1. gì là cách tốt nhất để ngăn chặn các mục mới từ chồng chéo lịch hiện có, như nói nếu Hoa hậu Scarlet muốn dành thư viện từ 11:00 đến 11:30? Một ràng buộc nội tuyến sẽ không làm việc và tôi không nghĩ rằng điều này có thể dễ dàng được thực hiện trong một kích hoạt. Một thủ tục xử lý tất cả các chèn ban đầu tìm kiếm xung đột hiện có trong bảng?

  2. Thứ hai, cách tốt nhất để xử lý các vấn đề tương tranh là gì? Nói rằng Miss Scarlet muốn thư viện từ 13:00 đến 15:00 và bà White muốn nó từ 14:00 đến 16:00. Các thủ tục từ (1) sẽ tìm thấy cả hai lịch trình chấp nhận được, nhưng rõ ràng được thực hiện với nhau, họ không. Điều duy nhất tôi có thể nghĩ là khóa thủ công của bảng hoặc một số loại mutex.

  3. Khóa chính tốt cho bảng ở trên, (phòng, start_time) là gì?

+0

bản sao có thể có của [Cách tốt nhất để tối ưu hóa lược đồ để thu thập dữ liệu tham dự] là gì (http://stackoverflow.com/questions/3193227/what-is-the-best-way-to-optimize-schema-for -apturing-attendance-data) – APC

Trả lời

4

Cách làm việc nhanh chóng cho các trường hợp, nơi bạn có khoảng thời gian cố định, bạn có thể lưu trữ tất cả các dãy trong bảng riêng biệt, sau đó chỉ cần liên kết nó với bảng "dự trữ". Nó có thể làm thủ thuật cho các phạm vi cố định, ví dụ bạn có thể phục hồi thư viện chỉ với khoảng 30 phút và giờ làm việc giống như từ 8 giờ sáng đến 8 giờ tối, chỉ cần 24 hồ sơ cần thiết.

--Person table--------------- 
ID PERSON   ROOM 
1 Col. Mustart Library 
2 Proof. Plum Library 

--Timeshift table------------ 
ID START_TIME END_TIME 
1 08:00  08:30 
2 08:30  09:00 
.... 
24 19:30  20:00 

--Occupy table---- 
DATE   TIMESHIFT PERSON 
TRUNC(SYSDATE) TS_ID  P_ID 
08/12/2012   4   1 
08/12/2012   5   1 
08/12/2012   9   2 
08/12/2012   10   2 

Bây giờ bạn đặt PK hoặc Vương quốc Anh và kiểm tra cơ sở dữ liệu của bạn sẵn sàng. Nó sẽ nhanh chóng, với ít chi phí dữ liệu. Tuy nhiên sử dụng cùng một thói quen cho mỗi giây sẽ không có hiệu quả.

Cách phổ quát và phức tạp hơn là để cho phép một số thủ tục (hoặc kích hoạt) kiểm tra, phạm vi của bạn có chiếm hay không và bạn sẽ phải kiểm tra tất cả các bản ghi hiện tại.

+0

+1, tạo một bảng các khoảng thời gian rời rạc nhỏ và cho phép mọi người đặt nhiều. – Ben

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