Wpis z mikrobloga

#java #programowanie #naukaprogramowania #pytanie #informatyka #hibernate #spring

Jak najlepiej rozwiązać poniższą sytuację? Mam tabelę lesson i kolumny teacherid, lessonday, lessonstart i lessonstop. Użytkownik tworzy sobie lesson wybierając datę i godziny od do. Obecnie może nastąpić taka sytuacja, gdzie może być kilka rekordów z takim samym teacherid, datą i godzinami od do. Chciałbym zabezpieczyć taką sytuację, że jeżeli dla danej osoby, danego dnia istnieją rekordy z godzinami, które tam sobie wybrał, to żeby nie dublowało tego i nie było takich "podwójnych" lekcji. Mam nadzieję, że wiadomo o co chodzi, bo jakoś ciężko mi sformułować problem. Jest jakiś rozsądny sposób na to, żeby lessonstart i lessonstop było unikalne dla danego teacherid i danej daty?
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@baalder363: zasadniczo zdaje się, że możesz dać nawet unique na tym, ale bardziej sensowne będzie obsłużenie tego po stronie aplikacji. To już jest logika biznesowa.
  • Odpowiedz
@fegwegw: w sytuacji gdy co minutę mam < 100 błędów/ostrzeżeń od MySQLa że próbuje wsadzić coś, co już istnieje, co powinienem zrobić? sprawdzać czy istnieje i dopiero insertować?
w mojej sytuacji poprawność > szybkość się liczy podczas działania
  • Odpowiedz
@g500s: po co :)? Zaraz mu dojdzie, że w sumie to jednak może mieć dwie różne lekcje w tym samym czasie, ale w innych semestrach albo w systemie raz na dwa tygodnie i będzie musiał wywalać :).
@asdasdce2w: typowo bym sprawdzał to w kodzie, a nie na bazie.
  • Odpowiedz
@Yahoo_: @metaforyczny_kierowca: @fegwegw: Dzięki za odpowiedzi. Jak dawałem unique na kolumnach z godzinami to nadal się coś krzaczyło. Zastanawiałem się czy na service przy dodawaniu danej lekcji do bazy nie zrobić jakiejś walidacji, że jeżeli w bazie istnieje taka i taka godzina dla tej daty i tego konkretnego instruktora to pominąć dodawanie tej lekcji, tylko obawiam się czy nie spowolniłoby to znacząco aplikacji. Druga moja myśl
  • Odpowiedz
@Yahoo_: mnie zawsze uczono, że jeżeli ograniczenia integralności da się zrealizować w bazie danych to powinny zostać tam zrealizowane, aplikacja jest rzeczą wtórną - dzisiaj jedna aplikacja z niej korzysta, jutro może korzystać inna. oczywiście, że aplikacje również powinny to sprawdzać, ale jeżeli baza jest w stanie chronić się przed wprowadzaniem głupot to powinna to robić. no i to zawsze wydawało mi się sensowne
  • Odpowiedz
@Yahoo_: Za jednym razem zwykle wchodzi koło 8-9. User wybiera datę oraz od której do której zamierza pracować, np. od 8 do 16, więc idzie insert data,teacherid, 8,9; data,teacherid,9,10 itd.
  • Odpowiedz
@g500s: Database driven development. Można tak, ja wolę jak dane są kwestią wtórną, apka raz korzysta z jednej bazy, innym razem z innej :). A Twoja apka i tak musi to sprawdzać (albo przynajmniej obsłużyć wyjątek), więc de facto duplikujesz kod. Nie jest to oczywiście zawsze błędne szczególnie jak wiele serwisów korzysta z tej samej bazy i chcesz zapewnić, żeby żaden zły programista nie zepsuł Ci danych, ale obecnie jest
  • Odpowiedz
  • 1
@baalder363 obsługa jednej szkoły? Nie przejmuj się wydajnością, nie wierzę, że będziesz miał jakiekolwiek problemy, a SQL został stworzony po to, żebyś mógł wydajnie odpytywać bazę o dane :). W razie czego zawsze są indeksy :)
  • Odpowiedz