Tworzeniu klucza obcego

0

Witam, dostałem ostatnio zadanie dotyczące zaprojektowania prostej do potęgi bazy która pozwoli obsłużyć system rejestracji pacjentów w przychodni, jednak zapomniałem jak to się w tym SQL robi, z pomocą poradników wymyśliłem takie coś, co widać poniżej. Teraz pytanie, czy klucze obce są dobrze zdefiniowane? Czy jeśli w tabeli definiuję klucz obcy to muszę za nim pisać typ danych, skoro jest on w innej tabeli już zdefiniowany? I co sądzicie o godzinach przyjęć, warto zrobić osobną tabelę w której podam idLekarza oraz godziny przyjęć, czy lepiej zostawić tak jak mam? Z góry dziękuję za pomoc.

CREATE TABLE pacjenci ( 
idPacjenta int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
imie VARCHAR(30) NOT NULL,
nazwisko VARCHAR(30) NOT NULL,
pesel VARCHAR(11) NOT NULL, 
adres VARCHAR(255) NOT NULL 
); 

CREATE TABLE lekarze ( 
idLekarza int NOT NULL AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(30) NOT NULL,
nazwisko VARCHAR(30) NOT NULL,
specjalizacja VARCHAR(50),
poniedzialek VARCHAR(20),
wtorek VARCHAR(20),
sroda VARCHAR(20),
czwartek VARCHAR(20),
piatek VARCHAR(20),
sobota VARCHAR(20)  
); 

CREATE TABLE pokoje_przyjec (
idPokoju int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
); 


CREATE TABLE limity_przyjec (
idLekarza INT, 
limit_przyjec INT,
CONSTRAINT idLekarza FOREIGN KEY (idLekarza) REFERENCES lekarze (idLekarza) 
); 

CREATE TABLE zar_wizyty ( 
idWizyty INT AUTO_INCREMENT PRIMARY KEY NOT NULL, 
data_wizyty DATETIME,
idLekarza INT, 
idPacjenta INT, 
idPokoju INT, 
CONSTRAINT idLekarza FOREIGN KEY (idLekarza) REFERENCES lekarze (idLekarza) ,
CONSTRAINT idPacjenta FOREIGN KEY (idLekarza) REFERENCES pacjenci (idPacjenta) ,
CONSTRAINT idPokoju FOREIGN KEY (idPokoju) REFERENCES pokoje_przyjec (idPokoju) 
);

CREATE TABLE zak_wizyty ( 
idWizyty INT AUTO_INCREMENT PRIMARY KEY NOT NULL, 
idLekarza INT, 
idPacjenta INT, 
idPokoju INT, 
CONSTRAINT idLekarza FOREIGN KEY (idLekarza) REFERENCES lekarze (idLekarza) ,
CONSTRAINT idPacjenta FOREIGN KEY (idLekarza) REFERENCES pacjenci (idPacjenta) ,
CONSTRAINT idPokoju FOREIGN KEY (idPokoju) REFERENCES pokoje_przyjec (idPokoju) 
);




 
1

"...Teraz pytanie, czy klucze obce są dobrze zdefiniowane?.."

Napisz w jakim środowisko tworzysz bazę SQl Server czy inne. Odpalając skrypt w danym środowisku widzisz od razu czy skrypt się wykonał czy nie i tutaj masz już pierwsza informację czy jest dobrze czy źle. Jeśli korzystasz z SQL Servera to fajną opcją jest Query Designer (Ctrl + Shift + Q) wtedy dodajesz wszystkie tabele bazy i widzisz połączenia między nimi i od razu widzisz czy jest dobrze czy źle.

"...Czy jeśli w tabeli definiuję klucz obcy to muszę za nim pisać typ danych, skoro jest on w innej tabeli już zdefiniowany?..."

Oczywiście, że musisz przecież to jest pole w tabeli które musi mieć zdefiniowany typ danych.

"... I co sądzicie o godzinach przyjęć, warto zrobić osobną tabelę w której podam idLekarza oraz godziny przyjęć, czy lepiej zostawić tak jak mam? Z góry dziękuję za pomoc. ..."

Ja bym to zrobił w osobnej tabeli

dodatkowe wnioski:
-nie do czego Ci będzie służyła tabela "pokoje_przyjec" w takiej formie jest bezużyteczna.

  • w tabelach "zar_wizyty" i "zak_wizyty" dublujesz dane, niepotrzebnie. Wrzuć wizytę w jedna tabelę i już po co tworzysz dwie tabele.
  • ogólnie uważam, że musisz dopracować strukturę.
0

Co do wizyt, chciałbym mieć zarejestrowane wizyty i zakończone w osobnej, niektóre przecież mogłyby się nie odbyć wgl, co miałoby wpływ na limit przyjęć. I teraz nie wiem jak by to zrobić w jednej tabeli.

0

Tak jak pisałem wcześniej (jako Złoty Pomidor bo nie byłem zalogowany :) ) jak bym tego nie robił. Lepszym rozwiązaniem jest trzymać wszystkie dane dotyczące wizyt w jednej tabeli. Jeśli wizyta nie dojdzie do skutku to w kolumnie "zakończenie_wizyty" będziesz miał NULL i tyle ale wszystko masz w jednym miejscu i łatwiej jest robić jakieś raporty itp.
pozdrawiam

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