Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Baza danych uczestnikow imprezy - jaka struktura?
Forum PHP.pl > Forum > Bazy danych > MySQL
wmartinez
Witam,
przygotowałem bazę w której umieszczone zostaną dane uczestników pewnej imprezy. Kierowałem się zasada modularnosci, wiec ostatecznie wyszło mniej więcej tak:

  1. tabela uczestnika:
  2. id, imię, nazwisko, funkcja, wiek, dane_kontaktowe_id, zakwaterowanie_id
  3.  
  4. tabela dane_kontaktowe:
  5. id, adres_id, telefon_email_id
  6.  
  7. tabela zakwaterowanie:
  8. id, hotel_id, od_kiedy, do_kiedy
  9.  
  10. tabela adres:
  11. id, ulica, numer_budynku, numer_mieszkania, kod_pocztowy, miejscowosc, kraj_id
  12.  
  13. tabela telefon_email:
  14. id, telefon1, telefon2, adres_email
  15.  
  16. itd. i jeszcze drugie tyle..


Jako ze nie jestem doświadczony w projektowaniu baz, nie jestem przekonany czy taki rozkład ma sens i czy stosuje się coś takiego w praktyce, czy może wystarczy po prostu w jednej tabeli zamieszczać
dane indywidualne uczestnika (t.j. imię, nazwisko, cały adres, telefon, zakwaterowanie itd.) a tylko dane które mogą być przypisane również innym uczestnikom czyli np. kraj, miejscowość, hotel dolaczac do tabeli za pomocą id'kow?
Wszystko fajnie wyglądało na początku, później troszkę schodów miałem z tworzeniem zapytań, ale udało się, a teraz dodaje opcje edycji tych danych i widzę, ze kupę zamieszania z nimi jest.. Czy któryś z doświadczonych tutaj kolegów mógłby coś zasugerować i może z własnego doświadczenia stwierdzić jaki model danych jest korzystniejszy. Będę wdzięczny za wszelkie uwagi.
krzysztof_kf
W twoim przypadku zrobił bym jedną tabele czemu a dlatego że posiadasz tylko same dane adresowe dla poszczególnej osoby nie potrzebnie tworzysz oddzielne tabele dla adresu i dla email np. to nie jest sklep czy jakaś duża aplikacja żeby tworzyć dane cząsteczkowe później relację między nimi .
Mchl
Poza tym masz relacje w złym kierunku. To raczej zakwaterowanie powinno odwoływać się do uczestnika a nie odwrotnie.
wmartinez
@krzysztof_kf: no tutaj racja.. to powiazanie za pomoca tabeli dane_kontaktowe niepotrzebnie mi komplikuje pozniej zapytanie.. to wywale i wstawie po prostu adres_id i telefon_email_id - lub moze w ogole w jednej tabeli tak jak piszesz. Jednak jakos sklaniam sie ku rozdzielaniu takich danych (jak adres, telefony), ale wlasciwie nie wiem co moze mi to dac (hmm troche smiesznie to brzmi) oprocz tego, ze tabela bedzie czytelniejsza (mniejsza), bo i tak sa to dane, ktorych z innymi uczestnikami nie powiaze, a jednak intuicja mowi mi, aby je rozdzielac.. ta sklonnosc do rozbijania rzeczy na mniejsze moduly to pewnie z programowania;)
@Mchl: czy masz na mysli takie powiazanie?:
tabela zakwaterowanie:
uczestnik_id, hotel_id, od_kiedy, do_kiedy

wtedy w sumie latwo zapytac o liste osob w danym hotelu.. nie wspomnialem jednak, ze kazda osoba nalezy rowniez do grupy i ta grupa tez powiazana jest ogolnie z hotelem i zaplanowanym pobytem wiec tak jak jest u mnie obecnie to w skrocie wyglada tak:

  1. tabela uczestnik:
  2. id, imie, nazwisko, .., .., zakwaterowanie_id
  3.  
  4. tabela grupa:
  5. id, nazwa, .., .., zakwaterowanie_id
  6.  
  7. tabela zakwaterowanie:
  8. id, hotel_id, od_kiedy, do_kiedy


Chodzi o to, ze tworzac grupe mozna nadac jej hotel domyslny wraz z domyslnymi datami pobytu tak, ze przy dodawaniu uczestnika do grupy przydzielone bedzie mial zakwaterowanie domyslne, ktore bedzie mozna od razu indywidualnie dla niego zmienic. Z tego powodu uczestnik i grupa odwoluja sie do zakwaterowania a nie odwrotnie.. a jezeli mimo to powinno byc odwrotnie to moglbys prosze mi to wyjasnic, jakos uzasadnic?
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.