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
);