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

(IMG:http://www.at7.website.pl/pytanie.png)
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ą
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

(IMG:http://www.at7.website.pl/pytanie2.png)
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"
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



(IMG:http://www.at7.website.pl/pytanie3.png)

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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 01:38