Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów
Relacje jeden do wielu w mysql - Wersja do druku

+- Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów (https://www.webmastertalk.pl)
+-- Dział: Technologie internetowe - tworzenie stron WWW (https://www.webmastertalk.pl/forum-technologie-internetowe-tworzenie-stron-www)
+--- Dział: Programowanie, Bazy danych (https://www.webmastertalk.pl/forum-programowanie-bazy-danych)
+--- Wątek: Relacje jeden do wielu w mysql (/thread-relacje-jeden-do-wielu-w-mysql)



Relacje jeden do wielu w mysql - lukaszm89 - 22-03-2012

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.




RE: Relacje jeden do wielu w mysql - Pedro84 - 22-03-2012

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!