Strona 1 z 1

[MYSQL] pole zmiennej długości

: 20 lis 2012, 21:00
autor: cszawisza
Witam.

Nigdy jakoś specjalnie nie bawiłem się bazami danych, ale nadszedł ten dzień kiedy muszę zrobić mały projekt współpracujący z MYSQL ;)
Otóż chciałbym napisać jakąś małą stronkę w PHP która umożliwiałaby mi wpisywanie do poszczególnych pół tabeli SQL, potrawy :) wszystko miałoby wyglądać tak że w pierwszej kolumnie mam ID w drugiej nazwę w trzeciej składniki:ilość a w czwartej przepis sposób przyrządzania. I teraz mam problem, jaki typ zmiennej nadać polu "składniki" Bo może ich być tam 2 a może być 20 :) czy istnieje sposób aby w to pole wpisać "wskaźnik" do tabeli zawierającej poszczególne składniki z ich ilością? (w osobnych kolumnach)

Wiem że mógłbym wpisać to wszystko jako tekst ale chciałbym mieć 1 informację w 1 polu i stąd takie rozdrabnianie ;)

Pozdrawiam Zawisza

Re: [MYSQL] pole zmiennej długości

: 20 lis 2012, 23:06
autor: rob006
Jeśli chcesz trzymać każdy składnik w oddzielnym polu, musisz stworzyć drugą tabelę, która będzie trzymała tylko składniki, oraz identyfikatory potraw do których się odnoszą, w ten sposób będziesz mógł połączyć listę ze składnikami z potrawą (nie umieszczasz referencji składników w tabeli z potrawami, tylko odwrotnie - przy składnikach wskazujesz do której potrawy należą). Po prostu poczytaj sobie o relacyjnych bazach danych, bo to w sumie są podstawy.
Ale podejrzewam że w twoim wypadku wystarczy po prostu pole tekstowe, gdzie będzie lista składników, ewentualnie w jakimś XMLu albo JSONie.

Re: [MYSQL] pole zmiennej długości

: 21 lis 2012, 11:03
autor: cszawisza
rob006 pisze:Ale podejrzewam że w twoim wypadku wystarczy po prostu pole tekstowe, gdzie będzie lista składników, ewentualnie w jakimś XMLu albo JSONie.
Ja podejrzewam że wystarczyłby zwykły arkusz kalkulacyjny czy cokolwiek na zrobienie całości ;) ale że lubię nauczyć się czegoś sensownego zawsze jak mam ku temu jakąś okazję (a za bardzo nie mam czasu siedzieć i to robić...) pytałem się o jakiś fajny sposób aby to zrealizować.
rob006 pisze:jeśli chcesz trzymać każdy składnik w oddzielnym polu, musisz stworzyć drugą tabelę, która będzie trzymała tylko składniki, oraz identyfikatory potraw do których się odnoszą
Więc rozumiem że ta druga tabela powinna wyglądać tak

składnik1 | id potrawy1
składnik2 | id potrawy1
składnik1 | id potrawy2

może kolejność w bazie będzie inna, ale chciałem tylko zaprezentować sposób rozumowania ;) (wymyśliłem to tak, bo rozumiem że gdyby dopisywać wszystkie id Potraw do jednego pola, to to pole znów nie miałoby ustalonej długości i problem nadal nie byłby rozwiązany...)
Ale jeszcze poczytam o tym, dzięki za naprowadzenie :)

Re: [MYSQL] pole zmiennej długości

: 21 lis 2012, 11:15
autor: rob006
Mniej więcej tak to powinno wyglądać. Chyb że...
Składniki są powtarzalne i np cebula występuje w kilku potrawach, więc nie powinna być zapisywania kilkukrotnie w bazie. Wtedy na starcie tworzysz 2 tabele: tabela z potrawami i tabela ze składnikami, z tym że przy składnikach nie dopisujesz już id potrawy, tylko swoje własne unikalne id (np cebula ma id 1). Potrawy ze składnikami łączysz za pomocą trzeciej tabeli z 2 kolumnami: id potrawy i id składnika. Dzięki niej możesz połączyć potrawy ze składnikami w ten sposób, że potrawa może mieć wiele składników, a jednocześnie jeden składnik może być częścią wielu potraw.

Re: [MYSQL] pole zmiennej długości

: 21 lis 2012, 12:23
autor: ethanak
W skrócie po prostu: "relacja wiele do wielu" i pod tym hasłem szukać :)