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

Podobne dokumenty