Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zarys projektu biblioteki
Forum PHP.pl > Forum > Przedszkole
chico2
Witam,
Mój projekt do którego pomagaliście mi stworzyć system rejestracji i logowania właśnie się rozpoczął. Logowanie i rejestracja działa już tak jak chcę(md5, sh1, sesje). Teraz przybliżę resztę projektu wirtualnego katalogu biblioteki i moje pytania. Jak na razie mam dwie w bazie dwie tabele: uzytkownicy(id, imie, nazwisko, login, haslo, uprawnienia) oraz ksiazki(id, tytul, autor, rok, haslo_przedm, haslo_przedm2). Moje założenia są takie:

1. panel usera:
wyszukiwanie po: autor, tytul, slowa kluczowe;
rezerwacja ksiazek, zamowienie do odbioru na miejscu w bibliotece;

2. panel admina:
aktywacja, blokowanie, usuwanie userow;
dodawanie, edycja, usuwanie ksiazek;

Jak się za to wszystko zabrać aby miało to ręce i nogi? Nie chcę gotowych rozwiązań chcę naprowadzenia jak rozwiązać kwestie tabel, dostępu, wyszukiwania oraz jak zrealizować w/w funkcje w oparciu o moją bazę. Chodzi mi po głowie dodanie przy rejestracji nadania rangi 'nieaktywne' dla kont dopiero założonych aby admin mógł je dopiero potwierdzić po weryfikacji danych. Rezerwacja i zamówienie książek to chyba coś w rodzaju koszyka w e-sklepie? Macie jakieś dobre rady jak to ugryźć? Jakieś słowne pseudo-kody? Będę wdzięczny za wszelkie sugestie.
sadistic_son
Proponowałbym Ci bazę danych zaprojektować w taki sposób:

_________
|Tab-ksiazki
|--------------
|id
|autor
|tytul
|rok wydania
|nrISBN
---------------

___________________
|Tab-konkretne-ksiazki
|--------------------------
|id
|f_ksiazki
|-------------------------

Między dwiema powyższymi tabelami zachodzi relacja jeden-do-wielu. Mianowicie np. książkę AAA autora BBB o numerze ISBN CCC możesz mieć jej 10 identycznych egzemplarzy do wypożyczenia. Bez sensu byłoby dodawać 10 takich samych wpisów rożniących się jedynie id, więc dodajesz tylko jeden. W celu odróżnienia ich od siebie dajesz je do tabeli konkretne-ksiazki. W polu f_ksiazki będzie id z tabeli ksiazki

Następnie tabela z użytkownikami.

No i na koniec tabela wypożyczeń. Relacja między użytkownikami a konkretnymi książkami. Jeden użytkownik może wypożyczyć wiele książek na raz ale jedna konkretna książka może być tylko raz wypożyczona (w jednym momenci) przez jednego użytkownika. W tym celu porzebujesz tabeli łącznikowej między userami a konkretnymi książkami.

Dodadkowo tabela 'rezerwacja' - zasada taka sama jak z wypozyczeniem. Przy każdej próbie rezerwacji czy wypozyczenia na miejscu musi nastapic przeszukanie tabeli rezerwacja w celu ustalenia czy dana ksiazka nie jest juz zajeta. Porównanie dat "rezerwacja-od, do" z przedzialem dat w jakim user chce ksiazke wypozyczyc.


Relacje są dość nieźle i w prosty sposób wytłumaczone TUTAJ.
chico2
Muszę zgłębić nieco wiedzę o relacjach jednak czy mógłbyś rozrysować mi jakoś jak te relacje wszystkie mają wyglądać? Jak Ty byś to widział i co z czym połączyć? Jeśli to nie jest duży problem..



Na razie udało mi się zrobić w DBDesigner4 takie coś jak na screenie:


Co myślicie o tym?

  1. CREATE TABLE uzytkownicy (
  2. id_uz INTEGER(4) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. imie VARCHAR(15) NULL,
  4. nazwisko VARCHAR(25) NULL,
  5. login VARCHAR(10) NULL,
  6. password_2 VARCHAR(40) NULL,
  7. uprawnienia INTEGER(1) UNSIGNED NULL,
  8. PRIMARY KEY(id_uz)
  9. );
  10.  
  11. CREATE TABLE ksiazki (
  12. id_ks INTEGER(4) UNSIGNED NOT NULL AUTO_INCREMENT,
  13. tytul VARCHAR(45) NULL,
  14. autor VARCHAR(45) NULL,
  15. rok_w INTEGER(4) UNSIGNED NULL,
  16. haslo1 VARCHAR(15) NULL,
  17. PRIMARY KEY(id_ks)
  18. );
  19.  
  20. CREATE TABLE konkretne_ksiazki (
  21. id INTEGER(4) UNSIGNED NOT NULL AUTO_INCREMENT,
  22. ksiazki_id_ks INTEGER(4) UNSIGNED NOT NULL,
  23. f_ksiazki INTEGER(4) UNSIGNED NULL,
  24. PRIMARY KEY(id),
  25. INDEX konkretne_ksiazki_FKIndex1(ksiazki_id_ks),
  26. FOREIGN KEY(ksiazki_id_ks)
  27. REFERENCES ksiazki(id_ks)
  28. ON DELETE NO ACTION
  29. ON UPDATE NO ACTION
  30. );
  31.  
  32. CREATE TABLE wypozyczenia (
  33. id_wyp INTEGER(4) UNSIGNED NOT NULL AUTO_INCREMENT,
  34. konkretne_ksiazki_id INTEGER(4) UNSIGNED NOT NULL,
  35. uzytkownicy_id_uz INTEGER(4) UNSIGNED NOT NULL,
  36. PRIMARY KEY(id_wyp),
  37. INDEX wypozyczenia_FKIndex1(uzytkownicy_id_uz),
  38. INDEX wypozyczenia_FKIndex2(konkretne_ksiazki_id),
  39. FOREIGN KEY(uzytkownicy_id_uz)
  40. REFERENCES uzytkownicy(id_uz)
  41. ON DELETE NO ACTION
  42. ON UPDATE NO ACTION,
  43. FOREIGN KEY(konkretne_ksiazki_id)
  44. REFERENCES konkretne_ksiazki(id)
  45. ON DELETE NO ACTION
  46. ON UPDATE NO ACTION
  47. );
  48.  
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.