SQL - spójność z diagramem

Odpowiedz Nowy wątek
2016-06-11 13:46
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

edytowany 1x, ostatnio: MMBlack, 2016-06-11 13:47

Pozostało 580 znaków

2016-06-12 13:24
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.

Dzięki wielkie za odpowiedz. Na tym nie poprzestanę, postaram się to poprawić. - MMBlack 2016-06-17 13:45

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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