Bazy danych Ćwiczenia projektowe Przygotował: Piotr Hajder Katedra Informatyki Stosowanej i Modelowania Wydział Inżynierii Metali i Informatyki Przemysłowej, AGH
Agenda 01. Typy danych 02. Polecenia DDL 03. Ograniczenia 04. Praca własna
01 : Typy danych
Typy danych Tekstowe Składnia Max rozmiar Opis CHAR(size) 8000 znaków Stała długość. VARCHAR(size) VARCHAR(max) 8000 znaków lub max* Zmienna długość. TEXT 2GB Typ zmiennej długości. NCHAR(size) 4000 znaków Typ stałej długości, nacjonalizowany. NVARCHAR(size) NVARCHAR(max) 4000 znaków lub max* Zmienna długość, nacjonalizowany. NTEXT ~1GB Typ zmiennej długości, nacjonalizowany BINARY(size) 8000 znaków Stała długość, dane binarne VARBINARY(size) VARBINARY(max) 8000 znaków lub max* size liczba znaków, zmienna długość, dane niebinarne IMAGE 2GB Typ zmiennej długości, dane binarne size liczba znaków * Max dla znaków = 2GB
Typy danych Numeryczne Składnia Max rozmiar Opis BIT Typ całkowity: {0; 1; NNNNNNNN} TINYINT [0; 255] SMALLINT [ 32768; 32767] INT 2 32 ; 2 32 1 BIGINT 2 63 ; 2 63 1 DECIMAL(m,d) DEC(m,d) NUMERIC(m,d) FLOAT(n) REAL m domyślnie 18 d domyślnie 0 FLOAT(24) m całkowita liczba cyfr; p po przecinku n liczba bitów SMALLMONEY 214748,3648; 214748,3647 MONEY ~ 2 50 ; ~2 50 CREATE TABLE float_demo ( f1 FLOAT(1), f2 FLOAT(4), f3 FLOAT(7) );
02 : Polecenia DDL
Polecenia DDL CREATE CREATE TABLE table_name ( column_1 datatype [ NULL NOT NULL ], column_2 datatype [ NULL NOT NULL ],, column_n datatype [ NULL NOT NULL ] ); Objaśnienie: table_name nazwa tabeli (obiektu), column_x nazwa kolumny, datatype typ danych, Ponadto, można określić, czy parametr może przyjmować wartość NULL. Nazwy tabel w bazie muszą być unikalne Nazwy kolumn w tabeli muszą być unikalne Przy tworzeniu tabeli można dodawać ograniczenia nazwy również unikalne Ewentualne braki można uzupełnić, modyfikując tabelę poleceniem ALTER CREATE TABLE customers ( customer_id number(10) NOT NULL, customer_name varchar2(50) NOT NULL, city varchar2(50), CONSTRAINT customers_pk PRIMARY KEY (customer_id) );
Polecenia DDL DROP DROP TABLE [schema_name].table_name [ CASCADE CONSTRAINTS ] [ PURGE ]; DROP TABLE customers; Objaśnienie: schema_name nazwa schematu, który zawiera podaną tabelę, table_name nazwa tabeli do usunięcia, CASCADE CONSTRAINTS usunięcie tabeli wraz z dotyczącymi jej ograniczeniami, PURGE całkowite usunięcie tabeli (z pominięciem kosza). Służy do usuwania obiektów (tabel, schematów, Często stosowany w połączeniu z Może zadziałać również na obiekty Przykłady użytkowników, ograniczeń) poleceniem ALTER powiązane
Polecenia DDL ALTER Składnia ADD column_name column-definition; ALTER COLUMN column_name column_type; DROP COLUMN column_name; RENAME COLUMN old_name TO new_name; RENAME TO new_table_name; Przykład ALTER TABLE customers ADD (customer_name varchar2(45), city varchar2(40) DEFAULT 'Seattle'); ALTER TABLE customers ALTER COLUMN city varchar2(75) NOT NULL; ALTER TABLE customers DROP COLUMN customer_name; ALTER TABLE customers RENAME COLUMN customer_name TO cname; ALTER TABLE customers RENAME TO contacts; sp_rename employees.last_name, lname, COLUMN ; sp_rename employees emps ; Pozwala na modyfikowanie stworzonych obiektów Tabela musi być pusta, aby zmienić kolumnę Pozwala na modyfikację ograniczeń Głównie (ale nie tylko) dla tabel!
03 : Ograniczenia Slide sub title
Ograniczenia Cel tworzenia ograniczeń Zapobiegają wprowadzaniu błędnych danych do tabel Tworzą logikę biznesową na poziomie bazy danych Dokumentują istotne reguły w bazie danych Wymuszają integralność relacyjną pomiędzy dowolną liczbą tabel Wpływają (korzystnie lub nie) na wydajność bazy danych Realizują unikalność wartości w tabelach
Ograniczenia Typy ograniczeń Wartość NULL Definiowana podczas tworzenia tabeli (lub modyfikacji) Określenie atrybutu jako NOT NULL uniemożliwia dodanie rekordu bez podania wartości Klucz główny (PRIMARY KEY) Tylko jeden w tabeli Zbiór atrybutów, gwarantujący unikalność rekordu (krotki) Klucz obcy (FOREIGN KEY) Określa relację pomiędzy tabelami Wymusza integralność danych Unikalność (UNIQUE) Definiuje unikalność atrybutu/zbioru atrybutów Wartość domyślna (DEFAULT) Podawana podczas tworzenia tabeli (lub modyfikacji) W przypadku nie podania wartości atrybutu, uzupełniany jest wartością domyślną Inne (CHECK) Inne, niezwiązane z powyższymi ograniczenia Przykładowo: wiek z zakresu [0;99] lat
Ograniczenia Klucz główny Minimalny zestaw atrybutów, gwarantujący unikalność rekordu Kluczem głównym może być również klucz potencjalny (ang. candidate key) Wyróżnia się klucze naturalne (np. data i miejsce urodzenia) oraz klucze sztuczne (ang. surrogate key) Popularność programowania obiektowego sprawiła, że klucze sztuczne występują bardzo często Wartość klucza głównego nie może być zmieniana klucz powinien zostać usunięty wraz z rekordem Najczęściej, klucz sztuczny jest typu całkowitego
Ograniczenia Klucz obcy Jednoznacznie identyfikuje rekord w innej, powiązanej z nim tabeli Definiuje relację między dwoma tabelami Wymusza integralność danych, wchodzących w skład klucza obcego Klucz obcy musi być jednocześnie kluczem głównym w tabeli referencyjnej (rodzic) Zastosowanie klucza obcego niesie poważne konsekwencje wydajnościowe
Język SQL Klucz główny Składnia (CREATE) Składnia (ALTER) Przykład (CREATE) Przykład (ALTER) CREATE TABLE table_name ( column1 datatype [ NULL NOT NULL ], column2 datatype [ NULL NOT NULL ],..., CONSTRAINT constraint_name PRIMARY KEY (column1, column2,... column_n) ); ADD CONSTRAINT constraint_name PRIMARY KEY (column1, column2,... column_n); CREATE TABLE supplier ( supplier_id numeric(10) not null, supplier_name varchar(50) not null, contact_name varchar(50), CONSTRAINT supplier_pk PRIMARY KEY (supplier_id, supplier_name) ); ALTER TABLE supplier ADD CONSTRAINT supplier_pk PRIMARY KEY (supplier_id);
Język SQL Klucz obcy Składnia (CREATE) Składnia (ALTER) Przykład (CREATE) Przykład (ALTER) CREATE TABLE table_name ( column1 datatype [ NULL NOT NULL ], column2 datatype [ NULL NOT NULL ],..., CONSTRAINT fk_column FOREIGN KEY (column1,... column_n) REFERENCES parent_table (column1,... column_n) ); ADD CONSTRAINT constraint_name FOREIGN KEY (column1, column2,..., column_n) REFERENCES parent_table (column1, column2,..., column_n); CREATE TABLE products ( product_id numeric(10) not null, supplier_id numeric(10) not null, CONSTRAINT fk_supplier FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id) ); ALTER TABLE products ADD CONSTRAINT fk_supplier FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id);
Język SQL Unikalność Składnia (CREATE) Składnia (ALTER) Przykład (CREATE) Przykład (ALTER) CREATE TABLE table_name ( column1 datatype [ NULL NOT NULL ], column2 datatype [ NULL NOT NULL ],..., CONSTRAINT constraint_name UNIQUE (uc_col1, uc_col2,... uc_col_n) ); ADD CONSTRAINT constraint_name UNIQUE (column1, column2,... column_n); CREATE TABLE supplier ( supplier_id numeric(10) NOT NULL, supplier_name varchar(50) NOT NULL, contact_name varchar(50), CONSTRAINT supplier_unique UNIQUE (supplier_id, supplier_name) ); ALTER TABLE supplier ADD CONSTRAINT supplier_name_unique UNIQUE (supplier_id, supplier_name);
Język SQL CHECK Składnia (CREATE) Składnia (ALTER) Przykład (CREATE) Przykład (ALTER) CREATE TABLE table_name ( column1 datatype [ NULL NOT NULL ], column2 datatype [ NULL NOT NULL ],..., CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE] ); ADD CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE]; CREATE TABLE suppliers ( supplier_id numeric(4), supplier_name varchar(50), CONSTRAINT check_supplier_id CHECK (supplier_id BETWEEN 100 and 9999) ); ALTER TABLE suppliers ADD CONSTRAINT check_supplier_name CHECK (supplier_name IN ('IBM', 'Microsoft', 'NVIDIA'));
Język SQL Zarządzanie ograniczeniami Lp. Polecenie Kod SQL 1 Włączenie ograniczenia 2 Wyłączenie ograniczenia 3 Usunięcie ograniczenia CHECK CONSTRAINT constraint_name; NOCHECK CONSTRAINT constraint_name; DROP CONSTRAINT constraint_name; Podsumowanie Tworzenie i modyfikowanie ograniczeń poleceniami CREATE i ALTER Definiowanie integralności danych/relacji poprzez zastosowanie klucza obcego Włączanie/wyłączanie ograniczeniami; usuwanie ograniczeń
Ograniczenia a wydajność Czy warto? Typ ograniczenia CHECK Średni czas mmmm Czas dodawania mmmm 1000 wwwwwwwwwwwwww Narzut Brak ograniczeń 12,401 0.484 - Proste ograniczenie 13,034 0.509 5,1% Złożone ograniczenie 14,505 0.567 17,0% Wiele złożonych ograniczeń 25,101 0.981 102.4% Ograniczenia generują duży narzut czasowy związany z integralnością danych Istotne w przypadku dużych, złożonych baz danych Kompensacja obciążenia poprzez implementację logiki biznesowej na poziomie aplikacji https://voluntarydba.com/post/2012/11/15/how-much-overhead-do-check-constraints-have.aspx
04 : Praca własna
Schemat dziekanatu Praca własna
Dziękuję!