ALTER TABLE wynajem ADD FOREIGN KEY (nr_uslugi) REFERENCES pakiety_uslug(nr_uslugi) ON UPDATE CASCADE;
3.4. Utworzenie więzów check.
W tym punkcie tworzy się więzy czek, które mają za zadanie chronić bazę przed wprowadzeniem błędnych danych. I tak, zakłada się 11-cyfrowy numer PESEL, określony typ daty wypożyczeń i zwrotów, sensowny rocznik samochodów, rodzaj silnika.
ALTER TABLE klienci ADD CHECK (pesel ~ 'A[0-9]*$');
ALTER TABLE klienci ADD CHECK (length(pesel) IN (11));
ALTER TABLE samochody ADD CHECK (silnik IN ('benzyna', 'diesel'));
ALTER TABLE samochody ALTER COLUMN silnik SET DEFAULT 'benzyna';
ALTER TABLE samochody ADD CHECK (rocznik>1900 AND rocznik<2100);
ALTER TABLE wynajem ADD CHECK (data_od ~ ’A[0-9]{4}-[0-9]{2}-[0-9]{2}$’);
ALTER TABLE wynajem ADD CHECK (data_do ~ 'A[0-9]{4}-[0-9]{2}-[0-9]{2}$');
ALTER TABLE wynajem ADD CHECK (data_od<=data_do);
3.5. Utworzenie funkcji.
Przykładowe funkcje zwracające informacje z bazy danych. Pierwsza pozwala na uzyskanie opisu usługi dodatkowej na podstawie jej nazwy, druga zwraca pełne dane klienta, podając jedynie jego numer w bazie, trzecia służy do dodawania nowych klientów, zaś czwarta napisana jest do tworzenia nowych umów najmu, wiążąc klientów z samochodami.
CREATE OR REPLACE FUNCTION opis_uslugi(n TEXT) RETURNS TEXT AS ' DECLARE x RECORD;
BEGIN
SELECT INTO x * FROM pakiety_uslug WHERE nazwa=n;
RETURN x.opis;
END;
' LANGUAGE 'plpgsql';
CREATE OR REPLACE FUNCTION klient(nr INTEGER) RETURNS RECORD AS ' DECLARE x RECORD;
BEGIN
SELECT INTO x * FROM klienci AS k, telefony_klienci AS t