Aspekty aktywne baz danych



Podobne dokumenty
Bazy danych wykład szósty Więzy i wyzwalacze. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Autor: Joanna Karwowska

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Bazy danych 6. Klucze obce. P. F. Góra

Wykład 8. SQL praca z tabelami 5

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Bazy danych - Materiały do laboratoriów VIII

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Administracja i programowanie pod Microsoft SQL Server 2000

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Cele. Definiowanie wyzwalaczy

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Oracle PL/SQL. Paweł Rajba.

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Język SQL, zajęcia nr 1

DECLARE VARIABLE zmienna1 typ danych; BEGIN

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Bazy danych Ćwiczenia projektowe

Paweł Rajba

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Wykład 05 Bazy danych

BAZA DANYCH SIECI HOTELI

Bazy danych. Dr inż. Paweł Kasprowski

Tworzenie baz danych i tabel

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Wykład 5. SQL praca z tabelami 2

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

SQL język zapytań (query language) cz.1

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

SQL - DDL. 1 Tabele systemowe. 2 Typy danych

Hurtownia Świętego Mikołaja projekt bazy danych

SQL :: Data Definition Language

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

Wykład 4. SQL praca z tabelami 1

Typy Oracle atrybutów relacji Typ NUMBER (1)

Administracja i programowanie pod Microsoft SQL Server 2000

Bazy danych i usługi sieciowe

Typy Oracle atrybutów relacji Typ NUMBER (1)

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

Ref. 7 - Język SQL - polecenia DDL i DML

Bazy danych 10. SQL Widoki

Język SQL, zajęcia nr 2

Monika Sychla Daniel Smolarek Projekt bazy danych

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Model relacyjny. Wykład II

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Zaawansowane bazy danych i hurtownie danych semestr I

Bazy Danych i Usługi Sieciowe

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

1 Wstęp do modelu relacyjnego

040 STRUCTURED QUERY LANGUAGE. Prof. dr hab. Marek Wisła

Struktura bazy danych

Bazy danych i usługi sieciowe

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

BAZY DANYCH Cz III. Transakcje, Triggery

Bazy danych 7. SQL podstawy

PODSTAWY BAZ DANYCH 13. PL/SQL

Przykładowa baza danych BIBLIOTEKA

SQL 4 Structured Query Lenguage

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Bazy danych 9. Klucze obce Transakcje

Język zapytań SQL- język relacyjnych baz danych

Bazy danych 9. Klucze obce Transakcje. P. F. Góra

Wyzwalacze (triggery) Przykład

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

Bartosz Jachnik - Kino

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Aplikacje bazodanowe. Laboratorium 1. Dawid Poªap Aplikacje bazodanowe - laboratorium 1 Luty, 22, / 37

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Bazy danych Język SQL część 1 Wykład dla studentów matem

SQL w praktyce. Miłej i owocnej nauki!!!

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Bazy danych. Projekt prostej biblioteki. 26 stycznia Hubert Anisimowicz,

Część 1: OLAP. Raport z zajęć laboratoryjnych w ramach przedmiotu Hurtownie i eksploracja danych

Bazy danych 9. SQL Klucze obce Transakcje

Bazy danych 8. Widoki i wyzwalacze. P. F. Góra

SIECI KOMPUTEROWE I BAZY DANYCH

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Język SQL. Rozdział 8. Język manipulowania danymi DML

Baza danych zbiór danych

Transkrypt:

Aspekty aktywne baz danych

Aktywne aspekty baz danych Baza danych powinna zapewniać pewne własności i niezmienniki; Własności te powinny mogą być zapisane do bazy danych, a baza danych powinna zapewniać sama, żeby były spełnione; Baza danych powinna się sama bronić przed wprowadzeniem błędnych danych.

Spójność bazy danych Spójność oznacza poprawność, niesprzeczność danych w bazie danych. Standard SQL zawiera środki do definiowania warunków spójności (lub więzów integralności), np. w obrębie zdania CREATE TABLE. Każda próba naruszenia zdefiniowanych warunków spójności (podczas modyfikacji bazy danych) zostaje udaremniona, operacja ją podejmująca jest odrzucana, a baza danych pozostaje niezmieniona. W systemie pamiętana jest więc baza danych (dane podstawowe) oraz wiedza o bazie danych (dane opisujące struktury i warunki spójności).

Rodzaje warunków spójności Typ kolumny typ może być standardowy lub pochodny zdefiniowany przez użytkownika. UNIQUE dla określenia, że kolumna lub zestaw kolumn ma mieć unikalną wartość w tabeli (jest kluczem potencjalnym - alternatywnym, kandydującym w tabeli), taki klucz może przyjmować wartości NULL. PRIMARY KEY specjalny przypadek UNIQUE dla zdefiniowania klucza głównego nie może przyjmować wartości NULL. FOREIGN KEY - dla zdefiniowania zależności referencyjnych (zależności odniesień). Wartość klucza obcego musi występować jako wartość klucza głównego w powoływanej tabeli. CHECK - dla określenia, że kolumna lub zestaw kolumn (z jednej krotki) mają mieć wartości spełniające określony warunek. Taka spójność może być zdefiniowane jako reguła w wyrażeniu CREATE RULE. Wyzwalacze - bardziej złożone warunki spójności można definiować za pomocą procedur wyzwalanych w wyrażeniach CREATE TRIGGER. Procedury te są automatycznie wyzwalane przy aktualizacji tabeli.

Typy danych w SQL Server char(n), nchar(n) tekst o ustalonej długości n znaków; varchar(n), nvarchar(n) tekst o długości co najwyżej n znaków; binary(n) binarny ciąg znaków o długości n znaków varbinary(n) - binarny ciąg znaków o długości co najwyżej n znaków; bigint, int, smallint, tinyint liczba całkowita; bit przyjmuje wartość 0, 1, NULL; float (8 bytes), real(4 bytes) liczby zmiennopozycyjne; decimal(n, d), numeric(n, d) dane numeryczne: n miejsc na liczby całkowite, d na ułamkowe; datetime, smalldatetime typ daty;

Elementy aktywne Klucze (primery key,unique) Integralność referencyjną i klucze obce (foreign key) Więzy wartości atrybutów Więzy NOT-NULL Więzy CHECK Więzy dziedziny Wyzwalacze (triggery)

Klucze Klucze jednoznacznie identyfikują relację. Klucze mogą być proste i złożone. Relacja: Osoba (Nazwisko, Imie, DataUr, NIP, PESEL, Adres) Klucz złożony: {Nazwisko, Imie, DataUr} Klucz prosty: {PESEL}, {NIP}, Klucz sztuczny: {OsID} Klucze kandydujące, jeden klucz główny Klucz główny: powinien być prosty, wartości nie powinny zawierać białych znaków, wartość klucza nie powinna się zmieniać, powinien być oparty o wartość numeryczną.

Definiowanie schematu bazy danych create table Osoba( Nazwisko nchar(20), Imie nchar(20), DataUr datetime, NIP nchar(20), PESEL nchar(20)) Tworzenie tabeli z kluczami create table Osoba( Nazwisko nchar(20) primary key, Imie nchar(20), DataUr datetime, NIP nchar(20) unique, PESEL nchar(20) unique) Atrybut Nazwisko jest kluczem głównym (primary key) Atrybuty NIP, PESEL posiadają wartości unikalne (unique)

Definiowanie tabeli ze złożonym kluczem głównym create table Osoba( Nazwisko nchar(20), Imie nchar(20), DataUr datetime, NIP nchar(20) unique, PESEL nchar(20) unique, primary key (Nazwisko, Imie)) Wartość (Nazwisko, Imie) jest kluczem głównym (primary key) Atrybuty NIP, PESEL posiadają wartości unikalne (unique)

Dodawanie kolumny z własnością IDENTITY ALTER TABLE Osoba ADD OsobaId INT IDENTITY ( 200, 2) ADD dodawanie kolumny; IDENTITY [ (seed, increment) ] Seed wartość pierwszego wiersza załadowanego do tabeli; Increment inkrementacja wartości przy każdym następnym ładowaniu danych. IDENTITY stosuje się przy definiowaniu kluczy sztucznych. Wykonanie następujących instrukcji spowoduje: insert into Osoba values ('Padewski', 'Marek', '1971-01-06', 1111, 1234) insert into Osoba values ('Nijaki', 'Przemyslaw', '1971-03-12', 2222, 8980) Osoba

Definiowanie tabeli z kluczem obcym create table Studio( Nazwa nchar(20) primary key, Kierownik nchar(20) references dbo.osoba(nazwisko)) Zależność pomiędzy kluczem głównym jednej tabeli a atrybutem w drugiej tabeli nazywa się zależnością referencyjną.

Ograniczenia zależności referencyjnej Atrybuty klucza obcego muszą być zadeklarowane jako klucz główny w oryginalnej relacji. W tym przypadku Kierownik z relacji Studio odnosi się do atrybutu Nazwisko z relacji Osoba, który jest kluczem głównym.

Ograniczenia zależności referencyjnej Osoba Studio Wartość atrybutu klucza obcego musi wystąpić również jako wartość klucza głównego w drugiej relacji. W tym przypadku każda wartość występująca w kolumnie Kierownik musi wystąpić jak wartość Nazwisko.

Usuwanie powiązanych krotek Osoba Studio delete from Osoba where Nazwisko = 'Nijaki Wykonanie instrukcji spowoduje błąd, gdyż w relacji Studio byłaby taka wartość w kolumnie Kierownik, której nie byłoby w atrybucie Nazwisko relacji Osoba.

Usuwanie powiązanych krotek Aby uniknąć tej sytuacji, można zdefiniować relację w sposób następujący: create table Studio( Nazwa nchar(20) primary key, Kierownik nchar(20) references dbo.osoba(nazwisko) ON DELETE SET NULL)

Usuwanie powiązanych krotek Osoba Studio delete from Osoba where Nazwisko = 'Nijaki W wyniku operacji będzie: Osoba Studio

Usuwanie powiązanych krotek Można zdefiniować kaskadowe usuwanie krotek: create table Studio( Nazwa nchar(20) primary key, Kierownik nchar(20) references dbo.osoba(nazwisko) ON DELETE CASCADE)

Usuwanie powiązanych krotek Osoba Studio delete from Osoba where Nazwisko = 'Nijaki Osoba Studio

Modyfikowanie powiązanych krotek Można zdefiniować kaskadowe modyfikowanie krotek: create table Studio( Nazwa nchar(20) primary key, Kierownik nchar(20) references dbo.osoba(nazwisko) ON DELETE CASCADE ON UPDATE CASCADE) Zastosowanie ON UPDATE CASCADE spowoduje, że zmiana nazwiska w krotce Osoba, spowoduje zmianę w krotce Studio.

Modyfikowanie powiązanych krotek Osoba Studio update Osoba set Nazwisko = 'Madej' where Nazwisko = 'Padewski' Osoba Studio

Ograniczenia na wartościach atrybutów ALTER TABLE Osoba ADD Date smalldatetime NULL CONSTRAINT AddDateDflt DEFAULT GETDATE() WITH VALUES Dodawana jest kolumna Date typu smalldate mogąca przyjmować wartość NULL. Wartość domyślna jest ustawiana na obecną datę (GETDATE()). Dodatkowo WITH VALUES ustawia wartość domyślą we wszystkich istniejących krotkach.

Ograniczenia CHECK CHECK <condition> condition warunek definiowany podobnie jak przy WHERE; Ograniczenia typu CHECK mogą być nakładane na atrybuty. Zmiana wartości ograniczonego atrybutu może nastąpić tylko wtedy, gdy warunek jest spełniony.

Ograniczenia CHECK alter table Osoba add NIP1 int check (NIP1>100) Zostanie zaakceptowana tylko taka wartość atrybutu NIP1, która jest większa od 100. alter table Osoba add Plec char(2) alter table Osoba Add constraint P1 check (Plec IN ('K', 'M')) Dodawanie ograniczenia na kolumnę Plec alter table Osoba Add constraint P2 check (PESEL>NIP) Sprawdzane są zawsze przy wstawianiu i modyfikowaniu krotki relacji. Jeśli warunek jest fałszywy wówczas operacja nie powiedzie się. Warunki nałożone są na krotki. Usuwanie ograniczeń: alter table Osoba drop constraint P1

Więzy dziedziny W SQL3: CREATE DOMAIN DziedzinaPlci CHAR(1) CHECK (VALUE IN ('K', 'M')) Można zdefiniować kolumnę o danej dziedzinie. Np.: Plec DziedzinaPlci

Asercje Wszystkie dotychczasowe więzy dotyczyły pojedynczej krotki (więzy wartości atrybutów), ewentualnie prostych związków między krotkami z różnych relacji (więzy integralności); Jeśli jest potrzeba dodania bardziej skomplikowanych zależności pomiędzy krotkami z różnych relacji, wówczas można zastosować asercje.

Asercje create assertion BogatyPrezes check (NOT exists (select * from Studio, Osoba where Studio.Nazwisko = Osoba.Nazwisko and Kapital < 10000)) Warunek oznacza, że nie powinien istnieć prezes, którego kapitał jest mniejszy od 10000.

Sekwencje CREATE SEQUENCE ID_Seq START WITH 24329 INCREMENT BY 1 MINVALUE 24329 MAXVALUE 24332 CYCLE; GO SELECT NEXT VALUE FOR ID_Seq; CREATE TABLE Sequence_Table (Sequence_Table_id INTEGER DEFAULT NEXT VALUE FOR ID_Seq, code VARCHAR(15) NOT NULL );

Wyzwalacze (triggers) Reguły ECA (Event Condition Action) Asercje są drogie system sam decyduje kiedy powinny być wykonywane; Wyzwalacze są mechanizmami bardziej elastycznymi użytkownik sam decyduje kiedy mają być wywoływane; Wyzwalacze są testowane tylko przy zajściu określonego zdarzenia (dołączanie, usuwanie, modyfikacja krotki) określonego przez programistę (projektanta bazy); Jeśli warunek zostanie spełniony to przetwarzana jest akcja związania z wyzwalaczem.

Wyzwalacze - przykład Dodajemy kolumnę Placa do tabeli Osoba, oraz kolumnę Kapitał w tabeli Studio. Reguła: Przy każdej zmianie płacy osoby. Jeśli płaca osoby się zwiększa i ta osoba jest kierownikiem jakiegoś Studia, wówczas zwiększamy Kapitał o poprzednią płacę kierownika W standardzie SQL3 mamy następujący wyzwalacz: CREATE TRIGGER TrgKapital AFTER UPDATE OF Placa ON Osoba REFERENCING OLD AS Stara NEW AS Nowa WHEN (Stara.Placa < Nowa.Placa) UPDATE Studio SET Kapital= Kapital + Stara.Placa WHERE Kierownik = Nowa.Nazwisko FOR EACH ROW

Wyzwalacze - przykład Reguła: Przy każdej zmianie płacy osoby. Jeśli płaca osoby się zwiększa i ta osoba jest kierownikiem jakiegoś Studia, wówczas zwiększamy Kapitał o poprzednią płacę kierownika W T-SQL mamy następujący wyzwalacz CREATE TRIGGER TrgKapital ON Osoba AFTER UPDATE AS BEGIN IF Update(Placa) IF ((SELECT Placa FROM deleted) < (select Placa from inserted)) UPDATE Studio SET Kapital= Kapital + (select Placa from deleted) WHERE Kierownik = (select Nazwisko from inserted) END

Wyzwalacze - przykład Reguła: Przy każdej zmianie płacy osoby. Jeśli płaca osoby się zwiększa i ta osoba jest kierownikiem jakiegoś Studia, wówczas zwiększamy Kapitał o poprzednią płacę kierownika W MySQL mamy następujący wyzwalacz CREATE TRIGGER UpStudio AFTER UPDATE ON Osoba FOR EACH ROW BEGIN If (OLD.Placa < NEW.Placa) THEN UPDATE Studio SET Kapital= Kapital + OLD.Placa WHERE Kierownik = NEW.Nazwisko; END IF; END

Wyzwalacze W standardzie SQL3 akcja może być wykonywana: przed zajściem zdarzenia: BEFORE (wówczas warunek w WHEN jest sprawdzany przed zajściem zdarzenia) po zajściu zdarzenia AFTER (wówczas warunek w WHEN jest sprawdzany po zajściu zdarzenia). Wyzwalacze mogą być nałożone na instrukcje INSERT, UPDATE oraz DELETE. Jeśli wyzwalacz jest nałożony na UPDATE wówczas występuje słowo OF, które specyfikuje modyfikowaną kolumnę.

Wyzwalacze przykład2 Reguła: Przy każdym dodaniu osoby. Jeśli płaca osoby jest większa od średniego kapitału studia, wówczas należy dodać nowe studio dla dodawanej osoby. CREATE TRIGGER InsStudio ON Osoba AFTER INSERT AS BEGIN IF ((SELECT Placa FROM inserted) > (select avg(kapital) from Studio)) BEGIN declare @nazwisko varchar(20) select @nazwisko = Nazwisko from inserted INSERT INTO Studio values (@nazwisko, @nazwisko,1000) END END

Wyzwalacze przykład2 insert into Osoba values ('Koronowski', 'Andrzej', '1971-01-06', 1284, 5111, null, null, null, 9000) insert into Osoba values ('Maryniak', 'Krzysztof', '1971-01-06', 121, 51113, null, null, null, 50000) Pierwszy INSERT nie spowoduje dodania nowej krotki w relacji Studio. Drugi INSERT spowoduje dodania nowej krotki w Studio.

Wyzwalacze przykład3 Reguła: Przy każdym usuwaniu osoby. Jeśli płaca usuwanej osoby jest większa od średniej płacy wszystkich osób, wówczas można tę osobę usunąć. CREATE TRIGGER DelStudio ON Osoba INSTEAD OF DELETE AS BEGIN IF ((SELECT Placa FROM deleted) > (select avg(placa) from Osoba)) delete from Osoba where Nazwisko = (select Nazwisko from deleted) END

Wyzwalacze przykład2 delete from Osoba where Nazwisko = 'Koronowski' delete from Osoba where Nazwisko = 'Maryniak Pierwszy DELETE nie spowoduje usunięcia krotki. Drugi DELETE spowoduje usunięcie jednej krotki z tabeli Studio i jednej z tabeli Osoba.

Dziękuję