![]() |
![]() ![]() |
![]() |
![]()
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 ![]() |
|
|
![]()
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) 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
|
|
|
![]()
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 ![]() |
|
|
![]()
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) |
|
|
![]()
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
|
|
|
![]()
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.
![]() Ten post edytował friday87 16.01.2014, 02:27:05 |
|
|
![]()
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. |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 23:54 |