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
 
Start new topic
Odpowiedzi
mhs
post
Post #2





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

Posty w temacie
- sonicius   Kolekcje w MySQL...   2.02.2006, 21:41:12
- - spenalzo   Tworzysz sobie dodatkową tabele, np. Kursy_Dzialy...   2.02.2006, 21:49:44
- - sonicius   Mógłbyś jakoś bardziej obrazowo pokazać teraz rela...   2.02.2006, 21:59:05
- - spenalzo   Należałby troche zmodyfikować obydwie tabele, co m...   2.02.2006, 22:06:09
- - sonicius   To jeszcze tylko jak relacje bedą wyglądały ?   2.02.2006, 22:14:31
- - spenalzo   A samemu pomyśleć to nie łaska?   2.02.2006, 22:15:43
- - sonicius   O tej godzinie zdaje się na innych ;P   2.02.2006, 22:20:02
- - mhs   http://forum.php.pl/index.php?showtopic=41274 Nie...   2.02.2006, 22:20:04
- - sonicius   Postawa ta była czystym żartem. A po drugie model ...   2.02.2006, 22:23:25
- - mhs   Cytat(sonicius @ 2006-02-02 23:23:25)Postawa ...   2.02.2006, 22:26:51
- - sonicius   Widzisz jakie to bez problemowe, mimo to nie napis...   2.02.2006, 22:29:31
- - spenalzo   Tu masz rozwiązanie problemu, dalsza dyskusja jest...   2.02.2006, 22:32:36
- - mhs   Mógłbym Ci od ręki napisać kilka stron na temat mo...   2.02.2006, 22:35:22
- - sonicius   Czy ja Cie prosze o to abys od reki wypisywal mi w...   2.02.2006, 22:46:49
- - mhs   Relacja wiele do wielu zachodzi wtedy, gdy pojedyn...   2.02.2006, 22:56:06
- - sonicius   No naprawde jestem pod wrażeniem Dzięki   2.02.2006, 23:07:42
- - SongoQ   Praktycznie tabela typu INNODB A tak dodajesz do ...   2.02.2006, 23:15:32
- - Demiurg   Poczytalem sobie troszke co tutaj wklejaliscie itd...   2.02.2006, 23:17:18
- - mhs   Cytat(SongoQ @ 2006-02-03 00:15:32)--- Dodane...   3.02.2006, 07:43:26
- - orson   witam ... nie zastosowałeś FOREIGN KEY ... w twoi...   3.02.2006, 08:38:50
- - mhs   Cytat(orson @ 2006-02-03 09:38:50)witam ... ...   3.02.2006, 08:55:35


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 - 02:15