POSTGRESQL RELACJA

0

Czesc. Siedze nad tym juz troche czasu i nie moge utworzyc relacji typu 1..1 z jednej strony wartosc musi byc obligatoryjna a z drugiej opcjonalna. Ten kod co tutaj wklejam wyrzuca mi blad ze relacja przebyte_choroby nie istnieje. Gdy tworze najpierw tabelke przebyte_choroby to wyrzuca mi blad ze relacja klient nie istnieje. W sumie to sie nie dziwie bo wczesniej ta tabelka nie zostala utworzona.... tylko jak to zmienic zeby dzialalo?

create table KLIENT(
PESEL decimal(10) NOT NULL PRIMARY KEY,
ID_ADRR bigint,
ID_CHORR bigint,
IMIE varchar(30),
NAZWISKO varchar(30),
DATA_URODZENIA date,
TELEFON_KOM varchar(20),
INNE text,
FOREIGN KEY (ID_CHORR) REFERENCES PRZEBYTE_CHOROBY(ID_CHOR)
);
create table PRZEBYTE_CHOROBY(
ID_CHOR bigint NOT NULL PRIMARY KEY,
PESELL decimal(10) NOT NULL,
PADACZKA boolean,
CUKRZYCA boolean,
AIDS boolean,
WZWB boolean,
ALERGIE boolean,
CHOROBY_TARCZYCY boolean,
CHOROBY_SERCA boolean,
INNE text,
FOREIGN KEY (PESELL) REFERENCES KLIENT(PESEL)

);



Chce aby klient mogl zostac dodany bez okreslenia jego chorob. Jezeli jednak bedzie sie chcialo okreslic choroby to aby w tabelce przebyte_choroby mozna bylo rozroznic ktory to klient.

Dzieki z gory za pomoc:)

0

Po pierwsze nie wiem czy wiesz ale klucze obce można nazywać... przydałyby się jakieś nazwy.
Po drugie klucze obce deklaruj tylko i wyłącznie w tabelach podrzędnych do innych z którymi projektujesz relację. W tym przypadku w tabeli KLIENT nie ma prawa być klucza obcego.
Po trzecie masz już przecież relację 1..1 między tymi tabelami. Stworzyłeś ją zakładając w tabeli podrzędnej PRZEBYTE_CHOROBY pole PESEL i tworząc na tym polu klucz obcy, więcej kluczy zakładać nie musisz.
Po czwarte gdzie masz klucze główne?

0

Hmm to prawda ze mam relacje 1..1. Jezeli chodzi o klucze glowne to sa one tam gdzie jest PRIMARY KEY. Jezeli chodzi o klucze obce to nie wiedzialem ze nie mozna ich deklarowac wewnatrz tabeli ...? z nazywaniem to pewnie mozna ale nie wiem jak. Moglbys mi pokazac jak wedlug Ciebie powinno to wygladac?:)

0

Rzeczywiście masz PK, nie zauważyłem ich. Wg mnie wzorcowy zapis powinien wyglądać w ten sposób:

CREATE TABLE nadrzedna (
  id_nadrzedna INT,
  pole1 INT,
  pole2 VARCHAR(40),
  CONSTRAINT PK_nadrzedna PRIMARY KEY (id_nadrzedna)
);

CREATE TABLE podrzedna (
  id_podrzedna INT,
  id_nadrzedna INT,
  pole2 VARCHAR(40),
  CONSTRAINT PK_podrzedna PRIMARY KEY (id_podrzedna),
  CONSTRAINT FK_podrzedna_nadrzedna FOREIGN KEY (id_nadrzedna) REFERENCES nadrzedna (id_nadrzedna)
);

1 użytkowników online, w tym zalogowanych: 0, gości: 1