2012-08-11 11 views
5

Widziałem tego rodzaju problemy kilka razy i staram się wybrać najlepszy sposób przechowywania zakresów w sposób nie nakładający się na siebie. Na przykład podczas planowania jakiegoś zasobu, z którego może korzystać tylko jedna osoba naraz. Głównie tego co widziałem to coś takiego:Sugerowana metoda postępowania z niezachodzącymi zakresami (np. Planowanie)

PERSON   ROOM  START_TIME  END_TIME 
Col. Mustard Library  08:00   10:00 
Prof. Plum  Library  10:00   12:00 
  1. Jaki jest najlepszy sposób zapobiegania nowe wpisy z nakładających istniejący harmonogram, jak powiedzieć, czy panna Scarlet chce zastrzec od 11:00 do biblioteki 11:30? Ograniczenie inline nie będzie działać i nie sądzę, aby można to było łatwo zrobić w wyzwalaczu. Procedura obsługująca wszystkie inserty, które początkowo szukają konfliktu w tabeli?

  2. Po drugie, jaki jest najlepszy sposób radzenia sobie z problemami współbieżności? Powiedzmy, że panna Scarlet chce mieć bibliotekę od 13:00 do 15:00, a pani White chce to od 14:00 do 16:00. Procedura opisana w ust. 1 uznałaby oba te harmonogramy za dopuszczalne, ale wyraźnie przyjęte razem, ale nie są. Jedyne, co mogę wymyślić, to ręczne zablokowanie stołu lub jakiś muteks.

  3. Co to jest dobry klucz podstawowy dla powyższej tabeli (pokój, czas_początkowy)?

+0

możliwy duplikat [Jaki jest najlepszy sposób na zoptymalizowanie schematu do przechwytywania danych o uczestnictwie] (http://stackoverflow.com/questions/3193227/what-is-the-best-way-to-optimize-schema-for -aprowadzanie-dane-obecności) – APC

Odpowiedz

4

szybki sposób pracy dla przypadków, w których masz stałych zakresów czasowych, można przechowywać wszystkie zakresy w osobnej tabeli, a następnie po prostu połączyć go z „rezerwy” tabeli. Może to zrobić sztuczkę dla ustalonych zakresów, na przykład możesz przechowywać bibliotekę tylko z 30 minutowymi przerwami, a godziny pracy są od 8:00 do 20:00, potrzeba tylko 24 rekordów.

--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 

Teraz robisz PK lub UK i sprawdzanie bazy danych jest już gotowe. Będzie szybki, przy niewielkich nakładach danych. Jednak używanie tej samej rutyny w każdej sekundzie nie będzie tak skuteczne.

Bardziej uniwersalnym i złożonym sposobem jest sprawdzenie, czy jakiś sprawdzian procedur (lub wyzwalaczy) jest zajęty czy nie, a będziesz musiał sprawdzić wszystkie aktualne zapisy.

+0

+1, stwórz tabelę małych dyskretnych odstępów czasu i pozwól ludziom zarezerwować wiele. – Ben

Powiązane problemy