Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Relacje jeden do wielu w mysql
#1
Witam,

Jestem początkującym więc proszę o wyrozumiałośćSmile Stworzyłem bazę której model zamieszczam w załączniku. Problem jest w tym, że do jednego użytkownika może być przypisanych więcej niż jeden sprzęt..wiem że trzeba to zrobić za pomocą relacji jeden do wielu natomiast nie wiem jak zrobić te relacje w mysql. Co prawda w internecie jest dużo teorii na ten temat, ale jakby ktoś mi mógł pomóc w moim przypadku będę bardo wdzięczny.



Załączone pliki
.png   baza.png (Rozmiar: 32.33 KB / Pobrań: 6)
Odpowiedz
#2
Relacje 1:m pomiędzy obiektami najlepiej jest zrobić za pomocą tzw. "pivot tables", ale jest też inne podejście.

W przypadku relacji 1:1 takową można spokojnie zrobić za pomocą istniejących tabel, w przypadku relacji 1:m, m:m są dwa podejścia:
1. wykorzystanie "pivot tables" i kluczy obcych
2. w przypadku naprawdę obciążonych serwisów często normalizację się olewa i stosuje np. pole, w którym jest przetrzymywana zserializowana tablica.

Jak mniemam, dla Ciebie lepsze będzie wyjście pierwsze, inaczej byś o to nie pytał.

A więc. Po pierwsze, kilka rad:
1. przyjmij nazewnictwo anglieskie - uwierz mi same plusy - np. przy mapowaniu na obiekty z użyciem jakiegoś ORMa, np. Doctrine, napotkasz wiele problemów z generowaniem kodu. Poza tym, świat IT mówi po angielsku.
2. Jedna konwencja nazewnictwa. Taką konwencję? OK. Ale wówczas, tabele nazywaj tak samo, nie stosuj żadnych durnych skrótów typu gwar.

Przykład. Masz dwa obiekty: User oraz Picture. Jeden user może mieć wiele zdjęć, ale jedno zdjęcie może należeć do kilku userów. Mówiąc o zdjęciu mam na myśli obiekt z bazy danych, nie fizyczną fotkę. Z więc masz tabele:
Kod:
User:
ID    INT AI PK
Username    VARCHAR(100) UQ

Picture:
ID    INT PK
Filename    VARCHAR(20)

tworzysz sobie dodatkowo następującą tablicę:
Kod:
UserPictures: // pamiętaj, żeby obiekt nadrzędny był pierwszy w nazwie - oczywiście ma to znaczenie tylko z punktu widzenia projektu
ID    INT AI PK
UserID    INT
PictureID    INT

dla zapewnienia integralności bazy ustaw sobie klucze obce w nowo utworzonej tabeli:
Kod:
UserID => ID z User
PictureID => ID z Picture

Voila!
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Jak sprawdzić czy adres www znajduje sie w bazie mysql? jarekcda 8 9,044 13-05-2017, 01:02
Ostatni post: miketodson255
  Optymalizacja MySQL-a tomek_00 1 3,932 01-09-2013, 13:31
Ostatni post: hieroshima
  [MySQL] Struktura bazy dla słownika msx83 2 3,931 24-08-2013, 16:26
Ostatni post: msx83
  Komunikacja PHP z MySQL na serwerze pawstrze 5 6,457 16-07-2013, 15:58
Ostatni post: Engine
  [MySQL] wyszukiwarka problem darlowiak 3 3,564 13-06-2013, 12:58
Ostatni post: darlowiak

Skocz do:


Użytkownicy przeglądający ten wątek:
Sponsorzy i przyjaciele
SeoHost.pl