Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kolekcje w MySQL...
sonicius
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 2.02.2006

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


Pokaże o co mi chodzi na prostym przykładzie

Mam 2 tabele:
1) Kursy
- id_kursu
- dzialy
2) Dzialy
- id_dzialu
- nazwa_dzialu

Wystepuje tu refernecja dzialy - id_dzialu. Teraz problem polega na tym, ze dzialow moze byc sporo, ale przy tym moze ich nalezec zalozmy 10 do danego kursu. Jak rozwiazać ten problem w MySQL (wiem, że po Oracle występują takie obiekty jak kolekcje). Defakto najprostrzy przyklad tego problemu to np. klient Kowalski w tabeli klienci i referencja adresy do tabeli adresów, ale np. Kowalski ma tych adresów 3. (hipotetyczna sytuacja).
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
spenalzo
post
Post #2





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Tworzysz sobie dodatkową tabele, np.
Kursy_Dzialy
- id_dzial
- id_kurs
czyli relacja wiele do wielu.


--------------------

Go to the top of the page
+Quote Post
sonicius
post
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 2.02.2006

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


Mógłbyś jakoś bardziej obrazowo pokazać teraz relacje między tymi trzema tabelami ?
Go to the top of the page
+Quote Post
spenalzo
post
Post #4





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Należałby troche zmodyfikować obydwie tabele, co mogłoby wygladać tak:

Kursy
Kod
id | costam
1 | aaa
2 | bbb
3 | ccc


Dzialy
Kod
id | nazwa_dzialu
11 | aaa
12 | aaa


a tabela łącząca tak:
Kod
id_kursu | id_dzialu
1 | 12
1 | 11
3 | 11
2 | 12


--------------------

Go to the top of the page
+Quote Post
sonicius
post
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 2.02.2006

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


To jeszcze tylko jak relacje bedą wyglądały ?
Go to the top of the page
+Quote Post
spenalzo
post
Post #6





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


A samemu pomyśleć to nie łaska? tongue.gif


--------------------

Go to the top of the page
+Quote Post
sonicius
post
Post #7





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 2.02.2006

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


O tej godzinie zdaje się na innych ;P
Go to the top of the page
+Quote Post
mhs
post
Post #8





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


http://forum.php.pl/index.php?showtopic=41274

Nie dawno @kociou1 wysłał na forum posta w którym jest napisane co nieco o baza danyh. Co prawda jeszcze tego nie przeglądałem, ale wydaje mi się, że z cała pewnością przyda Ci się lektura z modelu relacyjnego.

Ewentualnie zapraszam do skorzystania z tego linku: http://db.tigra-system.pl/art.php?id=16

edit:

Cytat
O tej godzinie zdaje się na innych ;P
daleko nie zajdziesz z taką postawą

Ten post edytował mhs 2.02.2006, 22:21:18
Go to the top of the page
+Quote Post
sonicius
post
Post #9





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 2.02.2006

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


Postawa ta była czystym żartem. A po drugie model relacyjny względnie znam chodzi mi tu o konkretne rozwiązanie problemu.
Go to the top of the page
+Quote Post
mhs
post
Post #10





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


Cytat(sonicius @ 2006-02-02 23:23:25)
Postawa ta była czystym żartem. A po drugie model relacyjny względnie znam chodzi mi tu o konkretne rozwiązanie problemu.

Konkretne rozwiązanie zaproponował @spenalzo

Skoro względnie model relacyjny znasz nie powinieneś mieć kłopotów z zdefiniowaniem relacji wiele do wielu i jej zastosowaniem.
Go to the top of the page
+Quote Post
sonicius
post
Post #11





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 2.02.2006

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


Widzisz jakie to bez problemowe, mimo to nie napiszesz tego w paru zdaniach, tylko wysilasz sie na obrazaniu innych uzytkownikow. Slynna niekonkretna pomoc.
Go to the top of the page
+Quote Post
spenalzo
post
Post #12





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Tu masz rozwiązanie problemu, dalsza dyskusja jest zbędna.

http://forum.php.pl/index.php?showtopic=41...=0&#entry229091

Może jeszcze zapytania, kod php i dokumentacje mamy napisać? :roll2:

Ten post edytował spenalzo 2.02.2006, 22:33:16


--------------------

Go to the top of the page
+Quote Post
mhs
post
Post #13





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


Mógłbym Ci od ręki napisać kilka stron na temat modelu relacyjnego. Jednak szkoda mojego czasu bym pisał coś co już wiele razy zostało napisane. Wystarczy trochę woli, google i poszukania informacji na ten temat.

Jeżeli chodzi o konkretną pomoc to postarałem się znaleźć linki i dać Ci byś sobie tylko mógł kliknać i poczytać na ten temat. To jest moja konkretna pomoc dla Ciebie. Ale chyba Ci się nie chce z niej skorzystać.

EOT

Pozdrawiam.
Go to the top of the page
+Quote Post
sonicius
post
Post #14





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 2.02.2006

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


Czy ja Cie prosze o to abys od reki wypisywal mi wszystko na temat relacyjnych baz danych. Chce sie tylko dowiedziec jak w praktyce wyglada relacja wiele-do wielu z zastosowaniem tabeli łączącej. Przegladalem te materialy (na ktore jeszcze nie spojzales). Jednak to co tam jest napisane na temat tej relacji to oczywista teoria. Innymi slowy wiem po co to jest ale nigdy nie stosowalem w praktyce a przykladu na 3 byle tabelach z relacjami nie znalazlem.
Go to the top of the page
+Quote Post
mhs
post
Post #15





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


Relacja wiele do wielu zachodzi wtedy, gdy pojedynczemu rekordowi w tabeli podstawowej odpowiada jeden lub więcej rekordów w tabeli związanej, a pojedynczemu rekordowi w tabeli związanej odpowiada jeden lub więcej rekordów w tabeli podstawowej.

Wyjdźmy od czegoś takiego. Masz dwie tabele powiedzmy: tabela towary oraz zamówienia. W tabeli towary przechowujemy jakieś tam dane dotyczące produtków, które sprzedajemy, np. nazwa, opis, sww,... Masz drugą tabele: zamówienia, w której przechowujesz informacje o zamówieniach produktów przez danych klientów, np. data zamówienia, data realizacji,...

Musisz te dwa obiekty teraz ze sobą połaczyć, przy czym musisz uwzględnić następujący warunek: do jednego zamówienia może być przypisane wiele produktów, natomiast jeden produkt może być przypisany do wielu zamówień.

Wykorzystujesz do tego tzw. tabelę łączącą, w której skład wchodzą klucze podstawowe tabel towary i zamówienia (bo po czymś musimy identyfikować co to są zaproduktu lub jakie zamówienia). Dodatkowo mogę wskład tabeli łączącej wchodzić dodatkowe pola typu cena (by móc określić jaka obowiązywała cena w danym dniu dokonania zamówienia) lub ilość zamówionych towarów.

Na podstawie takiego modelu tworzysz następującą strukturę bazy danych:

  1. CREATE TABLE TOWARY (
  2. t_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3. nazwa VARCHAR(255) NULL,
  4. opis TEXT NULL,
  5. cena DECIMAL(10,2) NULL,
  6. PRIMARY KEY(t_id)
  7. );
  8.  
  9. CREATE TABLE TOWARY__ZAMOWIENIA (
  10. t_id INTEGER UNSIGNED NOT NULL,
  11. z_id INTEGER UNSIGNED NOT NULL,
  12. cena DECIMAL(10,2) NULL,
  13. ilosc FLOAT NULL,
  14. PRIMARY KEY(t_id, z_id),
  15. INDEX TOWARY_has_ZAMOWIENIA_FKIndex1(t_id),
  16. INDEX TOWARY_has_ZAMOWIENIA_FKIndex2(z_id)
  17. );
  18.  
  19. CREATE TABLE ZAMOWIENIA (
  20. z_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  21. data_zamowienia DATE NULL,
  22. data_realizacji DATE NULL,
  23. PRIMARY KEY(z_id)
  24. );


Teraz już się wyjaśniło - mam nadzieję, że pomogłem.

Pozdrawiam.
Go to the top of the page
+Quote Post
sonicius
post
Post #16





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 2.02.2006

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


No naprawde jestem pod wrażeniem aarambo.gif
Dzięki
Go to the top of the page
+Quote Post
SongoQ
post
Post #17





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Praktycznie tabela typu INNODB

A tak dodajesz do tabeli relacje

  1. ALTER TABLE tabela
  2. ADD CONSTRAINT fk FOREIGN KEY (idf) REFERENCES tabela_f (pole_f);


Jak bys nie wiedzial dalej co jak oznacza to juz nie ma rady, wkoncu trzeba otworzyc manual i przeczytac.

--- Dodane ---
@mhs w Twoim przykladzie nie ma relacji


--------------------
Go to the top of the page
+Quote Post
Demiurg
post
Post #18





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 2.02.2006

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


Poczytalem sobie troszke co tutaj wklejaliscie itd;)
Mysle ze koledze chodzi chyba o inna sytuacje a mianowicie tabela przejsciowa przydalaby sie jezeli załózmy mamy 20 rozdziałów i ileś kursow. I te kursy korzystaja z tych rozdziałów w rózny sposób. Jednak jezeli mamy dla kazdego kursu stworzyc nowe rozdzialy tak ze np
Kurs 1 ma Rozdzial 1 Rozdzial 2 Rozdzial 3
a Kurs 2 Rozdzial_kurs2_1 ....... Rozdzial_kurs2_ 10
i zbudowac baze zeby nie bylo nadmiernej ilosci wierszy to jest to problem bez stosowanie typow obiektowych i kolekcji. I mysle ze wlasnie to jest problem kolegi "soniciusa".
Go to the top of the page
+Quote Post
mhs
post
Post #19





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


Cytat(SongoQ @ 2006-02-03 00:15:32)
--- Dodane ---
@mhs w Twoim przykladzie nie ma relacji

@SongoQ - Możesz powiedzieć co masz na myśli dokładnie - chodzi o to, że w DDL'u nie zdefiniowałem CONSTRAINT'a czy coś innego?
Go to the top of the page
+Quote Post
orson
post
Post #20





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

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


witam ...

nie zastosowałeś FOREIGN KEY ... w twoim przykładzie jest to powiązanie o którym programista musi "pamiętać" ... zastosowanie FOREIGN KEY powoduje że część zadań (update, delete) wykonuje baza ... właściwie w twoim przykładzie trzeba tylko zmienić klucze na FOREIGN KEY i będzie git ...

pozdrawiam


--------------------
Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 20.08.2025 - 01:13