SQL - spójność z diagramem

0

Witam,

Zaczynam swoją przygodę z SQL'em i mam mały problem. Narysowałem diagram encji (podany w załączniku) wynika z niego że wiele pracowników może ukończyć wiele kursów, identyczną relację chciałem osiągnąć pomiędzy stanowiskiem a kwalifikacjami. Czy taka forma jest poprawna ?
Jeżeli tak proszę o odpowiedz, w jaki sposób to zastosować ?

Poniżej wrzucam aktualny kod skromnego projektu:

Create:

SET client_encoding='UTF-8';

drop table Pracownik cascade;
drop table Kurs cascade;
drop table Stanowisko cascade;
drop table Kwalifikacje cascade;


CREATE TABLE Kurs
(
	Rodzaj_kursu varchar(32) not null,
	ID_Kurs integer PRIMARY KEY
);

CREATE TABLE Kwalifikacje
(
	ID_Kwalifikacje integer PRIMARY KEY,
	Stopień_Kwalifikacji varchar(32) NOT NULL
);

 CREATE TABLE Stanowisko
(
	Nr_Stanowiska integer PRIMARY KEY,
	Nazwa_Stanowiska varchar(32) NOT NULL,
	Wynagrodzenie integer,
	numer_Kwalifikacje integer,

	CONSTRAINT ID_Kwalifikacje FOREIGN KEY (numer_Kwalifikacje)
	REFERENCES Kwalifikacje (ID_Kwalifikacje)
);

CREATE TABLE Pracownik
(
	nr_pracownika integer PRIMARY KEY,
	Imie varchar(32) not null,
	Nazwisko varchar(32) not null,
	Pesel integer,
	numer_Kurs integer,
	numer_Stanowiska integer,

	CONSTRAINT ID_Kurs FOREIGN KEY (numer_Kurs)
	REFERENCES Kurs (ID_Kurs),
	
	CONSTRAINT Nr_Stanowiska FOREIGN KEY (numer_Stanowiska)
	REFERENCES Stanowisko (Nr_Stanowiska)
);
 

Insert:

 
SET client_encoding='utf-8';

INSERT INTO Kurs values ('PSQL', 1);
INSERT INTO Kurs values ('Python', 2);
INSERT INTO Kurs values ('C', 3);
INSERT INTO Kurs values ('Java', 4);
INSERT INTO Kurs values ('HTML', 5);

INSERT INTO Kwalifikacje values (1, 'Podstawowy');
INSERT INTO Kwalifikacje values (2, 'Rozszerzony');
INSERT INTO Kwalifikacje values (3, 'Zaawansowany');
INSERT INTO Kwalifikacje values (4, 'Średnio_Zaawansowany');
INSERT INTO Kwalifikacje values (5, 'Master');

INSERT INTO Stanowisko values (1, 'Menager', 12000, 5);
INSERT INTO Stanowisko values (2, 'Programista', 10000, 3);
INSERT INTO Stanowisko values (3, 'Grafik', 8000, 2);
INSERT INTO Stanowisko values (4, 'Dźwiękowiec', 6000, 4);
INSERT INTO Stanowisko values (5, 'Sprzedawca', 5000, 1);

INSERT INTO Pracownik values (1, 'Michał', 'Maciejewski', 404, 1, 1);
INSERT INTO Pracownik values (2, 'Marian', 'Kowalski', 505, 3, 2);
INSERT INTO Pracownik values (3, 'Zbyszek', 'Maciejewski', 606, 2, 4);
INSERT INTO Pracownik values (4, 'Zbyszek', 'Boniek', 707, 5, 4);
INSERT INTO Pracownik values (5, 'Jan', 'Niezbędny', 808, 4, 3);

MMBlack

1
MMBlack napisał(a):

Witam,

(...) że wiele pracowników może ukończyć wiele kursów

Nie w Twoim przypadku pracownik ma przyporządkowany jeden kurs. Relacje wiele do wielu tworzymy przy wykorzystaniu dodatkowej tabeli, która będzie miała relację 1 do wielu z dwoma tabelami, które chcemy powiązać. Na Twoim przykładzie powinieneś stworzyć tabele np. o nazwie KursyPracownikow, w której miałbyś dwa klucze obce do tabeli Pracowników oraz Kursów. Możesz utworzyć również klucz główny złożony z tych dwóch atrybutów.

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