Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Czy taka relacja może być ?
Forum PHP.pl > Forum > Bazy danych > MySQL
friday87
Witam,
Jest to mój pierwszy post więc witam. W raz z rozwojem projektu zapewne będą dodatkowe pytania.

Mam pytanie do osób z doświadczeniem czy zaprojektowane relacje tabel w mojej bazie (załączony obrazek) są prawidłowe. A więc mamy produkt, który posiada przypisaną tabelę
z listą atrybutów, a dalej same atrybuty z dodatkową tabelą wiele do wielu. Najważniejsze chyba do napisania że różne produkty będą mieć różne atrybuty, nigdy takie same.

Zastanawiam się mocno czy tabela atrybuty_produktow jest rzeczywiście potrzebna ? Bo jeśli by ją usunąć to tak naprawdę produkt nie ma żadnej listy z tymi atrybutami prawda ?

Pozdrawiam

ctom
chyba coś przekombinowałeś ...

ja by to zrobił tak ( nie znam założeń Twojego projektu więc poniższe może być błędnym rozwiązaniem) :


T: produkty ( id, kategorie_id , ... itd. )
T: kategorie (id, itd. )
T: atrybuty_produtkow (id , produkty_id, atrybuty_id )
T: atrybuty (id, cena, nazwa, opis)

oczywiście do atrybuty_produktow możesz dodawać ile chcesz atrybutów (atrybuty_id) dla danego produktu ( produkty_id)


Cytat(friday87 @ 14.01.2014, 16:02:45 ) *
Najważniejsze chyba do napisania że różne produkty będą mieć różne atrybuty, nigdy takie same.

a to już sobie załatwisz jakąś logiką
friday87
Rzeczywiście, nie pomyślałem żeby podejść to od tej strony. Dzięki za wskazówkę. Idąc dalej tym tropem (załączony obrazek), "tabela_atrybutu" jest chyba potrzebna prawda ? Żeby w późniejszym etapie projektowania móc się odwołać jakoś do tych tabel atrybutów które rzeczywiście występują. Czy to rozwiązanie jest często stosowane, czy jest jakieś inne podejście ? W tej chwili wygląda jakby wszystko miało ręce i nogi.

Pozdrawiam

mmmmmmm
Powiem tak:
Napisz zapytanie, które pokazuje dany produkt wraz ze wszystkimi atrybutami i ich własnościami.
Wtedy przekonasz się, czy masz dobrą strukturę.

Podpowiem: nie masz. Ale wyjdzie ci to jak napiszesz (spróbujesz napisać) zapytanie (nie kod w języku wysokiego poziomu, tylko zapytanie SQL)
ctom
@friday87 jak psiałem wczesniej nie znam szczegółów założeń Twojego produtu ale ja nie zmodyfikowałem przedstawionego przez cicbie sachamtu tylko sprowadziłem go do tych "4 table"
friday87
ctom ok rozumiem, ja również po twojej wskazówce sprowadziłem ją do 4 tabel.

mmmmmmm witaj. Zobacz załączony obrazek. Czy jeśli zadam pytanie poniżej to nie dostanę to o co pytałeś ? Kurde... faktycznie nie mogę w ten sposób załączyć ani w żaden sposób odwołać się do wartości samych atrybutów... ;/ Kurde nie mam pomysłu/doświadczenia jak to przeskoczyć, nie rozumiem logiki jak mogę odwołać się do tego skoro każdy atrybut tabeli ma inną nazwę. Byłoby ok jeśli złączyłbym wszędzie tabele atrybutów w jedno, ale wtedy wiele z wpisów byłoby pustych, a to chyba jest nie wydajne rozwiązanie. Chyba też mógłbym dodać do samych atrybutów id_produktu oraz cene. Ale wtedy musiałbym w samym produkcie dopisać wszystkie atrybuty, a wiele z nich byłoby pustych, a to również chyba nie wydajne oraz zrobiły się bałągan w samych atrybutach... Byłbym wdzięczny za podpowiedź mmmmmmm.

  1. SELECT
  2.  
  3. id,
  4. id_produkty,
  5. id_atrybutu,
  6. tabela_atrybutu,
  7. cena
  8.  
  9. FROM atrybuty_produkty
  10.  
  11. WHERE id_produkty = 5



mmmmmmm
Zrób tylko jedną tabelę z atrybutami. 4 pola :
id,
nazwa_atrybut,
wartosc,
opis (to tylko do technologii)
Tylko id jest INT - reszta VARCHAR(45).
Jeśli będziesz potrzebował zsumować ilość (dla atrybutu nakład), to w tym jednym zapytaniu sobie castujesz. MySQL łyknie wszystko.
Wtedy z tabeli artykuly_produkty mozesz wywalić pole tabela.
friday87
Ok teraz rozumiem jak powinna wyglądać struktura, musiałem to w głowie przede wszystkim poukładać. Czyli moje pierwsze rozwiązanie wymagałoby tak naprawdę 2 zapytań żeby dostać to czego potrzebuje. Jedyne co na plus to organizacja wszystkiego na osobne tabele. Móglbyś rozwinąć "castowanie" ? Wyrzucanie wyników zapytania ? Mógłbyś napisać przykładowe zapytanie ? Jestem ciekawy czy będzie wyglądało standardowo z JOINem, czy zrobisz coś innego. Moja wiedza na temat MySQL nie jest specjalnie zaawansowana, staram się zrozumiem logikę i metody osób bardziej zaawansowanych.

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.