Problem z relacją między książką, a użytkownikiem.

0

Dzień dobry,
jestem na etapie tworzenia niewielkiej strony mającej symulować wypożyczanie książek.
Każdy użytkownik może dodawać książki oraz każdy użytkownik może je wypożyczać.
I tutaj natknąłem się na mały problem, ponieważ wychodzą mi tutaj dwie relacje między dwoma tabelami i nie wiem jak to w jakiś zgrabny sposób załatwić.

Mam tabele użytkownika i książki:

  • Dodanie książki - relacja jeden do wielu

  • Wypożyczenie książki - relacja wiele do wielu z tabelą pośrednią

Jedyna rzecz, jaka mi przychodzi do głowy to stworzyć nową tabelę, coś w stylu 'czytelnik' i tutaj wrzucić tą relację wiele do wielu. Tylko w tym momencie trzeba też jakoś powiązać użytkownika i czytelnika.

Nie ukrywam, że będę bardzo wdzięczny za jakąś pomoc, bo znając życie można to jakoś ładnie zrobić.

0

Co do wypożyczeń, przychodzi mi do głowy taki model:

użytkownik —(jeden do wielu)— wypożyczenia —(wiele do wielu)— książki

co oznacza, że:

  1. Jeden użytkownik może wypożyczać wiele razy;
  2. Jedno wypożyczenie może być wykonane przez tylko jednego użytkownika (uzależniłem wypożyczenia od czasu).
  3. Jedno wypożyczenie może zawierać wiele książek.
  4. Jedna książka może być wypożyczana wiele razy.

Oczywiście trzeba dodać tabelę pośrednią między tabelą wypożyczenia a tabelą książki.

0

Tak wygląda obecnie i wiem, że w takiej formie chyba nie może być.

  • Użytkownik
    • Id
    • Nazwa
    • Email
    • Hasło
  • Książka
    • Id
    • Tytuł
    • Autor
    • Opis
    • Czy_wypozyczona
    • Id_uzytkownika (który dodał książkę) - klucz obcy
  • Wypozyczenie
    • Id_uzytkownika
    • Id_ksiazki
    • Data_wypozyczenia
    • Data_zwrotu
0

Radziłbym Ci zmienić nazwy tabel na liczbę mnogą, przynajmniej dla mnie tak lepiej wyglądałoby. Jednak są różne powody dla liczby pojedynczej i mnogiej, nie chcę sugerować niczego. https://stackoverflow.com/questions/338156/table-naming-dilemma-singular-vs-plural-names

Dodaj jeszcze tabelę pośrednią, jak napisałem wyżej, oraz drugi klucz obcy id_czytelnika do tabeli Książka.


UPDATE: Nie wiem, czy to będzie najlepszy model, ale mnie się wydaje, że powinno działać. Dawno miałem do czynienia z bazami danych.

0

Nie wystarczy tylko klucz obcy w tabeli wypożyczenie? Wtedy chyba nie ma nadmiarowości bo tak czy tak wypożyczenie definiuje jaki użytkownik ma jaką książkę, ale mogę się mylić.

0

@Silv
Dziękuję bardzo, rano zasiądę do implementacji, więc jakby ktoś miał jeszcze jakieś ciekawe pomysły na rozwiązanie tego problemu to chętnie poczytam, czy można to jeszcze inaczej rozwiązać.

@mic1996
Może nie zrozumiałem, ale użytkownik w tabeli książka to użytkownik, który dodał książkę, a w tabeli wypożyczenia to ten co wypożyczył. Samo usunięcie tego pierwszego chyba nie naprawi sytuacji, bo wtedy nie będzie informacji na temat użytkownika który dodał książkę

0

Teraz mi się wydaje, że rzeczywiście nie potrzeba tej tabeli pośredniej; do tabeli Książka nie trzeba również dodawać id_czytelnika (a nawet byłoby to niepożądane, bo tracimy wtedy informację o dacie wypożyczenia). Więc przychyliłbym się, @dsep, że ten schemat, co zaproponowałeś, jest dobry.

Usunąłbym za to pole Czy_wypozyczona – to będzie znajdowane na bieżąco, poprzez przeglądanie tabeli Wypozyczenie i porównywanie z bieżącą datą. Gdyby zostawić, to wtedy za każdym wypożyczeniem trzeba by było edytować tabelę Ksiazka, a to raczej niepotrzebna operacja.

Zmieniłbym też nazwę z Id_uzytkownika na Id_dodajacego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1