You are on page 1of 31

: -

: 2+2

/ (assertion) SQL boolean


.
(
) .
.
.



CREATE ASSERTION <name> CHECK (<condition>)

.
11:
(netWorth)
10,000,000 .
Studio(name, address, presC#)
MovieExec(name, address, cert#, netWorth)

CREATE ASSERTION RichPres CHECK


(NOT EXIST
(SELECT *
FROM Studio, MovieExec
WHERE presC# = cert# AND netWorth < 10000000
)
);



Studio(name, address, presC#)
MovieExec(name, address, cert#, netWorth)
CREATE TABLE Studio (
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC# INT REFERENCES MovieExec(cert#)
CHECK (presC# NOT IN
(SELECT cert# FROM MovieExec
WHERE netWorth < 10000000)
)
);
Studio
MovieExec
10,000,000 .
MovieExec.
4


12:
10,000 .
Movie (title, year, length, inColor, studioName, producerc#)
CREATE ASSERTION SumLength CHECK (10000 >= ALL
(SELECT SUM (length) FROM Movie GROUP BY studioName)
);

:
CHECK (10000 >= ALL
(SELECT SUM (length) FROM Movie GROUP BY studioName));

.
.


13:
.
Vraboten (ime, prezime, mbr, brod)
Odelenie (mgr_mbr, sifra, imeod)
CREATE ASSERTION Ogranici_plata CHECK ( NOT EXISTS
(SELECT *
FROM Vraboten V, Vraboten M, Odelenie O
WHERE V.plata > M.plata AND
V.brod = O.sifra AND
O.mgr_mbr = M.mbr
)
);
CHECK
,
6
.

-- .
:
-
( ,
)
-
- .
, .

SQL
1. .
2.
,
.
3. Update
.
4. WHEN .

.
5.
-
- .
8


13: .

.
MovieExec(name, address, cert#, netWorth)

(1) CREATE TRIGGER NetWorthTrigger


(2) AFTER UPDATE OF netWorth ON MovieExec
(3) REFERENCING
(4)
OLD ROW AS OldTuple,
(5)
NEW ROW AS NewTuple
(6) FOR EACH ROW
(7) WHEN (OldTuple.netWorth > NewTuple.netWorth)
(8)
UPDATE MovieExec
(9)
SET netWorth = OldTuple.netWorth
(10)
WHERE cert# = NewTuple.cert#;
9

1
2 - netWorth
MovieExec
3 5 ( )
( )
6 FOR EACH ROW
.
FOR EACH STATEMENT
SQL . alias
.
7 .
.
8 10 . SQL
.
10


:
2
AFTER. BEFORE WHEN
.
.
.
UPDATE INSERT DELETE.
OF UPDATE
. INSERT DELETE
.
WHEN .
.
SQL ,
BEGIN ... END.
UPDATE
OLD ROW AS NEW ROW AS. INSERT
NEW ROW AS, DELETE OLD ROW AS.
6 FOR EACH ROW FOR EACH STATEMENT
SQL .
11


14:
500,000 . .
UPDATE ( DELETE INSERT ).
MovieExec(name, address, cert#, netWorth)

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)

CREATE TRIGGER AvgNetWorthTrigger


AFTER UPDATE OF netWorth ON MovieExec
REFERENCING
OLD TABLE AS OldStuff,
NEW TABLE AS NewStuff
FOR EACH STATEMENT
WHEN (500000 > (SELECT AVG(netWorth) FROM MovieExec))
BEGIN
DELETE FROM MovieExec
WHERE (name, address, cert#, netWorth) IN NewStuff;
INSERT INTO MovieExec
(SELECT * FROM OldStuff);
END;
12

3 5 NewStuff OldStuff

UPDATE .
6
.
7
update e 500000.
8 13 . 9 10
, 11 12 update.

13


Instead-Of SQL-99
BEFORE AFTER INSTEAD OF

.
VIEW.
VIEW ParamountMovie Movie.
CREATE VIEW ParamountMovie AS
SELECT title, year
FROM Movie
WHERE studioName = Paramount;

(1)
(2)
(3)
(4)
(5)
(6)

CREATE TRIGGER ParamountInsert


INSTEAD OF INSERT ON ParamountMovie
REFERENCING NEW ROW AS NewRow
FOR EACH ROW
INSERT INTO Movie (title, year, studioName)
VALUES (NewRow.title, NewRow.year, Paramount);

14


(Semistructured data - SS)
:
1. (legacy)
, 2
.
2. XML (Extensible Markup Language)
3. XML
Web.
- XML
- XML
Web.
4. XML query : Xpath, XQuery
15


E/R :
.
,
.
2 E/R
.

.
() :
.
() 2 : (
) .
SSD
,
.
SSD

.
16


/R ,
ODL , SSD .

.
SSD .
. .
(integer, string ).
. .
.
.

17


Root
movie

star
star

street

address

Carrie
Fisher

street

city

sw

name

address

name

StarsIn

mh

cf

street city

Mark
Hamil

city

Oak

starOf

Brentwood

title

Star
Wars

year

1977

starOf

Maple Hollywood Locust

Malibu
StarsIn
18


SS .
root.
.
Carrie Hisher, Maple .
cf (Carrie Fisher), mh (mark Hamil) sw (Star Wars)
.
L N M :
- N , M
. L .
- N M L N M.
.
Carrie Fisher
street city.
Stars (name, address (street, city))
Mark Hamil
street city. Stars (name, street, city).
.
19

XML
XML (Extensible Markup Language)
, HTML.
HTML
.
XML .
XML
SSD. SSD.
SSD.
XML
ID IDREF . (
SSD)
( SSD).

20

XML

XML <> </>. HTML
: <ime> </ime>.
HTML , <P>
, XML.
.
XML 2
1. well-formed XML ( )
SSD.
SSD
.
2. valid XML () DTD

.
DTD (document type definition)
XML .
21

XML
XML
XML
XML
.
STANDALONE=yes XML,
DTD .
, XML

<? XML VERSION=1.0 STANDALONE=yes?>


<BODY>

</BODY>

22

XML
XML
.
<? XML VERSION = 1.0> STANDALONE = yes ?>
<STAR-MOVIE-DATA>

<STAR><NAME>Carrie Fisher</NAME>

<ADDRESS><STREET>123 Maple St.</STREET>

<CITY>Hollywood</CITY></ADDRESS>

<ADDRESS><STREET>5 Locust</STREET>

<CITY>Malibu</CITY></ADDRESS>

</STAR>

<STAR><NAME>Mark Hamil</NAME>

<STREET>456 Oak</STREET><CITY>Brentwood</CITY>

</STAR>

<MOVIE><TITLE>Star Wars</TITLE><YEAR>1977</YEAR>

</MOVIE>
</STAR-MOVIE-DATA>
23

XML
StarsIn.

.

<STAR><NAME>Mark Hamil</NAME>

<STREET>456 Oak</STREET><CITY>Brentwood</CITY>

<MOVIE><TITLE>Star Wars</TITLE><YEAR>1977</YEAR></MOVIE>

<MOVIE><TITLE>Empire Strikes

Back</TITLE><YEAR>1980</YEAR></MOVIE>
</STAR>

24

XML
DTD (document type definitions)
DTD XML
.
DTD
. .
DTD
.

DTD
<! DOCTYPE root-tag [
<! ELEMENT element-name (components)>
more elements
]>

DTD.
.
.
25

XML
<! DOCTYPE Stars [
<! ELEMENT STARS (STAR*)>
<! ELEMENT STAR (NAME, ADDRESS+, MOVIES)>
<! ELEMENT NAME (#PCDATA)>
<! ELEMENT ADDRESS (STREET, CITY)>
<! ELEMENT STREET (#PCDATA)>
<! ELEMENT CITY (#PCDATA)>
<! ELEMENT MOVIES (MOVIE*)>
<! ELEMENT MOVIE (TITLE, YEAR)>
<! ELEMENT TITLE (#PCDATA)>
<! ELEMENT YEAR (#PCDATA)>
]>

26

XML
Stars.
<STARS> </STARS> STAR .
*
STAR 3 : NAME, ADDRESS
MOVIES. .
.
+
NAME #PCDATA (parsed character data)
#PCDATA

ADDRESS .
MOVIES MOVIE .
MOVIE ,
.
?
I OR. (#PCDATA I (STREET,CITY))
a
.

27

<STARS>
<STAR><NAME>Carrie Fisher</NAME>
<ADDRESS><STREET>123 Maple St.</STREET>
<CITY>Hollywood</CITY></ADDRESS>
<ADDRESS><STREET>5 Locust</STREET>
<CITY>Malibu</CITY></ADDRESS>
<MOVIES><MOVIE><TITLE>Star Wars</TITLE>
<YEAR>1977</YEAR></MOVIE>
<MOVIE><TITLE>Empire Strikes Back</TITLE>
<YEAR>1980</YEAR></MOVIE>
<MOVIE><TITLE>Return of the Jedi</TITLE>
<YEAR>1983</YEAR></MOVIE>
</MOVIES>
</STAR>
<STAR><NAME>Mark Hamil</NAME>
<ADDRESS><STREET>456 Oak</STREET>
<CITY>Brentwood</CITY></ADDRESS>
<MOVIES><MOVIE><TITLE>Star Wars</TITLE>
<YEAR>1977</YEAR></MOVIE>
<MOVIE><TITLE>Empire Strikes Back</TITLE>
<YEAR>1980</YEAR></MOVIE>
<MOVIE><TITLE>Return of the Jedi</TITLE>
<YEAR>1983</YEAR></MOVIE>
</MOVIES>
</STAR>
</STARS>



DTD.

28

XML
DTD
- DTD
- DTD
.
<? XML VERSION = 1.0 STANDALONE = no ?>
<! DOCTYPE Stars SYSTEM star.dtd>
STANDALONE no.
DTD !DOCTYPE
SYSTEM.
!ATTLIST

ID,
<E> </E>.
IDREF
IDs.
29

DTD ID, IDREF !ATTLIST


<! DOCTYPE Stars-Movies [
<! ELEMENT STARS-MOVIES (STAR*, MOVIE*)>
<! ELEMENT STAR (NAME, ADDRESS+)>
<!ATTLIST STAR
StarId ID
starredIn IDREFS>
<! ELEMENT NAME (#PCDATA)>
<! ELEMENT ADDRESS (STREET, CITY)>
<! ELEMENT STREET (#PCDATA)>
<! ELEMENT CITY (#PCDATA)>
<! ELEMENT MOVIE (TITLE, YEAR)>
<!ATTLIST MOVIE
MovieId ID
starsOf IDREFS>
<! ELEMENT TITLE (#PCDATA)>
<! ELEMENT YEAR (#PCDATA)>
]>
, .
<Star> starredIn ID
. <Star> StarId ID.
Movie 30
.

<STARS-MOVIES>
<STAR starId = cf starredIn = sw, esb, rj >
<NAME>Carrie Fisher</NAME>
<ADDRESS><STREET>123 Maple St.</STREET>
<CITY>Hollywood</CITY></ADDRESS>
<ADDRESS><STREET>5 Locust</STREET>
<CITY>Malibu</CITY></ADDRESS>
</STAR>
<STAR starId = mh starredIn = sw, esb, rj >
<NAME>Mark Hamil</NAME>
<ADDRESS><STREET>456 Oak</STREET>
<CITY>Brentwood</CITY></ADDRESS>
</STAR>
<MOVIE movieId = sw starsOf = cf, mh >
<TITLE>Star Wars</TITLE>
<YEAR>1977</YEAR>
</MOVIE>
<MOVIE movieId = esb starsOf = cf, mh >
<TITLE>Empire Strikes Back</TITLE>
<YEAR>1980</YEAR>
</MOVIE>
<MOVIE movieId = rj starsOf = cf, mh >
<TITLE>Return of the Jedi</TITLE>
<YEAR>1983</YEAR>
</MOVIE>
</STARS-MOVIES>


DTD ID,
IDREF !ATTLIST

31

You might also like