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
@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
@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.
@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 to kompletne przeprojektowanie
@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
@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.
@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 trend
@Yahoo_: Hm, ciężko powiedzieć, bo to jest taki mój miniprojekt bardziej szkoleniowy aniżeli bardzo poważna apka. Spodziewam się, że taką opcję dodawania lekcji będzie miało kilkanaście osób, więc ustalając sobie jakiś harmonogram na dany dzień nie będą bombardować tej bazy milionem insertów. Nie wiem czy to jest odpowiedź, która cię satysfakcjonuje :D.
@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 :)