Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] Czy taka relacja może być ?
friday87
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.01.2014

Ostrzeżenie: (0%)
-----


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

Go to the top of the page
+Quote Post
ctom
post
Post #2





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

Ostrzeżenie: (0%)
-----


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ą


--------------------
Polecam MyDevil hosting idealny dla deweloperów
Go to the top of the page
+Quote Post
friday87
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.01.2014

Ostrzeżenie: (0%)
-----


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

Go to the top of the page
+Quote Post
mmmmmmm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
ctom
post
Post #5





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

Ostrzeżenie: (0%)
-----


@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"


--------------------
Polecam MyDevil hosting idealny dla deweloperów
Go to the top of the page
+Quote Post
friday87
post
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.01.2014

Ostrzeżenie: (0%)
-----


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





Ten post edytował friday87 16.01.2014, 02:27:05
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #7





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
friday87
post
Post #8





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.01.2014

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 23:54