1

Temat: relacja 1 do wielu

Witam mam mam problema i nie mogę go rozkminić, mianowicie mam dwie tabele klub i rozgrywki przy czym chciał bym żeby 1 klub mógł uczestniczyć w wielu rozgrywkach tak jak w rzeczywistości. Problem w tym że w tabeli klub mam tylko jedną komórkę na rozgrywki. Wiem że istnieją relacje 1 do wielu ale nie bardzo wiem jak je implementować. Oto jak wyglądają te tabele

CREATE TYPE POZIOM AS ENUM ('PIERWSZA LIGA','LIGA MISTRZOW','LIGA EUROPEJSKA','REPREZENTACJA',);

CREATE TYPE TYP_ROZGR AS ENUM ('LIGOWE','PUCHAROWE');


CREATE TABLE ROZGRYWKI (

    NAZWA_ROZGR VARCHAR (40) PRIMARY KEY,

    RODZAJ_ROZGR TYP_ROZGR NOT NULL,

    POZIOM_ROZGR POZIOM NOT NULL

);


CREATE TABLE KLUB ( 

    ID_ZESP SERIAL PRIMARY KEY,

    NAZWA VARCHAR(30) UNIQUE NOT NULL,

    KRAJ VARCHAR(30) NOT NULL,

    ROZGRYWKI VARCHAR (40),

    FOREIGN KEY (ROZGRYWKI) REFERENCES ROZGRYWKI (NAZWA_ROZGR) ON DELETE CASCADE ON UPDATE CASCADE

);

Jeśli ktoś wie jak to zrobić to prosił bym o rade.
pozdro Sakala

2

Odp: relacja 1 do wielu

NO to chyba masz wiele do wiele bo
a) w jednych rozgrywkach może uczestniczyć wiele klubów
b)jedne klub może uczestniczyć wiele klubów
tak?

CREATE TYPE POZIOM AS ENUM ('PIERWSZA LIGA','LIGA MISTRZOW','LIGA EUROPEJSKA','REPREZENTACJA',);

CREATE TYPE TYP_ROZGR AS ENUM ('LIGOWE','PUCHAROWE');


CREATE TABLE ROZGRYWKI (

    NAZWA_ROZGR VARCHAR (40) PRIMARY KEY,

    RODZAJ_ROZGR TYP_ROZGR NOT NULL,

    POZIOM_ROZGR POZIOM NOT NULL

);


CREATE TABLE KLUB ( 

    ID_ZESP SERIAL PRIMARY KEY,

    NAZWA VARCHAR(30) UNIQUE NOT NULL,

    KRAJ VARCHAR(30) NOT NULL,

);

CREATE TABLE KLUB_ROZGRYWKI(
   ROZGRYWKI VARCHAR(40) REFERNCES ROZGRYWKI (NAZWA_ROZGR),
   ID_ZESPOLU INT REFERENCES  KLUB(ID_ZESP)
)

Przy czym klucze obce w KLUB_ROZGRYWKI  mozesz sobie zrobic tez analogicznie to
"FOREIGN KEY (ROZGRYWKI) REFERENCES ROZGRYWKI (NAZWA_ROZGR) ON DELETE CASCADE ON UPDATE CASCADE"

3

Odp: relacja 1 do wielu

No racja tylko dalej nie bardzo wiem jak np. przypisać 1 klubowi kilka rozgrywek.

4

Odp: relacja 1 do wielu

No za pomocą  relacji klub_rozgrywki

id_zesp,rozgrywki
1          , x
1          ,y
2          ,x
3          ,x
2          ,y


itp itd
Kumasz? Czy ja nie kumam problemu?

5

Odp: relacja 1 do wielu

No dobra ale jak to się ma do inserta:
bo tworze sobie na przykład takie rozgrywki:

insert into rozgrywki values ('EKSTRAKLASA','LIGOWE','PIERWSZA LIGA','EUROPA');
insert into rozgrywki values ('LIGA MISTRZOW','PUCHAROWE','LIGA MISTRZOW','EUROPA');

i tworze sobie kluby:

insert into KLUB values ('201','VFL WOLFSBURG','NIEMCY', 'BUNDESLIGA');
insert into KLUB values ('101','WISLA KRAKOW','POLSKA', 'EKSTRAKLASA');

no i jak bym chciał teraz wolfsburg i wisłę przypisać do ligi mistrzów to jak mam to zrobić?
Idee pojmuje ale nie wiem jak przenieść do bazy.

6

Odp: relacja 1 do wielu

Zrobić jeszcze odpowiedniego inserta to tabeli klub_rozgrywki (z odpowiednimi identyfimatorami)

insert intro klub_rozgrywki values('LIGA MISTRZOW','201');
insert intro klub_rozgrywki values('LIGA MISTRZOW','101');

7

Odp: relacja 1 do wielu

No i o to mi chodziło dzięki stary.
Czasami na najprostsze rozwiązania najtrudniej wpaść szczególnie jak się nie ma praktyki.