Mikrozadanie 8

backback

Treść

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.

Wzorcówka

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)
);

Uwagi

  1. “Nie ma gwarancji, że Referat na temat danej Pracy będzie prowadzony przez jednego z Autorów tej Pracy.” Wpisałem to w znacznej większości prac. Nasz model pojęciowy też tego nie zapewniał, ale da się to zrobić jak we wzorcówce, robiąc odnośnik do Referatu do encji AutorstwoPracy a nie oddzielnie do Praca i Autor. Bez tego należałoby napisać, że będzie to sprawdzane triggerem, ale modelem jest ładniej.

backback