Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Relacyjne bazy danych
Forum PHP.pl > Forum > Bazy danych
pojas
Nie mogę załapać jak korzystać z relacyjnych baz danych.

Przykładowo jeśli chciałbym stronę, gdzie dodaję informacje o sobie, tj. numer gg. Mając na uwadze, że strona może być rozbudowywana powinienem stworzyć kilka tabel ze sobą powiązanych? Takie zabezpieczenie jeśli za miesiąc zechcę dodać też możliwość wpisywania adresu skypa.

Korzystam z DBDESINGERahttp://img129.imageshack.us/img129/649/modelhi5.png

  1. CREATE TABLE person (
  2. idperson INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3. name VARCHAR(255) NOT NULL,
  4. PRIMARY KEY(idperson)
  5. )
  6. TYPE=InnoDB;
  7.  
  8. CREATE TABLE messengers (
  9. idmessengers INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  10. name VARCHAR(255) NOT NULL,
  11. description TEXT NULL,
  12. PRIMARY KEY(idmessengers)
  13. )
  14. TYPE=InnoDB;
  15.  
  16. CREATE TABLE messenger (
  17. idmessenger INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  18. person_idperson INTEGER UNSIGNED NOT NULL,
  19. messengers_idmessengers INTEGER UNSIGNED NOT NULL,
  20. address VARCHAR(255) NOT NULL,
  21. PRIMARY KEY(idmessenger),
  22. INDEX messenger_FKIndex1(messengers_idmessengers),
  23. INDEX messenger_FKIndex2(person_idperson),
  24. FOREIGN KEY(messengers_idmessengers)
  25. REFERENCES messengers(idmessengers) ON DELETE NO ACTION ON UPDATE NO ACTION,
  26. FOREIGN KEY(person_idperson)
  27. REFERENCES person(idperson) ON DELETE NO ACTION ON UPDATE NO ACTION
  28. )
  29. TYPE=InnoDB;


Jest to sensowne rozwiązanie?

Teraz po dodaniu kilku wpisów chciałbym wyszukać wpis z
adresem jakiegoś komunikatora (posiadam nazwę - zmienna) dla pewnej osoby (posiadam login - kolejna zmienna).

Nie potrafię napisać takiego zapytanie, bo większość kursów kończy się na prostym SELECT ...;
dr_bonzo
Rozwiazanie jest ok (co najwyzej czepilbym sie nazw tabel i kolumn: people, messengers, messengers_people ), relacje wiele do wielu (user ma wiele komunikatorow, i numer w tym samym komunikatorze jest posiadany przez usera)

Cchesz numer/konto dla wybranej osoby dla wybranego komunikatora?

  1. SELECT p.name AS person_name, m.name AS messenger_name, mp.address AS account FROM messenger AS mp JOIN messengers AS m ON mp.messengers_idmessengers = m.idmessengers JOIN person p ON p.idperson = mp.person_idperson WHERE p.name = $nazwa_usera AND m.name = $nazwa_komunikatora


(zmien nazwy tabel bo piszac to query ciagle sie myle, co oznacza ze nie sa najlepsze smile.gif)
pojas
1. Co sądzisz(cie) o takim planie? DBDesigner4 PNG / SQL. Co głupio nazwane, co jest bez sensu, a co dodać/zmienić/usunąć itd.?

2. Jakie są rodzaje relacji? ( 1:1, 1:n, n:m itp. nie wiele mi mówi ). Użyłem wszędzie 1:n non-identifyng.

3. Jak przechowywac informacje typu boolean w bazie danych? (VARCHAR - 0 lub 1, czy INTEGER 0 lub 1 czy jakos inaczej?)

4. Czy dzięki relacji można stworzyć takie dwie tabele (np. person i session), które są tak powiązane, ze nie mogą istnieś dwa wpisy o takie samej wartości pewnego pola (np. ID użytkownika)? Czyli niemożliwe jest ze dla użytkownika o ID == 5 istniały dwa wpisy w tabeli session o polu person_id == 5.

Proszę o wszelkie wskazówki dot. takiego planowania bazy (i strony)
Z gory dzieki za wszelka odpowiedz! guitar.gif
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.