DROP TABLE Kola_Osoby; DROP TABLE Posty; DROP TABLE Watki; DROP TABLE Wiadomosci; DROP TABLE Materialy; DROP TABLE Zaproszenia; DROP TABLE Znajomosci; DROP TABLE Kola_zainteresowan; DROP TABLE Osoby; DROP SEQUENCE Wiadomosci_seq; DROP SEQUENCE Watki_seq; DROP SEQUENCE Posty_seq; CREATE TABLE Osoby ( login VARCHAR2(30) PRIMARY KEY, imie VARCHAR2(30), nazwisko VARCHAR2(40), pseudonim VARCHAR2(30), szkola VARCHAR2(30), specjalizacja VARCHAR2(30), zajecie VARCHAR2(30), wyksztalcenie VARCHAR2(100), miasto VARCHAR2(60), ostatnie_logowanie DATE, zainteresowania VARCHAR2(300), fotografia VARCHAR2(35), o_mnie VARCHAR2(300), haslo VARCHAR2(40) NOT NULL); CREATE TABLE Znajomosci ( osoba1 NOT NULL REFERENCES Osoby, osoba2 NOT NULL REFERENCES Osoby, PRIMARY KEY(osoba1, osoba2), CHECK (NOT osoba1=osoba2)); CREATE TABLE Zaproszenia ( od NOT NULL REFERENCES Osoby, do NOT NULL REFERENCES Osoby, PRIMARY KEY(od, do), CHECK (NOT OD=DO)); CREATE TABLE Wiadomosci ( id NUMBER(10) PRIMARY KEY, tresc VARCHAR2(4000) NOT NULL, temat VARCHAR2(50), czas DATE, przeczytana NUMBER(1) DEFAULT 0, od NOT NULL REFERENCES Osoby, do NOT NULL REFERENCES Osoby); CREATE TABLE Kola_zainteresowan ( nazwa VARCHAR2(50) PRIMARY KEY, opis VARCHAR2(1000)); CREATE TABLE Materialy ( plik VARCHAR2(50), kolo NOT NULL REFERENCES Kola_zainteresowan, PRIMARY KEY (plik, kolo)); CREATE TABLE Kola_Osoby( osoba NOT NULL REFERENCES Osoby, kolo NOT NULL REFERENCES Kola_zainteresowan, PRIMARY KEY (osoba, kolo)); CREATE TABLE Watki( id NUMBER(10) PRIMARY KEY, tytul VARCHAR2(50) NOT NULL, autor NOT NULL REFERENCES Osoby, kolo NOT NULL REFERENCES Kola_zainteresowan); CREATE TABLE Posty( id NUMBER(10) PRIMARY KEY, autor NOT NULL REFERENCES Osoby, data DATE, tresc VARCHAR2(4000) NOT NULL, watek NOT NULL REFERENCES Watki); CREATE SEQUENCE Wiadomosci_seq START WITH 1 INCREMENT BY 1; CREATE SEQUENCE Watki_seq START WITH 1 INCREMENT BY 1; CREATE SEQUENCE Posty_seq START WITH 1 INCREMENT BY 1; CREATE OR REPLACE TRIGGER wiadomosci_auto_increment BEFORE INSERT ON Wiadomosci FOR EACH ROW BEGIN SELECT Wiadomosci_seq.NextVal INTO :NEW.id FROM dual; END; / CREATE OR REPLACE TRIGGER watki_auto_increment BEFORE INSERT ON Watki FOR EACH ROW BEGIN SELECT Watki_seq.NextVal INTO :NEW.id FROM dual; END; / CREATE OR REPLACE TRIGGER posty_auto_increment BEFORE INSERT ON Posty FOR EACH ROW BEGIN SELECT Posty_seq.NextVal INTO :NEW.id FROM dual; END; / CREATE OR REPLACE TRIGGER nie_zapraszaj_znajomych BEFORE INSERT ON Zaproszenia FOR EACH ROW DECLARE foo Znajomosci%ROWTYPE; BEGIN SELECT * INTO foo FROM Znajomosci WHERE (osoba1=:NEW.od AND osoba2=:NEW.do) OR (osoba1=:NEW.do AND osoba2=:NEW.od); IF (SQL%FOUND) THEN Raise_application_error (-20500, 'zapraszana osoba juz jest wsrod znajomych!'); END IF; EXCEPTION WHEN no_data_found THEN return; END; / --insert into osoby values (null, 'jan', 'kowalski', 'kowal', 'aaa', 'bbb', 'brak zjaecie', ' podstawoweo', 'miestko', null, 'zain', ' om ie'); --insert into osoby values (null, 'jen', 'kowalski', 'kowal', 'aaa', 'bbb', 'brak zjaecie', ' podstawoweo', 'miestko', null, 'zain', ' om ie'); --insert into osoby values (null, 'jun', 'kowalski', 'kowal', 'aaa', 'bbb', 'brak zjaecie', ' podstawoweo', 'miestko', null, 'zain', ' om ie'); --insert into osoby values (null, 'jyn', 'kowalski', 'kowal', 'aaa', 'bbb', 'brak zjaecie', ' podstawoweo', 'miestko', null, 'zain', ' om ie'); --insert into znajomosci values (1,3); --insert into znajomosci values (1,2);