ďťż
 
wiele do wielu ? ďťż
 
wiele do wielu ?
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

wiele do wielu ?



afoka@poczta.onet.pl - 17-05-2006 00:41
wiele do wielu ?
  Mam takie problem, chcialbym zrobic sklep internetowy i w zasadzie
caly uklad juz mam tylko problem z przypisywaniem produktów do
kategori.
Otóz mam jakies drzewko kategorii i tabele z produktami, i chodzi
mi o to aby jeden produkt mógl byc w kilku kategoriach np :
---telewizory
----Producenci
----- Sony
--produkt1
--produkt2 // o ten
produkt cala rzecz sie robija
--produkt3
----- Panasonic
--produkt4
--produkt5
----Ekran
----- LCD
---- 32
--produkt2 // o ten
produkt cala rzecz sie rozbija
--produkt10
--produkt11
---- 28
----- PLAZMA
--- radia

itd.
I moje pytanie brzmi , czy da sie z tym obejsc nie uzywajac
trzeciej tabli typu : id_produktu | id_kategorii (stosowania relacji
wiele do wielu)





=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 17-05-2006 00:41

  afoka@poczta.onet.pl wrote:
> I moje pytanie brzmi , czy da sie z tym obejsc nie uzywajac
> trzeciej tabli typu : id_produktu | id_kategorii (stosowania relacji
> wiele do wielu)
Po pierwsze, czemu z założenia wykluczasz najbardziej oczywiste rozwiązanie?
Nudzi Ci się i chcesz za wszelką cenę wymyślić coś bardziej
skomplikowanego? :->

Po drugie, zastanów się czy aby na pewno jest to struktura drzewiasta. Jeśli
po prostu będziesz miał atrybuty produktu typu "id producenta", "przekątna
ekranu", itp, to nie musisz robić żadnego mapowania, tylko po prostu
będziesz wyświetlał produkty spełniające określone warunki.

--
Michał Kuratczyk




afoka@poczta.onet.pl - 17-05-2006 00:41

  To drzewko które naryswałem to przykład, faktycznie może zamiast
producenci mogłem wybrać jakąś bardziej trafną cechę np: dzwięk
(dolby, stereo, etc) ogólnie jakas inną cechę której nie mam
zdefinowanej przy produkcie.

A jak z wydajnością takiego rozwiązania, używam 4.1.19 więc o
kluczach i zawansowanych opcjach baz danych nie ma mowy i wszystkie
relacje musze organizować kodem ( PHP ). Dziękuje za odpowiedź .
Pozdrawiam




=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 17-05-2006 00:41

  afoka@poczta.onet.pl wrote:
> A jak z wydajnością takiego rozwiązania,
To jest pytanie do Ciebie. Musisz określić jakie operacje będziesz
najczęściej wykonywał, stworzyć schemat (albo fragment schematu), wrzucić
dane testowe, napisać zapytania i sprawdzić. Natomiast nie ma wątpliwości,
że relacyjne bazy danych powstały po to by wykonywać złączenia, więc jeśli
będą problemy, to raczej nie będą wynikać z samego faktu istnienia
dodatkowej tabeli łączącej dwie inne.

> używam 4.1.19 więc o kluczach i zawansowanych opcjach baz danych nie
> ma mowy
Po pierwsze możesz zrobić upgrade. Po drugie bez przesady - MySQL 4.1 ma
parę zaawansowanych opcji, a klucze obce (jeśli je miałeś na myśli), to
chyba jeszcze w 3.23 były.

> wszystkie relacje musze organizować kodem ( PHP ).
Znaczy chcesz integralność danych zapewniać na poziomie PHP? Powodzenia...

--
Michał Kuratczyk





afoka@poczta.onet.pl - 17-05-2006 00:41

  > relacyjne bazy danych powstaly po to by wykonywac zlaczenia, wiec jesli
beda problemy, to raczej nie beda wynikac z samego faktu istnienia
dodatkowej tabeli laczacej dwie inne.

Rozumiem z tego, ze jesli nie zrobie zadnych bledów strukturalnych i
dobrze zaprojektuje wszystkie table i relacje to nie bedzie problemu

> Znaczy chcesz integralnosc danych zapewniac na poziomie PHP? Powodzenia...

Oczywiscie ze np do do wyciagania prduktów danej kateogori uzyje
zlaczen , ale zakladajac, ze mój produkt posiada 15 cech (kazda
to int) , a te z koleii sa przechodwywane w osobnych tabelach (np.
producent, przekatna, dostawca, kolor itd....) to w celu wypisania
rekordów lepiej jest zlaczyc te 15 tabel w jednym zapytaniu czy
wyciagnac najpierw ten pietnascie tabel, wpisac je do jakis
zmiennych (tablic) i potem uzyc przy wyswietlaniu (zakladam ze
kazda z tych tabel ma do 20 rekordów) ??




Matt Z - 17-05-2006 00:41

  Uzytkownik <afoka@poczta.onet.pl> napisal w wiadomosci
news:1147792210.814236.82350@u72g2000cwu.googlegro ups.com...
> lepiej jest zlaczyc te 15 tabel w jednym zapytaniu

tak

--
Matt Z
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SMSy za darmo i wygodnie? do wszystkich polskich sieci?
==> ESik www.esik.prv.pl sprawdz go




=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 18-05-2006 00:16

  afoka@poczta.onet.pl wrote:
>> relacyjne bazy danych powstaly po to by wykonywac zlaczenia, wiec jesli
> beda problemy, to raczej nie beda wynikac z samego faktu istnienia
> dodatkowej tabeli laczacej dwie inne.
> Rozumiem z tego, ze jesli nie zrobie zadnych bledów strukturalnych i
> dobrze zaprojektuje wszystkie table i relacje to nie bedzie problemu
Tak.

> lepiej jest zlaczyc te 15 tabel w jednym zapytaniu czy
> wyciagnac najpierw ten pietnascie tabel, wpisac je do jakis
> zmiennych (tablic) i potem uzyc przy wyswietlaniu
Zdecydowanie złączyć. Zastanów się tylko czy faktycznie potrzebujesz do tego
15 tabel, ale nawet jeśli tak, to lepiej będzie je złączać niż robić
ręcznie to, do czego bazy danych zostały stworzone. Lepiej wykonać jedno
bardziej złożone zapytanie niż 16 prostszych.

--
Michał Kuratczyk




afoka@poczta.onet.pl - 18-05-2006 00:16

  Super. Dziękuje bardzo za wyczerpującą odpowiedź.

Pozostaje mi jeszcze jedna kwestia :
w uprosczeniu, mam dwie przykładowe tabele :

t_towar
id_towar | id_producent | nazwa

oraz
t_producent
id_producent | nazwa

korzystając z MySQL 4.1, który owszem obsługuje klucze obce) ale
tylko teoretycznie bo oprócz ich definiowania nie można wykonywać
żadnych operacji przy ich użyciu, mam tu na myśli np kaskadowe
kasowania tzn jesli kasuje producenta to sam musze zatroszczyc sie o
skasowanie jego produktów ?
Czy mam racje?




=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 18-05-2006 00:16

  afoka@poczta.onet.pl wrote:
> korzystając z MySQL 4.1, który owszem obsługuje klucze obce) ale
> tylko teoretycznie bo oprócz ich definiowania nie można wykonywać
> żadnych operacji przy ich użyciu, mam tu na myśli np kaskadowe
> kasowania tzn jesli kasuje producenta to sam musze zatroszczyc sie o
> skasowanie jego produktów ?
> Czy mam racje?
Rozwiązanie jest proste - nie usuwaj danych. :-)
W tabelach PRODUKTY i PRODUCENCI dodajesz po prostu kolumnę "usunięty"
i w większości operacji zawsze dodajesz warunek ignorowania usuniętych
rekordów (lub tworzysz sobie widoki i z nich korzystasz).

Usuwanie danych z bazy jest generalnie złym pomysłem - uniomożliwia na
przykład tworzenie historycznych raportów, funkcji business intelligence,
itp. Trzy razy się zastanów zanim użyjesz DELETE. A jeśli brakuje Ci
miejsca, albo baza działa za wolno z dużą ilością danych i nie potrafisz
tego poprawić, to zamiast usuwać - przerzucaj je gdzieś indziej (zrób coś
w stylu hurotwni danych, którą potem będziesz mógł rozwinąć w prawdziwą
hurtownię danych).

Jeśli natomiast upierasz się przy usuwaniu, to:

http://dev.mysql.com/doc/refman/4.1/...nstraints.html

CASCADE: Delete or update the row from the parent table and automatically
delete or update the matching rows in the child table. ON DELETE CASCADE is
supported starting from MySQL 3.23.50 and ON UPDATE CASCADE is supported
starting from 4.0.8. Between two tables, you should not define several ON
UPDATE CASCADE clauses that act on the same column in the parent table or
in the child table.

--
Michał Kuratczyk




afoka@poczta.onet.pl - 18-05-2006 00:16

  Hm ciekawe.

Przeczytalem ten artykul i sprwdzilem przyklad, róznica jaka jaka
zauwazylem to typ moje tabele sa MyISAM a ta z przykladu to InnoDB.
Domyslam sie, ze przez moja niewiedze stracilem duzo z
funkcjonalnosci mysql'a. Jaka jest róznica pomiedzy tymi typami ?




=?UTF-8?B?UGF3ZcWCIE1hdGVqc2tp?= - 18-05-2006 00:16

  afoka@poczta.onet.pl wrote:
> Hm ciekawe.
>
> Przeczytalem ten artykul i sprwdzilem przyklad, róznica jaka jaka
> zauwazylem to typ moje tabele sa MyISAM a ta z przykladu to InnoDB.
> Domyslam sie, ze przez moja niewiedze stracilem duzo z
> funkcjonalnosci mysql'a. Jaka jest róznica pomiedzy tymi typami ?

Szybkość.

--
P.M.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [MySQL] Jak wybrac wiele elementow powiazanych z jednym elementem innej tablicy? =?ISO-8859-2?Q?[MS_SQL]_update_wielu_p=F3l_na_raz_z_selecta?= [MySQL]: Odzyskanie z pliku zawierającego wiele baz danych tylko jednej wybranej bazy Export z wielu baz do jednej-MySql jakie narzędzie? =?iso-8859-2?q?miejsca_w_Internecie,_gdzie_jest_wielu_grafik= F3w_:)?= [mysql 5] dodanie wielu rekordow po stronie bazy 2 tabele w relacji 1 do wielu - tylko jeden wiersz dynamiczny sql - pobieranie danych z wielu tabel [MS SQL] count distinct na wielu kolumnach select dane z wielu dni z jednej godziny
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • marcelq.xlx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com