Stworzyłem schemat bazy danych dla system bibliotecznego. Poprosiłbym o ocenę tego schematu.
Dodatkowo w oparciu o ten schemat chciałbym stworzyć aplikację webową w Javie z wykorzystaniem Spring, Hibernate, MySQL. W związku z tym mam kilka kwestii, których nie do końca wiem jak rozwiązać:
- Egzemplarz książki ma atrybut status. Do wyboru jest: wypożyczony, zarezerwowany, dostępny. Jak to zrealizować w bazie danych, aby tylko jedna z tych trzech opcji była dostępna. Chciałem użyć typu Enum, ale chyba nie ma czegoś takiego w MySQL
- Chcę aby użytkownik miał możliwość, nie tylko wypożyczenia, ale również rezerwacji książki z domu. Rezerwacja ma ważność 2 dni, a po tym czasie powinna zniknąć z bazy danych. Jak to zrealizować? Myślałem o tym, żeby dane w tabeli "Reservation" były tymczasowe, ale czy jest taka możliwość w MySQL?
- Z innej bajki - czy każda książka musi mieć wydawnictwo? Np. książki wydawane samodzielnie przez autora mają wydawnictwo? Zastanawiam się czy relacja pomiędzy Book i Publisher powinna być typu identifying czy non-indentyfying.
- Chciałbym aby każdy czytelnik miał limit wypożyczeń, którego nie może przekroczyć. Czy lepiej wykonać to na poziomie bazy danych dodając atrybut np. "liczba aktualnych wypożyczeń", czy lepiej sprawdzać to na poziomie aplikacji?
- Podobnie, chciałbym aby była naliczana kara za opóźnienia. Jak to zrealizować? Czy powinienem stworzyć atrybut, który będzie przechowywał i uaktualniał aktualnie naliczoną karę?