tworzenie tabel
Transkrypt
tworzenie tabel
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.). Bazy danych - laboratorium, Hanna Kleban 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. Bazy danych - laboratorium, Hanna Kleban 2 Tworzenie tabel CREATE TABLE <nazwa tabeli> (<nazwa kolumny> <typ danych> [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. Bazy danych - laboratorium, Hanna Kleban 3 Typy danych – znakowe i binarne Znakowe typy służą do przechowywania łańcuchów znaków. Mogą być stałej lub zmiennej długości. 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 zmiennej długości znaków. Bazy danych - laboratorium, Hanna Kleban 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. datetime Liczba bajtów informacji potrzebna do zapisania 8 bajtów smalldatetime 4 bajty Precyzja 3/100 sekundy 1 minuta Najmniejsza możliwa wartość 1 stycznia 1753 1 stycznia 1990 Największa możliwa wartość 31 grudnia 9999 6 czerwca 2079 SQL Server nie dysponuje formatami danych, które przechowują informacje o samej dacie lub samym czasie. Bazy danych - laboratorium, Hanna Kleban 5 Tworzenie tabel – przykład Utwórz relację OSOBY o schemacie: N a z w is k o Im ie PESEL c ią g te k sto w y , 3 0 zn a k o w y o zm ie n n e j d łu g o śc i c ią g te k sto w y , 2 0 zn a k o w y o zm ie n n e j d łu g o śc i c ią g te k sto w y , 1 1 zn a k o w y o sta łe j d łu g o śc i create table OSOBY (Nazwisko varchar(30), Imie varchar(20), PESEL char(11)) Utwórz relację OSOBY_1 o schemacie: Id Nazwisko Imie_1 Imie_2 miasto całkowity ciąg tekstowy, 30 znakowy o zmiennej długości ciąg tekstowy, 20 znakowy o zmiennej długości ciąg tekstowy, 20 znakowy o zmiennej długości ciąg tekstowy, 11 znakowy o zmiennej długości unikalny, przyrost 1, wartość początkowa 1 obowiązkowy obowiązkowy opcjonalny obowiązkowy, wartośc domyslna Poznań 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ń’) Bazy danych - laboratorium, Hanna Kleban 6 DEFINIOWANIE KLUCZY GŁÓWNYCH Utwórz relację OSOBY_2 o schemacie: Id_osoby unikalny, przyrost 1, wartość początkowa 1, klucz główny całkowity ciąg tekstowy, 30 znakowy o zmiennej długości ciąg tekstowy, 20 znakowy o zmiennej długości Nazwisko Imie obowiązkowy obowiązkowy 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ę PROJEKTY o schemacie: całkowity Id_Projektu Nazwa Data_Rozpoczecia ciąg tekstowy, 150 znakowy, o zmiennej długości datetime unikalny, przyrost 1, wartość początkowa 1, klucz główny obowiązkowy wartość domyślna: data systemowa 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 obowiązkowy Bazy danych - laboratorium, Hanna Kleban 7 DEFINIOWANIE KLUCZY OBCYCH Utwórz relację PRACOWNICY o schemacie: ID_pracownika Nazwisko stanowisko Id_Dzialu całkowity ciąg tekstowy, 30 znakowy, o zmiennej długości ciąg tekstowy,15 znakowy, o zmiennej długości znakowy o długośc stałej równej 1 unikalny, przyrost 1, wartość początkowa 1, klucz główny obowiązkowy obowiązkowy obowiązkowy, 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)) Bazy danych - laboratorium, Hanna Kleban 8 Ograniczenie UNIQUE i CHECK Utwórz relacje OSOBY_3 o schemacie oraz OSOBY_4: Id_osoby NIP Nazwisko Imie ID_Osoby Plec Dzial Prowizja całkowity ciąg tekstowy o stałej długości 10 znaków ciąg tekstowy, 30 znakowy o zmiennej długości ciąg tekstowy, 20 znakowy o zmiennej długości unikalny, przyrost 1, wartość początkowa 1, klucz główny obowiązkowy, unikalny obowiązkowy obowiązkowy całkowity ciąg tekstowy,1 znakowy, o stałej długości ciąg tekstowy,2 znakowy, o stałej długości liczba całkowita 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) klucz główny jedna z wartosci ‘K’ lub ‘M’ pierwszy znak to litera, drugi cyfra 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)) Bazy danych - laboratorium, Hanna Kleban 9 Polecenie CONSTRAINT Utwórz relację OSOBY_5 analogiczną ograniczeniom nadaj odpowiednie nazwy: do OSOBY_4 tylko 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)) Bazy danych - laboratorium, Hanna Kleban 10 Zmiana definicji tabeli ALTER TABEL nazwa_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 Bazy danych - laboratorium, Hanna Kleban 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) Bazy danych - laboratorium, Hanna Kleban 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 Bazy danych - laboratorium, Hanna Kleban 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) PRACOWNICY ON UPDATE CASCADE ) Bazy danych - laboratorium, Hanna Kleban 14 Przykład Po dokonaniu modyfikacji: UPDATE DZIALY SET Id_Dzialu=’G’ WHERE Id_Dzialu=’M’ otrzymamy PRACOWNICY DZIALY 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: PRACOWNICY DZIALY Bazy danych - laboratorium, Hanna Kleban 15