Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: struktura bazy
Forum PHP.pl > Forum > Bazy danych > MySQL
kleszczoscisk
Witam

Proszę o radę.

Zamierzam zrobić prostą stronę w PHP/MySQL - katalog dzieł i ich twórców, w bazie będą przechowywane m.in. dane o obrazach (tytuł,kategoria,technika,wymiary,cena itd ok. 10 zmiennych).

Czy lepiej zrobić jedną tabelę czy raczej zrobić kilka np:
obrazy (id,tytul,autor)
autor (id,autor)
kategoria (id,kategoria)
technika (id,technika)
i łączyć je za pomocą LEFT JOIN ?

Prawie wszędzie gdzie czytam podkreśla się, żeby projektować bazę optymalnie, że wielokrotne złączenia obciążają serwer, że zaleca się nie więcej niż 3 złączenia w jednym zapytaniu. Z kolei jak patrzę na strukturę baz znanych sklepów np. osCommerce, to są tam osobne tabele; produkty, kategorie, producenci itp.
_olo_1984
napewno osobno bym zrobił obrazy i autor. Zapewne zdecydowanie więcej będzie autorów niż kategorii i technik. Zależy też oczywiście jak bardzo będą rozbudowane tabele kategorie i techniki (bo jeżeli to tylko id-opis-naza, i ma ich być stosunkowo niewiele) to nie opłaca się.
melkorm
musisz sobie zadać pytanie czy chcesz posiadać możliwość łatwej edycji autorów / katygorii / technik i ich dodawania bo np. chcesz zmienić nazwe techniki gdy zrobisz 1 rozwiązaniem byś musiał w każdym wierszu zmienić technike a tak tylko zmieniasz w tabeli techniki anzwe i wszystko gra :] Wszystko zależy od Ciebie. Sądze że drugi sposób jest dobry chociaż wydaje się że troche dużo tych joinów jak na 1 zapytanie ;] Ale daje to Tobie wiekszą i łatwiejszą mozliwość edycji ;p Np jeżeli wiesz że będziesz mieć np. 3 katygorie możesz dać pole ENUM ;] I później z dodaniem nowej katygorii też by nei było chyba problemu zależy jak się nastawiasz na przyszłosć i jak bardzo będziesz rozbudowywać strone i czy w ogóle będziesz ją rozbudowywać itp ;P

Tyle ode mnie mam nadzieje że pomogłem ;]
kleszczoscisk
Cytat(_olo_1984 @ 10.10.2008, 19:28:15 ) *
napewno osobno bym zrobił obrazy i autor. Zapewne zdecydowanie więcej będzie autorów niż kategorii i technik. Zależy też oczywiście jak bardzo będą rozbudowane tabele kategorie i techniki (bo jeżeli to tylko id-opis-naza, i ma ich być stosunkowo niewiele) to nie opłaca się.

Dzięki za odpowiedź.
Obrazów będzie najwięcej, autorów odpowiednio mniej (przykładowo każdy będzie autorem 10 obrazów), kategorii określona ilość <10, podobnie technik i podobrazi. Ceny i wymiary - tego będzie dużo i różne kombinacje.
Czy dobrze rozumuję: jeśli określonych danych ma być dużo należy do tego tworzyć dla nich osobne tabele ?

Cytat(melkorm @ 10.10.2008, 19:29:16 ) *
musisz sobie zadać pytanie czy chcesz posiadać możliwość łatwej edycji autorów / katygorii / technik i ich dodawania bo np. chcesz zmienić nazwe techniki gdy zrobisz 1 rozwiązaniem byś musiał w każdym wierszu zmienić technike a tak tylko zmieniasz w tabeli techniki anzwe i wszystko gra :] Wszystko zależy od Ciebie. Sądze że drugi sposób jest dobry chociaż wydaje się że troche dużo tych joinów jak na 1 zapytanie ;] Ale daje to Tobie wiekszą i łatwiejszą mozliwość edycji ;p Np jeżeli wiesz że będziesz mieć np. 3 katygorie możesz dać pole ENUM ;] I później z dodaniem nowej katygorii też by nei było chyba problemu zależy jak się nastawiasz na przyszłosć i jak bardzo będziesz rozbudowywać strone i czy w ogóle będziesz ją rozbudowywać itp ;P

Tyle ode mnie mam nadzieje że pomogłem ;]

Dzieki
założenie jest takie, że ludzie będą się rejestrować, logować i dodawać swoje dzieła przez formularze.
Niektóre cechy (np. kategoria,technika,podobrazie) będą już z góry zdefiniowane i będzie ich określona, niewielka ilość. Tak sobie myślę, że dla tych danych chyba nie ma sensu robić osobnych tabel bo przy każdym zapytaniu (wywołującym określone dzieło) musiałbym robić tyle LEFT JOIN-ów ile jest tych tabel (?) Chyba lepiej będzie w tabeli "dzieła" dodać kolumny...?
Autorów dzieł będzie odpowiednio mniej, tak jak pisałem post wyżej; czy w takim razie tabela autorzy powinna zawierać dwie kolumny: autor_id, autor_nazwisko , gdzie autor_id będzie identyfikatorem obrazu (i przy zapytaniu wyświetlającym obraz robić wlasnie LEFT JOIN z tabelą autorzy?)
melkorm
Cytat
(np. kategoria,technika,podobrazie) będą już z góry zdefiniowane i będzie ich określona, niewielka ilość.


możesz trzymac tabelki zt ymi parametrami i np w polu wybory wyświetlać je z tej tabelki a dodawać jako nazwe - string - do tabeli obrazu wtedy masz łatwą możliwość dodanai nowego pola a unikniesz join'ów.

Co do autorów hm możesz zrobić to na zasadzie id_autora -> obraz czyli trzymać id_autora w tabelce obrazów. bo lepiej zrobić relacje 1 do wielu czyli autor do dzieł snitch.gif
kleszczoscisk
Cytat(melkorm @ 10.10.2008, 19:51:19 ) *
możesz trzymac tabelki zt ymi parametrami i np w polu wybory wyświetlać je z tej tabelki a dodawać jako nazwe - string - do tabeli obrazu wtedy masz łatwą możliwość dodanai nowego pola a unikniesz join'ów.

No wlasnie tak zacząłem robić smile.gif
Cytat(melkorm @ 10.10.2008, 19:51:19 ) *
Co do autorów hm możesz zrobić to na zasadzie id_autora -> obraz czyli trzymać id_autora w tabelce obrazów. bo lepiej zrobić relacje 1 do wielu czyli autor do dzieł snitch.gif

czyli:
dziela (id,tytul,artysta,itd...)
artysta (artysta_id,artysta_name)
i
Kod
$zapytanie = ("SELECT
         dziela.id,
         dziela.tytul,
     dziela.artysta, (...)
         artysta.artysta_id,
         artysta.artysta_name,  
         FROM `dziela`
         LEFT  JOIN `artysta` ON dziela.id = artysta.artysta_id  ");

Przepraszam, że nie formatuję odpowiednio postu ale nie dzialają mi te przyciski "PHP" "Manual" itd, albo nie wiem jak tego używać?
melkorm
  1. $zapytanie = ("SELECT * FROM `dziela` LEFT JOIN `artysta` ON dziela.artysta_id = artysta.artysta_id ");


no coś w tym stylu ;] hm jeżeli używasz Opery to mi też nei działają i wpisuje je normalnei z palca dla php to w kwadratowe php i zamknięcie odpowiednio /php dla sql to samo .... tongue.gif
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.