• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Status nie wypożyczone przy tworzeniu tabel w projekcie bazy danych Postgresql

Object Storage Arubacloud
+1 głos
243 wizyt
pytanie zadane 23 czerwca 2021 w SQL, bazy danych przez Martita Bywalec (2,470 p.)

Początkująca - Postgresql

Szukałam w google i nie znalazłam.

Robię projekt bazy danych Postgresql biblioteka. Przy tworzeniu tabel chcę mieć status wypożyczenia książek, czyli jakie książki są wypożyczone, jakie nie są wypożyczone, jakie są zarezerwowane, jakie nie są zwrócone tak samo status czytelników, czyli kto wypożyczył, kto nie wypożyczył, kto zarezerwował, kto nie zwrócił.

Jakbym nie potrzebowała ksiązek niewypożyczonych i czytelników, którzy nie wypożyczyli to połączyłabym tabele wypożyczenia z tabelą status.

Co z czym sensownie połączyć, aby przy tworzeniu bazy mieć status książek niewypożyczonych i czytelników, którzy nie wypożyczyli?

Mój jedyny pomysł to połączyć tabele czytelnik z tabelą status, tabele ksiazki z tabelą status, tabele wypozyczenia z tabelą status.

Moje tabele

Tabela logowanie_czytelnika - kolumny id,  login, hasło

Tabela czytelnik - kolumny: id, nazwisko, imie, adres, kod_pocztowy, miasto, województwo, email, lo_czytelnik, ha_czytelnik
lo_czytelnik, ha_czytelnik z tabeli logowanie_czytelnika.

Tabela status - kolumny: id, nazwa, - Nazwy statusów: nie wypożyczona, wypożyczona, zarezerwowana, nie zwrócona.

Tabela kategoria - kolumny: id, nazwa

Tabela ksiazki - kolumny: id, isbn, tytuł, autor_I, autor_II, data_wydania, kat_ksiazki,
kat_ksiazki z tabeli kategoria

Tabela wypozyczenia - kolumny: id, nr_czytelnik, nr_ksiazka, data_wypozyczenia, data_zwrotu, data_przedłużenia, st_wypożyczenie
nr_czytelnik z tabeli czytelnik,
nr_ksiazka z tabeli ksiazki
st_wypożyczenie z tabeli status

Proszę o pomoc.

1 odpowiedź

+2 głosów
odpowiedź 23 czerwca 2021 przez edutomek Dyskutant (8,380 p.)
0) Problem nie ma związku z PostgreSQL, tylko ogólnie z relacyjnymi bazami danych.

(Taka uwaga na boku.)

1) Jakie są encje?

W zasadzie każda tabela powinna odpowiadać innej encji.
(Plus tabele do relacji pomiędzy encjami.)

Tutaj w szczególności nie widzę powodu rozdzielania danych czytelnika (login + hasło, pozostałe dane - profil?) na dwie tabele w taki sposób, jak zostało to zrobione.

Zwłaszcza, że można sobie wyobrazić, że czytelnik ma kilka adresów kontaktowych, albo kilka e-maili - ale wtedy należy to potraktować jako odrębne encje. Tutaj mamy połączenie adresu fizycznego z e-mailem.

Swoją drogą, w rzeczywistym projekcie oprócz hasła przydałaby się jeszcze sól.

Dalej jest coraz gorzej pod tym względem: np. w książce mamy dane autorów (autor_i, autor_ii). Oby autorów nie było więcej ;-) Życzę powodzenia przy wyszukiwaniu książek danego autora.

A poważnie: książka, autor książki, wydanie - to są wszystko odrębne encje. (Ta sama książka może mieć wiele wydań; każde z wydań powinno mieć ten sam tytuł - tymczasem w bazie będzie można wprowadzić różne wydania tej samej książki i przy okazji zrobić literówkę w tytule.)

Swoją drogą, to w rzeczywistej bibliotece dodałbym jeszcze jedną encję - fizyczny egzemplarz książki (coś, co stoi na półce, albo może zostać wypożyczone). Kiedy robiłem taki projekt, używałem (chyba - podaję z pamięci) następujących encji:
- tytuł (np. "Hobbit"),
- autor (np. JRR Tolkien),
- wydanie
- książka (jako konkretny egzemplarz wydania, z numerem w indeksie biblioteki)

Tabel było więcej (bo encji więcej), były pomiędzy nimi powiązania, a kwerendy były bardziej złożone (ale też bez przesady), ale baza dawała sobie z tym radę, a możliwości popełnienia pomyłki było mniej - i o to mi chodziło.

Proponowałbym zacząć od rozpisania encji, wraz z ich atrybutami, a następnie powiązań (zależności, relacji) pomiędzy encjami. Bez tego nie ma sensu projektować jakiejkolwiek bazy.

Jak to będzie dobrze zrobione, to dodanie statusów do książek, czytelników (czy jakiejkolwiek innej encji) nie będzie aż takim problemem.
komentarz 23 czerwca 2021 przez Martita Bywalec (2,470 p.)
Pytałam czy możemy tak zrobić ale się nie zgodził. W jaki jeszcze sposób mogę to zrobić tak jak wymaga to wykładowca?
komentarz 23 czerwca 2021 przez edutomek Dyskutant (8,380 p.)
A jakie są konkretnie wymagania? Bo to nie jest dla mnie jasne.
komentarz 23 czerwca 2021 przez Martita Bywalec (2,470 p.)

To wszystko co pisałam wyżej.

A co nie jest jasne?

Muszę mieć status książek niewypożyczonych i czytelników, którzy nie wypożyczyli przy tworzeniu bazy.

komentarz 23 czerwca 2021 przez edutomek Dyskutant (8,380 p.)
Książki, które nie są wypożyczone: w tabeli wypozyczenia tworzymy rekord dla KAŻDEJ książki (z tabeli ksiazka). W miejscu czytelnika wstawiamy NULL (bo książka nie jest wypożyczona). Status ustawiamy na "nie wypożyczona".

Czytelnicy, którzy nie wypożyczyli żadnej książki? Tu może być więcej kombinowania. Bo nie widzę żadnego statusu, który by do tego pasował (w tabeli status mamy "nie wypożyczona", co nie pasuje do czytelnika).
Może "wykładowcy" chodzi o to, żeby do tabeli status wprowadzić dodatkowe statusy dla czytelników - i przypisać je na takiej samej zasadzie, jak książkom? (Tzn. dodać również kolumnę do tabeli czytelnik z odniesieniem do odpowiedniego statusu?) Albo żeby utworzyć odrębną tabelę ze statusami dla czytelników?

Jeśli to nie to, to już nie mam pojęcia, co "wykładowca" może mieć na myśli.

(Jak się nie stosuje do zasad normalizacji, to potem właśnie takie problemy się pojawiają...)
komentarz 23 czerwca 2021 przez Martita Bywalec (2,470 p.)
Dzięki To teraz już wiem jak to zrobić i jak to powinno wyglądać. Na pewno poinformuje o ocenie.

Podobne pytania

0 głosów
2 odpowiedzi 204 wizyt
pytanie zadane 12 czerwca 2019 w SQL, bazy danych przez niezalogowany
+1 głos
1 odpowiedź 247 wizyt
pytanie zadane 29 maja 2022 w SQL, bazy danych przez Martita Bywalec (2,470 p.)
0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 25 maja 2022 w SQL, bazy danych przez Martita Bywalec (2,470 p.)

92,567 zapytań

141,420 odpowiedzi

319,617 komentarzy

61,953 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...