Mógłbym przy rejestracji czasu zwracać uwagę na dystans przypisany do zawodnika, dlaczego? dzięki temu wiem ile powinien mieć odbić (zarejestrowanych czasów).
Dla przykładu zawodnik który jest zapisany na 100 km:
- pierwszy wpis - start - Mszana,
- drugi wpis wpis - punkt kontrolny - Bojanów,
- trzeci wpis - meta - Mszana
- start - Mszana,
- punkt kontrolny - Bojanów,
- punkt kontrolny - Mszana,
- meta - Mszana.
- start - Mszana,
- punkt kontrolny - Bojanów,
- punkt kontrolny - Mszana,
- punkt kontrolny - Bojanów,
- meta - Mszana
- start - Mszana,
- meta - Mszana
Być może pośrednim rozwiązaniem (tudzież ułatwieniem) było by dołożenie do tabeli z dystansami kolumny z minimalną ilością rejestracji czasu. Są jednak pewne uwagi co do powyższego rozwiązania:
- jeżeli zawodnik nie przejedzie swojego dystansu?, może się tak zdarzyć i się zdarza, ktoś wybrał dystans np 600 km, a przejechał tylko 200 km,
- Zawodnik zapomniał się odbić na punkcie lub zdarzyła się nieprzewidziana awaria,
- Szukamy w tabeli Czas rejestracji dla danego zawodnika ,
- wyliczamy czas całkowity (końcowy) odejmując od ostatniego pierwszy,
- zliczamy odbicia,
- porównujemy ilość odbić z tabelą dystanse w której mamy dodatkową kolumnę określająca minimalną ilość rejestracji czasu,
- w tym momencie mamy jakąś wiedzę na temat jaki jest czas końcowy i ile odbić składa się na ten czas czyli ile przejechał (jaki dystans)
Jak sprawdzić odcinek czasu (wyliczyć)?
Na dystansie 50 km nie ma problemu bo i tak będę brał po uwagę pierwszy i ostatni wpis. Problem pojawia się już na dystansie 100 km, mamy trzy rejestracji , jeżeli zawodnika ma dwie to świadczy o tym że się nie odbił czy można na to przymknąć oko? Zależy, jeżeli czas przejazdu jest porównywalny z innymi ale jak się to ma do regulaminu? regulamin mówi brak odbicia dyskwalifikacja lub brak klasyfikacji na danym dystansie (dylemat).
Jak powiedzieć człowiekowi, który przejechał 600 km, że raz się nie odbił i jest zdyskwalifikowany?
Przy nowym algorytmie wiedza na temat pojedynczych odcinków jest drugorzędna, liczyć się będzie tylko pierwszy i ostatni czas dzięki któremu będę miał całkowity czas przejazdu.
Wczoraj podczas jazdy samochodem w padła mi myśl do głowy (na dziurze). Jak zawodnik odbija się na dowolnym punkcie, do bazy wpada jego czas, mam czas startu i czas ostatniego odbicia. Dzię ki temu mogę wyliczyć czas przejazdu. Nie potrzebuje budować skomplikowanego algorytmu, wystarczy że po każdym odbiciu będę liczył różnicę (ostatni minus pierwszy) czasów i zapisywał ją do tabeli z wynikami dla danego zawodnika.
Dzięki temu otrzymam czasy na daną pętle, a nawet jej część.
Wydaje się to bardzo proste, struktura tabeli wyglądała by w ten sposób:
- wynik_id - wiadomo klucz główny (PK) auto inkrementacja,
- wynik_wartosc - wynik różnicy czasów kolumna time,
- zawodnik_id - (FK) - klucz obcy tabeli zawodnik,
- dystans_prawdopodobny - ta kolumna może nie odzwierciedlać rzeczywistości.
select Z.zaw_nazwisko,Z.zaw_imie,NS.numer_zawodnika,W.wynik_wartosc
Wynik W
inner join Zawodnik Z on Z.zaw_id = W.zawodnik_id
inner join NumerStartowy NS on
NS.numer_id = Z.numer_id
where
zaw_id = @zaw_id
order by W.wynik_id asc
zaw_id = @zaw_id
order by W.wynik_id asc
Do tego informacje o dystansie wybranym przy rejestracji, a dodatkowo dystans rzeczywisty na podstawie rejestracji.
Spomniało mi się jeszcze jedno można by się pokusić o sprawdzenie numeru czytnika tzn. zawodnik odbija się na czytniku ja wpisuje numer dyskietki do bazy oprócz tego można by spróbować ściągnąć numer urządzenia, dzięki temu bym był w stanie określić na którym odbił się dwa razy. Było by to dodatkowe zabezpieczenie (oprócz zwłoki 30 minut).
Spomniało mi się jeszcze jedno można by się pokusić o sprawdzenie numeru czytnika tzn. zawodnik odbija się na czytniku ja wpisuje numer dyskietki do bazy oprócz tego można by spróbować ściągnąć numer urządzenia, dzięki temu bym był w stanie określić na którym odbił się dwa razy. Było by to dodatkowe zabezpieczenie (oprócz zwłoki 30 minut).
Brak komentarzy:
Prześlij komentarz