Prezentuje autorski skrypt pokazujący podstawową funkcjonalność tworzenia prostej bazy danych. Baza zawiera związki encji jeden do wielu a także wiele do wielu z wykorzystaniem tabel przejściowych. Związki te tworzone są poprzez kolejne funkcje ALTER.
Ciekawą funkcjonalnością Oracle są także sekwencje (CREATE SEQUENCE) pozwalające na automatyczne generowanie ciągów liczbowych potrzebnych przy budowaniu INSERTÓW np. dla sekwncji seq_Faktura kolejna wartość zwracana była by przez seq_Faktura.nextval, co przy standardowych ustawieniach dawało by liczbę 1, 2, 3, .. itp.
Listing
DROP SEQUENCE seq_Myjnia;
DROP SEQUENCE seq_Faktura;
DROP SEQUENCE seq_Zamowienie_klienta;
DROP SEQUENCE seq_Zamowienie_towaru;
DROP SEQUENCE seq_Klienci;
DROP SEQUENCE seq_Usluga;
DROP SEQUENCE seq_Pracownicy;
DROP SEQUENCE seq_Rachunek;
DROP SEQUENCE seq_Towar;
DROP SEQUENCE seq_Dostawca;
DROP TABLE Pozycja_zamowienia_towaru CASCADE CONSTRAINTS;
DROP TABLE Towar CASCADE CONSTRAINTS;
DROP TABLE Rachunek CASCADE CONSTRAINTS;
DROP TABLE Dostawca CASCADE CONSTRAINTS;
DROP TABLE Zamowienie_towaru CASCADE CONSTRAINTS;
DROP TABLE Myjnia CASCADE CONSTRAINTS;
DROP TABLE Pozycja_zamowienia_klienta CASCADE CONSTRAINTS;
DROP TABLE Faktura CASCADE CONSTRAINTS;
DROP TABLE Zamowienie_klienta CASCADE CONSTRAINTS;
DROP TABLE Klienci CASCADE CONSTRAINTS;
DROP TABLE Usluga CASCADE CONSTRAINTS;
DROP TABLE Pracownicy CASCADE CONSTRAINTS;
--tworzenie tabel i sekwencji(potrzebne do generowania identyfikatorów)
CREATE TABLE Pozycja_zamowienia_towaru (
ilosc number(10) NOT NULL,
id_zamowienia_towaru number(10) NOT NULL,
id_towaru number(10) NOT NULL);
CREATE TABLE Towar (
id_towaru number(10) NOT NULL,
nazwa varchar2(30) NOT NULL,
cena number(10) NOT NULL,
upust number(10) NOT NULL,
id_dostawcy number(10) NOT NULL,
PRIMARY KEY (id_towaru));
CREATE TABLE Rachunek (
nr_rachunku number(10) NOT NULL,
czy_korekta char(1) NOT NULL CHECK(czy_korekta IN ('t','n')),
id_zamowienia_klienta number(10) NOT NULL,
PRIMARY KEY (nr_rachunku));
CREATE TABLE Dostawca (
id_dostawcy number(10) NOT NULL,
nazwa_dostawcy varchar2(60) NOT NULL,
NIP_dostawcy number(10) NOT NULL,
miejscowosc varchar2(30) NOT NULL,
telefon number(9) NOT NULL,
email varchar2(30),
PRIMARY KEY (id_dostawcy));
CREATE TABLE Zamowienie_towaru (
id_zamowienia_towaru number(10) NOT NULL,
data_realizacji date NOT NULL,
id_myjnia number(10) NOT NULL,
PRIMARY KEY (id_zamowienia_towaru));
CREATE TABLE Myjnia (
id_myjnia number(10) NOT NULL,
nazwa_myjni varchar2(60) NOT NULL,
NIP_myjni number(10) NOT NULL,
REGON_myjni number(9) NOT NULL,
miejscowosc varchar2(30) NOT NULL,
telefon number(9) NOT NULL,
PRIMARY KEY (id_myjnia));
CREATE TABLE Pozycja_zamowienia_klienta (
ilosc number(10) NOT NULL,
id_usluga number(10) NOT NULL,
id_zamowienia_klienta number(10) NOT NULL);
CREATE TABLE Faktura (
nr_faktury number(10) NOT NULL,
czy_korekta char(1) NOT NULL CHECK(czy_korekta IN ('t','n')),
id_zamowienia_towaru number(10) NOT NULL,
PRIMARY KEY (nr_faktury));
CREATE TABLE Zamowienie_klienta (
id_zamowienia_klienta number(10) NOT NULL,
cena number(8, 2) NOT NULL,
upust number(8, 2) NOT NULL,
data_realizacji date NOT NULL,
id_klienta number(10) NOT NULL,
id_pracownika number(10) NOT NULL,
id_myjnia number(10) NOT NULL,
PRIMARY KEY (id_zamowienia_klienta));
CREATE TABLE Klienci (
id_klienta number(10) NOT NULL,
nazwa_firmy varchar2(60),
NIP_klienta number(10) NOT NULL,
imie varchar2(30),
nazwisko varchar2(30),
miejscowosc varchar2(30) NOT NULL,
telefon number(9) NOT NULL,
email varchar2(30),
PRIMARY KEY (id_klienta));
CREATE TABLE Usluga (
id_usluga number(10) NOT NULL,
nazwa_pakietu varchar2(40) NOT NULL,
plukanie char(1) NOT NULL CHECK(plukanie IN ('t','n')),
namydlanie char(1) NOT NULL CHECK(namydlanie IN ('t','n')),
polerowanie char(1) NOT NULL CHECK(polerowanie IN ('t','n')),
woskowanie char(1) NOT NULL CHECK(woskowanie IN ('t','n')),
odkurzanie char(1) NOT NULL CHECK(odkurzanie IN ('t','n')),
PRIMARY KEY (id_usluga));
CREATE TABLE Pracownicy (
id_pracownika number(10) NOT NULL,
imie varchar2(30) NOT NULL,
nazwisko varchar2(30) NOT NULL,
pesel number(11) NOT NULL,
wynagrodzenie number(10) CHECK(wynagrodzenie >= 0),
PRIMARY KEY (id_pracownika));
--dodwanie kluczy obcych poprzez edycje tabel
ALTER TABLE Rachunek ADD CONSTRAINT FKRachunek FOREIGN KEY (id_zamowienia_klienta) REFERENCES Zamowienie_klienta (id_zamowienia_klienta);
ALTER TABLE Towar ADD CONSTRAINT FKTowar FOREIGN KEY (id_dostawcy) REFERENCES Dostawca (id_dostawcy);
ALTER TABLE Pozycja_zamowienia_towaru ADD CONSTRAINT FKPozycja_zamowienia_towaru1 FOREIGN KEY (id_zamowienia_towaru) REFERENCES Zamowienie_towaru (id_zamowienia_towaru);
ALTER TABLE Pozycja_zamowienia_towaru ADD CONSTRAINT FKPozycja_zamowienia_towaru2 FOREIGN KEY (id_towaru) REFERENCES Towar (id_towaru);
ALTER TABLE Faktura ADD CONSTRAINT FKFaktura FOREIGN KEY (id_zamowienia_towaru) REFERENCES Zamowienie_towaru (id_zamowienia_towaru);
ALTER TABLE Zamowienie_towaru ADD CONSTRAINT FKZamowienie_towaru FOREIGN KEY (id_myjnia) REFERENCES Myjnia (id_myjnia);
ALTER TABLE Zamowienie_klienta ADD CONSTRAINT FKZamowienie_klienta1 FOREIGN KEY (id_klienta) REFERENCES Klienci (id_klienta);
ALTER TABLE Zamowienie_klienta ADD CONSTRAINT FKZamowienie_klienta2 FOREIGN KEY (id_pracownika) REFERENCES Pracownicy (id_pracownika);
ALTER TABLE Zamowienie_klienta ADD CONSTRAINT FKZamowienie_klienta FOREIGN KEY (id_myjnia) REFERENCES Myjnia (id_myjnia);
ALTER TABLE Pozycja_zamowienia_klienta ADD CONSTRAINT FKPozycja_zamowienia_klienta1 FOREIGN KEY (id_zamowienia_klienta) REFERENCES Zamowienie_klienta (id_zamowienia_klienta);
ALTER TABLE Pozycja_zamowienia_klienta ADD CONSTRAINT FKPozycja_zamowienia_klienta2 FOREIGN KEY (id_usluga) REFERENCES Usluga (id_usluga);
CREATE SEQUENCE seq_Myjnia;
CREATE SEQUENCE seq_Faktura;
CREATE SEQUENCE seq_Zamowienie_klienta;
CREATE SEQUENCE seq_Zamowienie_towaru;
CREATE SEQUENCE seq_Klienci;
CREATE SEQUENCE seq_Usluga;
CREATE SEQUENCE seq_Pracownicy;
CREATE SEQUENCE seq_Rachunek;
CREATE SEQUENCE seq_Towar;
CREATE SEQUENCE seq_Dostawca;