Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak zaprojektować bazę?
Forum PHP.pl > Forum > Bazy danych > MySQL
Marys91
Witam,
dopiero co zaczynam przygodę z sql i wymyślam sobie różne zadania do ćwiczeń i teraz tak się zastanawiam na jedną relacją. Zakładam, że z takich (przykładowych) tabel nie uda się utworzyć relacji:
users(userid, login, pssword)
dane_firmy(firmaid, nazwa, adres, branza, telefon, mail)

Myślę, że tu by mogła być tylko relacja utworzona tak, że użytkownik jednocześnie rejestruje się i podaje dane firmy, wtedy userid=firmaid. Natomiast teraz tak sobie myślę, że trzeba byłoby utworzyć takie tabele:
users(usersid, login, password)
dane_firmy(firmaid, userid, nazwa, adres, branza, telefon, mail)

Teraz jest sprawa nieco prostsza po wystarczy zrobić users.userid=dane_firmy.userid. Tylko pytanie jak przypisywać w tabeli dane_firmy userid?
d3ut3r
Nie jestem pewien czy dobrze rozumiem. Robisz 2 tabele

users:
-userid
-login
-password

dane_firmy:
-firmaid
-userid
-nazwa
-adres
-branza
-telefon
-mail

I teraz gdy użytkownik dodaje firmę to w polu userid tabeli dane_firmy podaje id użytkownika który tą firmę zakłada. Jeżeli użytkownik w jednym formularzu wypełnia dane firmy i swoje dane rejestracyjne to najpierw dodajesz użytkownika a później za pomocą mysql_insert_id (zakładając, że nie używasz PDO itp.) wyciągasz ostatnie id a następnie dodajesz firmę i w polu userid wpisujesz id które przed chwilą wyciągnąłeś. Mam nadzieję, że coś z tego zrozumiesz smile.gif
askone
Według mnie struktura tabel w bazie powinna być inna. Zgodnie z rzeczywistym stanem rzeczy to użytkownik jest przypisany do firmy. Istnieje tutaj relacja użytkownik -> firma i firma -> wielu użytkowników...

Dlatego też tabele powinny zawierać następujące kolumny:
  1. users:
  2. -userid
  3. -firmid
  4. -login
  5. -password
  6.  
  7. dane_firmy:
  8. -firmid
  9. -nazwa
  10. -adres
  11. -branza
  12. -telefon
  13. -mail


Może zdarzyć się sytuacja, że użytkownik nie będzie przypisany do żadnej firmy wtedy w kolumnie "firmid" w tabeli "users" należy wpisać wartość null. Powyższa struktura opisuje tylko przypadek kiedy użytkownik może być jednocześnie przypisany tylko do jednej firmy. Jeśli jednak chciałbyś mieć możliwość przypisania danego użytkownika do wielu firm musiałbyś skorzystać z tabeli pośredniczącej:
  1. users-firms
  2. -userid
  3. -firmid


Pozdrawiam
thek
Ja bym jeszcze zmienił nieco. Weź pod uwagę freelancerów. Jednocześnie mogą oni pracować dla wielu firm nad ich projektami. Dlatego relacja jest raczej pokroju wiele-do-wielu. Masz więc tabelę firm i użytkowników niezależnie. Do tego tabela łącząca id_usera z id_firmy, ewentualnie posiadająca stopień zależności, czyli czy user w tej firmie to pracownik, zatrudniony na umowę o dzieło lub zlecenie, kierownik działu, czy też szef lub jeszcze inne stanowisko.

W efekcie masz kilka formularzy:
1. Dodanie usera/pracownika - całkowicie niezależne. Sprawdza się czy user już aby nie istnieje.
2. Dodanie firmy - może to zrobić użytkownik posiadający konto, ponieważ nie ma firmy bez pracowników/userów. Sprawdza się czy firma już aby nie istnieje.
3. Przypisanie do firmy przez usera - user zgłasza firmie bycie jej pracownikiem. Firma może to zaakceptować lub odrzucić, zgodnie ze stanem faktycznym.
4. Przypisanie usera przez firmę - firma zgłasza usera jako pracownika. Może on to zaakceptować lub odrzucić, zgodnie ze stanem faktycznym.

To tak na szybko kilka przypadków smile.gif
Marys91
Hmmm... niby prosta sprawa, a wcale nie taka prosta tongue.gif Jeszcze pomyślę nad tym i zademonstruje co wymyśliłem smile.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.