![]() |
![]() |
![]()
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). |
|
|
![]() |
![]()
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. -------------------- |
|
|
![]()
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 ?
|
|
|
![]()
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 -------------------- |
|
|
![]()
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 ?
|
|
|
![]()
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?
![]() -------------------- |
|
|
![]()
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
|
|
|
![]()
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 |
|
|
![]()
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.
|
|
|
![]()
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. |
|
|
![]()
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.
|
|
|
![]()
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...=0entry229091 Może jeszcze zapytania, kod php i dokumentacje mamy napisać? :roll2: Ten post edytował spenalzo 2.02.2006, 22:33:16 -------------------- |
|
|
![]()
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. |
|
|
![]()
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.
|
|
|
![]()
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:
Teraz już się wyjaśniło - mam nadzieję, że pomogłem. Pozdrawiam. |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 1 Dołączył: 2.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
No naprawde jestem pod wrażeniem
![]() Dzięki |
|
|
![]()
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
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 -------------------- |
|
|
![]()
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". |
|
|
![]()
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? |
|
|
![]()
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.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 01:13 |