Databázy - cvičenie č. 12
Created: 2008-12-03 - 19:42
-- 1) V tempdb si vytvorte tabulku osoba, ktora ma stlpce: -- id (bude samozrejme primarny kluc), meno, priezvisko, datum narodenia, pohlavie, vyska, vaha. USE tempdb; GO IF OBJECT_ID('osoba') IS NOT NULL DROP TABLE osoba; GO create table osoba( id int not null primary key, meno varchar(10), priezvisko varchar(20), dat_nar datetime, pohlavie char(1), vyska dec(5,2), vaha dec(5,2) ); -- 2) Upravte tabulku tak, aby do stlpca pohlavie bolo mozne vkladat len hodnoty 'm' alebo 'z' IF EXISTS (SELECT Constraint_Name FROM INFORMATION_SCHEMA.Table_CONSTRAINTS WHERE Constraint_Name = 'checkmz') ALTER TABLE osoba DROP CONSTRAINT checkmz; GO ALTER TABLE osoba ADD CONSTRAINT checkmz CHECK(pohlavie IN ('m','z')); GO INSERT osoba VALUES(1, 'Zuza', NULL, '1987.12.12', 'z', 175.50, 65.50); -- prejde --Vlozte do tabulky riadok, kde bude pohlavie = 'd' -- DB to samozrejme nedovoli INSERT osoba VALUES(2, 'Klara', NULL, '1982.9.9', 'd', 170.00, 60); -- neprejde -- =>: ----vypnite (NIE ZMAZTE) kontrolu jednoznacnosti vysky vahy a pohlavia (junikPVV) ALTER TABLE osoba NOCHECK CONSTRAINT checkmz GO INSERT osoba VALUES(2, 'Klara', NULL, '1982.9.9', 'd', 170.00, 60) -- prejde ----zapnite naspat kontrolu jednoznacnosti vysky vahy a pohlavia (junikPVV) ALTER TABLE osoba CHECK CONSTRAINT checkmz GO SELECT * FROM osoba -- 3) Osetrite tabulku tak, aby nebolo mozne vkladat null hodnoty do stlpcov meno a priezvisko ALTER TABLE osoba ALTER COLUMN meno VARCHAR(20) NOT NULL; ALTER TABLE osoba ALTER COLUMN priezvisko VARCHAR(20) NOT NULL; -- neprejde GO -- =>: UPDATE osoba SET priezvisko = 'Moja' WHERE id=1 or id=2; ALTER TABLE osoba ALTER COLUMN priezvisko VARCHAR(20) NOT NULL; -- prejde INSERT osoba VALUES(3, 'Zsoka', 'Moja', '1982.9.9', 'z', 170.00, 60) -- prejde SELECT * FROM osoba -- 4) Zabezpecte, aby trojica pohlavie, vyska a vaha bola jedinecna (jednoznacna) ALTER TABLE osoba ADD CONSTRAINT junikPVV UNIQUE(pohlavie, vaha, vyska); GO --Vlozte riadok, ktory nedodrziava toto obmedzenie: INSERT osoba VALUES(4, 'Ti', 'Moja', '1982.9.9', 'z', 170.00, 61) -- prejde INSERT osoba VALUES(5, 'Tu', 'Moja', '1982.9.9', 'z', 170.00, 62) -- neprejde -- 4) Zmazte stlpec vyska: ALTER TABLE osoba DROP COLUMN vyska; --nepovoli -- =>: ALTER TABLE osoba DROP CONSTRAINT junikPVV; ALTER TABLE osoba DROP COLUMN vyska; -- 5a) UPRAVTE stlpec pohlavie s default hodnotou 'm' s povolenymi hodnotami 'm' a 'z' priamo v def. ALTER TABLE osoba DROP CONSTRAINT checkmz; ALTER TABLE osoba DROP column pohlavie; GO ----------ALTER TABLE osoba ADD CONSTRAINT checkmz CHECK(pohlavie IN ('m','z')); -- predtym. ALTER TABLE osoba ADD pohlavie CHAR(1) DEFAULT 'm' CHECK(pohlavie IN ('m','z')); GO -- 5b) Vlozte dva platne riadky do tabulky: SELECT * FROM osoba -- aby sme videli stav a stlpce: INSERT osoba(id, meno, priezvisko, dat_nar, vaha) VALUES(5, 'Tu', 'Moja', '1982.9.9', 61) -- prejde INSERT osoba(id, meno, priezvisko, dat_nar, vaha, pohlavie) VALUES(6, 'Tina','Moja','1982.9.9', 62, 'z') -- prejde SELECT * FROM osoba -- 6) vytvorte tabulkU osoba, tak ako predtym, ale s tymito obmedzeniami: -- a) meno a priezvisko nesmu byt null -- b) pohlavie musi byt 'm' alebo 'z' -- c) trojica stlpcov pohlavie vyska a vaha budu jednoznacne -- d) v stlpcoch vyska a vaha nesmu byt nekladne hodnoty (vyska,vaha >0) -- e) navyse bude mat stlpec mobilne_cislo a to bude vo formate +412xxxxxxxxx DROP TABLE osoba; CREATE TABLE osoba( id INT NOT NULL PRIMARY KEY, meno VARCHAR NOT NULL, priezvisko varchar(20) NOT NULL, dat_nar datetime, pohlavie char(1) DEFAULT 'M' CONSTRAINT checkPohlavieMZ CHECK(pohlavie IN ('M','Z')), vyska dec(5,2) CONSTRAINT kladna_vyska CHECK(vyska > 0), vaha dec(5,2), tel_cislo char(13) CHECK(tel_cislo LIKE '+421[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') CONSTRAINT junikPVV UNIQUE(pohlavie, vyska, vaha), CHECK(VAHA > 0) ); ------------------------ -- 7a) Uvazujme tabulku Kniha z DB GammaVydavatel: IF OBJECT_ID('Kniha') IS NOT NULL DROP TABLE Kniha; GO CREATE TABLE Kniha( id int identity(1,1) not null primary key, nazov varchar(50) not null ); -- 7b) Chceme rozsirit DB tak, aby bolo mozne ukladat aj krajinu -- (jej skratku a cely nazov) povodu knihy. IF OBJECT_ID('Krajina') IS NOT NULL DROP TABLE Krajina; GO CREATE TABLE Krajina( id int identity(10,10) not null primary key, nazov varchar(50), skratka char(3) ); ALTER TABLE Kniha ADD id_krajina INT CONSTRAINT fk_krajina FOREIGN KEY (id_krajina) REFERENCES krajina(id); -- 7c) Vlozte jeden platny a jeden neplatny riadok do oboch tabuliek Kniha, Krajina. INSERT Krajina VALUES('Slovensko', 'Sk') GO SELECT * FROM Krajina SELECT * FROM Kniha INSERT Kniha VALUES('Biblia', 10) SELECT * FROM Kniha