Stwórz model logiczny dla naszego diagramu zadania 6 z poprzedniego labu.
Na konferencji naukowej będą prezentowane prace z różnych dziedzin informatyki (np. bazy danych, systemy operacyjne, algorytmy, logika, itp.). Każda praca będzie prezentowana podczas referatu przez jednego z autorów. Referaty są pogrupowane w sesje, każda sesja jest prowadzona przez jednego z uczestników konferencji. Nie każdy uczestnik będzie mówił referat i nie każdy jest autorem jakiejś pracy. Niektórzy są autorami wielu prac i mogą mówić wiele referatów (ale nie podczas tej samej sesji). Prowadzący sesję nie może być autorem żadnej pracy prezentowanej podczas tej sesji.
CREATE TABLE Uczestnik (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
imie VARCHAR(255) NOT NULL,
nazwisko VARCHAR(255) NOT NULL
);
CREATE TABLE Praca (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
tytul VARCHAR(255) NOT NULL,
dziedzina VARCHAR(255) NOT NULL
);
CREATE TABLE AutorstwoPracy (
id_autor INTEGER REFERENCES Uczestnik NOT NULL,
id_praca INTEGER REFERENCES Praca NOT NULL,
CONSTRAINT PK_autorstwo_pracy PRIMARY KEY (id_autor, id_praca)
);
CREATE TABLE Sesja (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
kiedy DATE NOT NULL,
prowadzacy INTEGER REFERENCES Uczestnik NOT NULL
);
-- TRIGGER ON INSERT OR UPDATE
-- Prowadzący sesję nie może prowadzić referatu.
CREATE TABLE Referat (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
kiedy DATE NOT NULL,
id_autor INTEGER NOT NULL,
id_praca INTEGER NOT NULL,
id_sesja INTEGER REFERENCES Sesja NOT NULL,
-- Każda praca ma jeden referat.
CONSTRAINT UQ_Referat_id_praca UNIQUE (id_praca),
-- Dany autor nie może mieć więcej niż jednego referatu w danej sesji.
CONSTRAINT UQ_Referat_id_autor_id_sesja UNIQUE (id_autor, id_sesja),
CONSTRAINT FK_Referat_AutorstwoPracy FOREIGN KEY (id_autor, id_praca) REFERENCES AutorstwoPracy(id_autor, id_praca)
);