Tworzenie tabel Tabela podstawowa struktura, na której zbudowana jest relacyjna baza danych. Jest to zbiór kolumn (atrybutów) o ustalonych właściwościach, w których przechowuje się dane. Dane te są reprezentowane w postaci krotek (wierszy), które reprezentują jednostki np. informacje o pracownikach, mające szereg atrybutów (nazwisko, imię, data urodzenia itp.). 1
Tworzenie tabel CREATE TABLE instrukcja do tworzenia tabeli jest dość skomplikowana. Tworząc tabele musimy między innymi zdefiniować kolumny podając co najmniej nazwę oraz typ danych. Opcjonalnie możemy między innymi zdefiniować: czy dopuszczalne są wartości puste, czy jest to wiersz tożsamościowy lub identyfikator GUID, podać wartość domyślną kolumny, podać warunki ograniczenia. 2
CREATE TABLE <nazwa tabeli> (<nazwa kolumny> <typ danych> Tworzenie tabel [PRIMARY KEY FOREIGN KEY REFERENCES tab_odn (naz_atr)] [NULL NOT NULL] [[DEFAULT <wartość domyślna>] IDENTITY (wartość początkowa, wartość inkrementacji) [NOT FOR REPLICATION]] [ [<ograniczenie kolumny>]]) Wartość domyślna DEFAULT i specyfikacja tożsamości IDENTITY wykluczają się wzajemnie. 3
Typy danych znakowe i binarne Znakowe typy służą do przechowywania łańcuchów znaków. Mogą być stałej lub. Wyróżniamy 6 typów danych: char,varchar, nchar,nvarchar, text,ntext. Typ nvarchar oraz nchar przystosowane są do obsługi znaków w standardzie Unicode. Do zapisania znaków w Unicod potrzeba dwóch bajtów dlatego ograniczona jest liczba przechowywanych znaków do 4000. Char określa stałą długość. Varchar stosujemy dla znaków. 4
Typy danych datetime Typ datetime i smalldatetime przechowują informacje o dacie i czasie, różnią się one precyzją i ilością miejsca niezbędną do zapisania danych. Liczba bajtów potrzebna do zapisania informacji Precyzja Najmniejsza możliwa wartość Największa możliwa wartość datetime 8 bajtów 3/100 sekundy 1 stycznia 1753 31 grudnia 9999 smalldatetime 4 bajty 1 minuta 1 stycznia 1990 6 czerwca 2079 SQL Server nie dysponuje formatami danych, które przechowują informacje o samej dacie lub samym czasie. 5
Tworzenie tabel przykład Utwórz relację OSOBY o schemacie: Nazwisko Imie PESEL ciąg tekstowy, 30 znakowy o ciąg tekstowy, 20 znakowy o ciąg tekstowy, 11 znakowy o stałej długości Utwórz relację OSOBY_1 o schemacie: Id Nazwisko Imie_1 Imie_2 miasto całkowity ciąg tekstowy, 30 znakowy o ciąg tekstowy, 20 znakowy o ciąg tekstowy, 20 znakowy o ciąg tekstowy, 11 znakowy o unikalny, przyrost 1, wartość początkowa 1 opcjonalny, wartośc domyslna Poznań create table OSOBY (Nazwisko varchar(30), Imie varchar(20), PESEL char(11)) create table OSOBY_1 ( Id int IDENTITY(1,1), Nazwisko varchar(30) NOT NULL, Imie_1 varchar(20) NOT NULL, Imie_2 varchar(20), Miasto varchar(30) NOT NULL DEFAULT Poznań ) 6
DEFINIOWANIE KLUCZY GŁÓWNYCH Utwórz relację OSOBY_2 o schemacie: Id_osoby Nazwisko Imie całkowity ciąg tekstowy, 30 znakowy o ciąg tekstowy, 20 znakowy o unikalny, przyrost 1, wartość początkowa 1, klucz główny Utwórz relację PROJEKTY o schemacie: Id_Projektu Nazwa całkowity ciąg tekstowy, 150 znakowy, o zmiennej długości unikalny, przyrost 1, wartość początkowa 1, klucz główny Data_Rozpoczecia datetime wartość domyślna: data systemowa create table OSOBY_2 ( ID_osoby int IDENTITY(1,1) PRIMARY KE Nazwisko varchar(30) NOT NULL, Imie varchar(20) NOT NULL) Utwórz relację DZIAŁY o schemacie: Id_Dzialu Dzial_Opis znakowy o długość stałej równej 1 ciąg tekstowy, 15 znakowy, o zmiennej długości klucz główny 7
DEFINIOWANIE KLUCZY OBCYCH Utwórz relację PRACOWNICY o schemacie: ID_pracownika Nazwisko stanowisko Id_Dzialu całkowity ciąg tekstowy, 30 znakowy, o ciąg tekstowy,15 znakowy, o znakowy o długośc stałej równej 1 unikalny, przyrost 1, wartość początkowa 1, klucz główny, klucz obcy z tabeli DZIALY CREATE TABLE PRACOWNICY (Id_Pracownika int IDENTITY(1,1) PRIMARY KEY, Nazwisko varchar(30) NOT NULL, Stanowisko varchar(15) NOT NULL, Id_Dzialu char(1) NOT NULL FOREIGN KEY REFERENCES DZIALY (Id_Dzialu)) 8
Ograniczenie UNIQUE i CHECK Utwórz relacje OSOBY_3 o schemacie oraz OSOBY_4: Id_osoby NIP Nazwisko Imie całkowity ciąg tekstowy o stałej długości 10 znaków ciąg tekstowy, 30 znakowy o ciąg tekstowy, 20 znakowy o unikalny, przyrost 1, wartość początkowa 1, klucz główny, unikalny create table OSOBY_3 ( ID_osoby int IDENTITY(1,1) PRIMARY KEY, NIP char(10) UNIQUE Nazwisko varchar(30) NOT NULL, Imie varchar(20) NOT NULL) ID_Osoby całkowity klucz główny Plec ciąg tekstowy,1 znakowy, o stałej długości jedna z wartosci K lub M Dzial ciąg tekstowy,2 znakowy, o stałej pierwszy znak to litera, drugi długości cyfra Prowizja liczba całkowita z przedziału (100, 1000) create table OSOBY_4 (Id_Osoby int PRIMARY KEY, Plec char(1) CHECK(Plec IN ('K','M')), Dzial char(2) CHECK(Dzial Like '[A-Z][0-9]'), Prowizja int CHECK (Prowizja between 100 and 1000)) 9
Polecenie CONSTRAINT Utwórz relację OSOBY_5 analogiczną do OSOBY_4 tylko ograniczeniom nadaj odpowiednie nazwy: create table OSOBY_5 (Id_Osoby int PRIMARY KEY, Plec char(1) CONSTRAINT blad_plec CHECK(Plec IN ('K','M')), Dzial char(2) CONSTRAINT blad_dzial CHECK(Dzial Like '[A-Z][0-9]'), Prowizja int CONSTRAINT blad_prowizja CHECK (Prowizja between 100 and 1000)) 10
ALTER TABEL nazwa_tabeli zmiana_definicji_tabeli Zmiana definicji tabeli zmiana_definicji_tabeli to: ALTER COLUMN def_kolumny - zmiana np. długości atrybutu ADD def_kolumny dodanie atrybutu DROP COLUMN nazwa_kolumny -usunięcie atrybutu ADD CONSTRAINT def_ograniczenia dodanie ograniczenia na atrybut DROP CONSTRAINT nazwa_ogra usunięcie ograniczenia 11
Przykłady Wszystkie przykłady odnoszą się do relacji OSOBY_1 dodanie atrybutu PLEC ALTER TABLE osoby_1 ADD PLEC char (1) usunięcie atrybutu IMIE_2 ALTER TABLE osoby_1 DROP COLUMN imie_2 zdefiniowanie klucza głównego dla atrybutu ID ALTER TABLE osoby_1 ADD CONSTRAINT klucz PRIMARY KEY (ID) dodanie ograniczenia na atrybut PLEC ATLER TABLE osoby_1 ADD CONSTRAAINT ograniczenie_plec CHECK (PLEC IN( K, m )) zmiana wielkości pola ALTER TABLE osoby_1 ALTER COLUMN Imie_1 varchar(15) 12
Więzy integralności Ograniczenia między tabelami definiujemy przy określaniu klucza obcego. FOREIGN KEY (kolumny_klucza_obcego) REFERENCES tabela_klucza_głównego (kolumny_klucza_głównego) ON UPDATE czynność_przy_modyfikacji ON DELETE czynność_przy_kasowaniu czynność to: CASCADE skasuj lub zmodyfikuj wszystkie wiersze zawierające wskazaną wartość klucza obcego, NO ACTION nie wprowadzaj zmian do wartości klucza obcego 13
Przykład Mamy dwie tabele o następujących definicjach i krotkach: CREATE TABLE DZIALY (Id_Dzialu char(1) PRIMARY KEY, Dzial_Opis varchar(15) NOT NULL,) DZIALY CREATE TABLE PRACOWNICY (Id_Pracownika int IDENTITY (1,1) PRIMARY KEY, Nazwisko varchar(30) NOT NULL, Stanowisko varchar(15) NOT NULL, Id_Dzialu char(1) NOT NULL FOREIGN KEY REFERENCES DZIALY(Id_Dzialu) ON UPDATE CASCADE ) PRACOWNICY 14
Przykład Po dokonaniu modyfikacji: UPDATE DZIALY SET Id_Dzialu= G WHERE Id_Dzialu= M otrzymamy DZIALY PRACOWNICY W przypadku kiedy mamy następującą definicję klucza obcego w tabeli PRACOWNICY: Id_Dzialu char(1) NOT NULL FOREIGN KEY REFERENCES DZIALY(Id_Dzialu) ON DELETE CASCADE po wykonaniu instrukcji: DELETE DZIALY WHERE Id_Dzialu='K' otrzymamy: DZIALY PRACOWNICY 15