1

Temat: relacje między tabelami

Witam ma pisze bazę która ma obsługiwać punkt bukmacherski na razie jest to szkielet ale już mam problemy.
Dopiero zaczynam zabawę z sqlem i nie wiem za bardzo na jakiej zasadzie mam ustalać klucze w relacjach między tabelami, chodzi mi o klucze obce.
Oto kod tego co do tej pory wymyśliłem, niestety jak próbuje zwrócić coś z tabel połączonych key joinem to mi błąd wyskakuje w zasadzie to działa mi tylko natural join.
Jak ktoś wie jak mogło by to wyglądać albo zna jakieś dobre w miarę zrozumiałe źródło które ten temat wyjaśnia to będę wdzięczny.

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

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

CREATE TYPE FAZA AS ENUM ('GRUPOWA','PUCHAROWA');

CREATE TYPE STATUS AS ENUM ('WYGRANY','PRZEGRANY','AKTYWNY');

CREATE TYPE TYP_KURSU AS ENUM ('ZWYCIESTWO_H', 'ZWYCIESTWO_A', 'REMIS', 'ZWYCIESTWO_H_1P', 'ZWYCIESTWO_A_1P', 'REMIS_1P', 'IL_GOLI<+2,5>', 'IL_GOLI<-2,5>', 'STRZ_GOLA_H', 'STRZ_GOLA_A');


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,

    MIASTO VARCHAR(30) NOT NULL,

    ROZGRYWKI VARCHAR (40),

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

);


CREATE TABLE MECZ (

    ID_MECZU SERIAL PRIMARY KEY,

    ID_ZESP_H SERIAL,

    ID_ZESP_A SERIAL,

    ROZGRYWKI VARCHAR(40),

    FAZA_ROZGR FAZA,

    DATA DATE,

    IL_GOLI_H_1P SMALLINT DEFAULT(0),

    IL_GOLI_A_1P SMALLINT DEFAULT(0),

    IL_GOLI_H SMALLINT DEFAULT (0) CHECK (IL_GOLI_H >= IL_GOLI_H_1P ),

    IL_GOLI_A SMALLINT DEFAULT (0) CHECK (IL_GOLI_A >= IL_GOLI_A_1P ),

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

);


CREATE TABLE KURSY (

    ID_MECZU SERIAL PRIMARY KEY,

    RODZAJ_KURSU TYP_KURSU NOT NULL,

    WYSOKOSC_KURSU REAL NOT NULL CHECK (WYSOKOSC_KURSU > 1.00),

    FOREIGN KEY (ID_MECZU) REFERENCES MECZ (ID_MECZU) ON DELETE CASCADE ON UPDATE CASCADE

);


CREATE TABLE KUPON (

    ID_KUPONU SERIAL PRIMARY KEY,

    ID_KURSU SERIAL,

    AKO REAL NOT NULL CHECK (AKO > 1.00),

    STAWKA INT NOT NULL CHECK (STAWKA > 1),

    EW_WYGRANA REAL NOT NULL,

    STATUS_KUPONU STATUS NOT NULL DEFAULT ('AKTYWNY'),

    FOREIGN KEY (ID_KURSU) REFERENCES KURSY (ID_MECZU) ON DELETE CASCADE ON UPDATE CASCADE

);

2

Odp: relacje między tabelami

3

Odp: relacje między tabelami

Może inaczej jakich relacji byście użyli mając takie tabele.

4

Odp: relacje między tabelami

Struktura wydaje się być ok.