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ć
