27-08-2009, 03:59
Witam
Stoję właśnie przed pewnym wyborem i proszę Was o radę, które rozwiązanie uważacie za lepsze.
Tworzę stronę, której jednym z elementów jest katalog samochodów. Stworzyłem już bazę danych marek i modeli. Teraz, użytkownicy dodając konkretny samochód mają mieć możliwość zaznaczenia pewnych opcji. Opcje te mają być ustalone przez admina i są "typu binarnego", tzn. albo są, albo nie. Wśród opcji ma być np. klimatyzacja, autamtyczna skrzynia biegów, szyberdach, skórzana tapicarka, wbudowany GPS. Te opcje dodawane są do tabeli pojazdy_opcje, która ma tylko dwa pola: id oraz nazwę opcji.
Nie potrafię się zdecydować między dwoma strategiami zapisywania wybranych opcji. Załóżmy, że z wcześniej wymienionych użytkownik zaznaczył, że ma klimę, skórę i gps. I tak:
Pomysł 1:
W bazie danych dodaję tablicę pojazdy_opcje_wybrane, która ma trzy kolumny: id, id_opcji oraz id_pojazdu. W momencie, kiedy będę potrzebował tych danych (czyli na stronie danego pojazdu) wrzucam szybciutko takie zapytanie:
I dostaję listę wybranych opcji. Jeszcze muszę przerzucając wyniki tego zapytania, dla każdego osobnego znalezionego rekordu wysłać jeszcze zapytanie o nazwę opcji z tablicy pojazdy_opcje.
Problemem tutaj wydaje mi się też wielkość tablicy, bo przy np. 30 opcjach do wyboru i kilkuset pojazdach to ta tablica już będzie spora...
Pomysł 2:
W tablicy pojazdy mamy pole wybrane_opcje, gdzie wrzucamy oddzielane średnikiem identyfikatory opcji. Skomplikowane jest wyciągnięcie tych opcji, bo najpierw muszę wyciągnąć z bazy wartość pola wybrane_opcje, a potem przez explode() i pętle foreach dla każdego identyfikatora opcji wysłać zapytanie do bazy o jego nazwę...
Pomysł 3 (właśnie przyszedł mi do głowy
):
Tablica pojazdy_opcje ma nie dwa, ale trzy pola. Dodatkowe to pojazdy. W tym polu, które ma typ text dodaję oddzielone średnikiem id pojazdów, dla których wybrano konkretne opcje.
Wywołanie danych na stronie jest w miarę proste: muszę znaleźć w bazie te opcje, dla których w polu pojazdy występuje identyfikator pojazdu, czyli mniej więcej coś takiego:
(wiadomo, że tam trzeba jeszcze ten średnik, bo szukająć id=1 znajdę m.in. 101, 23941, 11 itd itd)
To chyba jest najlepsze rozwiązanie... Łatwe do użycia, jednym zapytaniem znajduję wszystkie zaznaczone opcje, no i nie tworzę kolejnych 20 rekordów w bazie dla każdego pojazdu.
Proszę o Wasze opinie a propos tego problemu i z góry dzięki za pomoc
Pozdrawiam
Przemek
Stoję właśnie przed pewnym wyborem i proszę Was o radę, które rozwiązanie uważacie za lepsze.
Tworzę stronę, której jednym z elementów jest katalog samochodów. Stworzyłem już bazę danych marek i modeli. Teraz, użytkownicy dodając konkretny samochód mają mieć możliwość zaznaczenia pewnych opcji. Opcje te mają być ustalone przez admina i są "typu binarnego", tzn. albo są, albo nie. Wśród opcji ma być np. klimatyzacja, autamtyczna skrzynia biegów, szyberdach, skórzana tapicarka, wbudowany GPS. Te opcje dodawane są do tabeli pojazdy_opcje, która ma tylko dwa pola: id oraz nazwę opcji.
Nie potrafię się zdecydować między dwoma strategiami zapisywania wybranych opcji. Załóżmy, że z wcześniej wymienionych użytkownik zaznaczył, że ma klimę, skórę i gps. I tak:
Pomysł 1:
W bazie danych dodaję tablicę pojazdy_opcje_wybrane, która ma trzy kolumny: id, id_opcji oraz id_pojazdu. W momencie, kiedy będę potrzebował tych danych (czyli na stronie danego pojazdu) wrzucam szybciutko takie zapytanie:
Kod PHP:
SELECT id_opcji FROM pojazdy_opcje_wybrane WHERE id_pojazdu=$_GET['pojazd']
I dostaję listę wybranych opcji. Jeszcze muszę przerzucając wyniki tego zapytania, dla każdego osobnego znalezionego rekordu wysłać jeszcze zapytanie o nazwę opcji z tablicy pojazdy_opcje.
Problemem tutaj wydaje mi się też wielkość tablicy, bo przy np. 30 opcjach do wyboru i kilkuset pojazdach to ta tablica już będzie spora...
Pomysł 2:
W tablicy pojazdy mamy pole wybrane_opcje, gdzie wrzucamy oddzielane średnikiem identyfikatory opcji. Skomplikowane jest wyciągnięcie tych opcji, bo najpierw muszę wyciągnąć z bazy wartość pola wybrane_opcje, a potem przez explode() i pętle foreach dla każdego identyfikatora opcji wysłać zapytanie do bazy o jego nazwę...
Pomysł 3 (właśnie przyszedł mi do głowy

Tablica pojazdy_opcje ma nie dwa, ale trzy pola. Dodatkowe to pojazdy. W tym polu, które ma typ text dodaję oddzielone średnikiem id pojazdów, dla których wybrano konkretne opcje.
Wywołanie danych na stronie jest w miarę proste: muszę znaleźć w bazie te opcje, dla których w polu pojazdy występuje identyfikator pojazdu, czyli mniej więcej coś takiego:
Kod PHP:
SELECT nazwa_opcji FROM pojazdy_opcje WHERE pojazdy LIKE $_GET['pojazd']
(wiadomo, że tam trzeba jeszcze ten średnik, bo szukająć id=1 znajdę m.in. 101, 23941, 11 itd itd)
To chyba jest najlepsze rozwiązanie... Łatwe do użycia, jednym zapytaniem znajduję wszystkie zaznaczone opcje, no i nie tworzę kolejnych 20 rekordów w bazie dla każdego pojazdu.
Proszę o Wasze opinie a propos tego problemu i z góry dzięki za pomoc

Pozdrawiam
Przemek