Introduction to AdvancedIntroduction to Advanced
SQL Concepts - CheckingSQL Concepts - Checking
of Constraintsof Constraints
Check ConstraintsCheck Constraints
• Limits values that may appear in components for
some attributes
• Expressed as either
o Constraint on attribute in definition of its relation’s schema
o Constraint on a tuple as a whole; part of relation schema, but not
associated with individual attributes
Attribute CheckAttribute Check
ConstraintConstraint
Simple Case:
• Assume in table Studio we have declaration:
presC# INT REFERENCES MovieExec(cert#) NOT NULL
• Cannot use set-null policy to fix referential int. violation
General Case:
• Attached to attribute declaration
• Keyword CHECK followed by any condition that could follow
WHERE clause in SQL query
o Checked whenever any tuple gets a new value for this attribute (incl.
on inserts of new tuples)
o Not checked when modification does not change the value of the
attribute to which CHECK belongs
ExampleExample
CREATE TABLE MovieStar (
…
gender CHAR(1) CHECK (gender IN (‘F’, ‘M’)),
…
);
Condition being checked can be anything that could
follow WHERE in SFW query
ExampleExample
• Can the following attribute-based CHECK constraint
simulate a referential integrity constraint?
CREATE TABLE Studio (
Name CHAR(30) PRIMARY KEY,
Address VARCHAR(255),
presC# INT CHECK
(presC# IN (SELECT cert# FROM MovieExec));
• No, updates to MovieExec are invisible to the
above CHECK constraint
Tuple-Based CheckTuple-Based Check
ConstraintConstraint• Add a tuple-based CHECK constraint to MovieStar
schema that prevents the insertion of male stars
whose name begin with “Ms.”
o Checked after insertions and updates to tuples of the
relation on which it is defined
CREATE TABLE MovieStar (
Name CHAR(30) PRIMARY KEY,
Address VARCHAR(255),
Gender CHAR(1),
Birthdate DATE,
CHECK (gender <> ‘M’ OR name NOT LIKE ‘Ms.%’)
//forbid the insertion of tuples that satisfy multiple conditions,
namely “male and name starts with ‘Ms.’ ”
//equivalent to the OR of the negation of the same terms
AssertionsAssertions
• More powerful mechanism of constraining
values in database are part of database
schema
o First-class database citizens like views or relations
• Assertion is a boolean-valued SQL expression
that must be true at all times
o Easy to state for DB implementer, simply state
what must be true
o Harder to implement efficiently since DBMS must
deduce whether or not a given database
modification could affect truth of assertion
ExampleExample
• Express that no one can become president of
a studio unless net worth greater than $10M
MovieExec(name, address, cert#, netWorth)
Studio(name, address, presC#)
CREATE ASSERTION RichPres CHECK
(NOT EXISTS
(SELECT *
FROM Studio, MovieExec
WHERE presC# = cert# AND netWorth < 10000000)
)
);
• Can this be simulated with tuple-based CHECK
constraints?
Using a Tuple-BasedUsing a Tuple-Based
CHECKCHECKCREATE 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)
)
);
ExampleExample
• Assert that the total length of all movies by a given
studio shall not exceed 10,000 minutes
Movie(title,year,length,inColor,studioName,producerC#)
CREATE ASSERTION SumLength CHECK
(10000 >= ALL
(SELECT SUM(length)FROM Movie
GROUP BY StudioName));
 Is the effect the same as that of the following tuple-based CHECK:
CHECK (10000 >= ALL
(SELECT SUM(length) FROM Movie
GROUP BY studioName));
TriggersTriggers
• Aka “event-condition-action” (ECA) rules
• Three important facts about triggers
o Only awakened when certain events, specified by db
programmer, occur
o Executing triggers involves testing a condition first
o If condition satisfied, action of trigger is executed
ExampleExample• Write trigger to prevent any attempt to lower networth of movie exec
MovieExec(name,address,cert#,netWorth)
CREATE TRIGGER NetWorthTrigger
AFTER UPDATE OF netWorth ON MovieExec
REFERENCING
OLD ROW AS OldTuple,
NEW ROW AS NewTuple,
FOR EACH ROW
WHEN (OldTuple.netWorth > NewTuple.netWorth)
UPDATE MovieExec
SET netWorth = OldTuple.netWorth
WHERE cert# = NewTuple.cert#;
Event
Condition
Action
CommentsComments
• The action rule may be executed BEFORE or AFTER the event
o If before, when clause is tested before triggering event
• Besides update, other triggering events are insert and delete
• When clause is optional
• The action may contain any number of SQL statements,
separated by BEGIN … END
• If triggering event is insert, may use a NEW ROW AS clause to
give name to inserted row
o Conversely, may use OLD ROW AS in case of a deletion
More CommentsMore Comments
• If we omit FOR EACH ROW clause, trigger becomes
statement-level trigger (as opposed to row-level trigger)
• Statement-level trigger is executed ONCE no matter how
many rows it actually effects
o Cannot refer to old and new tuples
• However, both types of triggers can access old and new set
of tuples
o OLD TABLE AS … (i.e., deleted tuples or old versions of
updated tuples)
o NEW TABLE AS … (i.e., inserted tuples or new versions of
updated tuples)
ExampleExample
• Prevent average net worth of movie executives to drop below $500K
• Violation on insert, update, delete => need three triggers!
MovieExec(name,address,cert#,netWorth)
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;
ThankThank You !!!You !!!
For More Information click below link:
Follow Us on:
http://vibranttechnologies.co.in/sql-classes-in-mumbai.html

SQL- Introduction to advanced sql concepts

  • 2.
    Introduction to AdvancedIntroductionto Advanced SQL Concepts - CheckingSQL Concepts - Checking of Constraintsof Constraints
  • 3.
    Check ConstraintsCheck Constraints •Limits values that may appear in components for some attributes • Expressed as either o Constraint on attribute in definition of its relation’s schema o Constraint on a tuple as a whole; part of relation schema, but not associated with individual attributes
  • 4.
    Attribute CheckAttribute Check ConstraintConstraint SimpleCase: • Assume in table Studio we have declaration: presC# INT REFERENCES MovieExec(cert#) NOT NULL • Cannot use set-null policy to fix referential int. violation General Case: • Attached to attribute declaration • Keyword CHECK followed by any condition that could follow WHERE clause in SQL query o Checked whenever any tuple gets a new value for this attribute (incl. on inserts of new tuples) o Not checked when modification does not change the value of the attribute to which CHECK belongs
  • 5.
    ExampleExample CREATE TABLE MovieStar( … gender CHAR(1) CHECK (gender IN (‘F’, ‘M’)), … ); Condition being checked can be anything that could follow WHERE in SFW query
  • 6.
    ExampleExample • Can thefollowing attribute-based CHECK constraint simulate a referential integrity constraint? CREATE TABLE Studio ( Name CHAR(30) PRIMARY KEY, Address VARCHAR(255), presC# INT CHECK (presC# IN (SELECT cert# FROM MovieExec)); • No, updates to MovieExec are invisible to the above CHECK constraint
  • 7.
    Tuple-Based CheckTuple-Based Check ConstraintConstraint•Add a tuple-based CHECK constraint to MovieStar schema that prevents the insertion of male stars whose name begin with “Ms.” o Checked after insertions and updates to tuples of the relation on which it is defined CREATE TABLE MovieStar ( Name CHAR(30) PRIMARY KEY, Address VARCHAR(255), Gender CHAR(1), Birthdate DATE, CHECK (gender <> ‘M’ OR name NOT LIKE ‘Ms.%’) //forbid the insertion of tuples that satisfy multiple conditions, namely “male and name starts with ‘Ms.’ ” //equivalent to the OR of the negation of the same terms
  • 8.
    AssertionsAssertions • More powerfulmechanism of constraining values in database are part of database schema o First-class database citizens like views or relations • Assertion is a boolean-valued SQL expression that must be true at all times o Easy to state for DB implementer, simply state what must be true o Harder to implement efficiently since DBMS must deduce whether or not a given database modification could affect truth of assertion
  • 9.
    ExampleExample • Express thatno one can become president of a studio unless net worth greater than $10M MovieExec(name, address, cert#, netWorth) Studio(name, address, presC#) CREATE ASSERTION RichPres CHECK (NOT EXISTS (SELECT * FROM Studio, MovieExec WHERE presC# = cert# AND netWorth < 10000000) ) ); • Can this be simulated with tuple-based CHECK constraints?
  • 10.
    Using a Tuple-BasedUsinga Tuple-Based CHECKCHECKCREATE 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) ) );
  • 11.
    ExampleExample • Assert thatthe total length of all movies by a given studio shall not exceed 10,000 minutes Movie(title,year,length,inColor,studioName,producerC#) CREATE ASSERTION SumLength CHECK (10000 >= ALL (SELECT SUM(length)FROM Movie GROUP BY StudioName));  Is the effect the same as that of the following tuple-based CHECK: CHECK (10000 >= ALL (SELECT SUM(length) FROM Movie GROUP BY studioName));
  • 12.
    TriggersTriggers • Aka “event-condition-action”(ECA) rules • Three important facts about triggers o Only awakened when certain events, specified by db programmer, occur o Executing triggers involves testing a condition first o If condition satisfied, action of trigger is executed
  • 13.
    ExampleExample• Write triggerto prevent any attempt to lower networth of movie exec MovieExec(name,address,cert#,netWorth) CREATE TRIGGER NetWorthTrigger AFTER UPDATE OF netWorth ON MovieExec REFERENCING OLD ROW AS OldTuple, NEW ROW AS NewTuple, FOR EACH ROW WHEN (OldTuple.netWorth > NewTuple.netWorth) UPDATE MovieExec SET netWorth = OldTuple.netWorth WHERE cert# = NewTuple.cert#; Event Condition Action
  • 14.
    CommentsComments • The actionrule may be executed BEFORE or AFTER the event o If before, when clause is tested before triggering event • Besides update, other triggering events are insert and delete • When clause is optional • The action may contain any number of SQL statements, separated by BEGIN … END • If triggering event is insert, may use a NEW ROW AS clause to give name to inserted row o Conversely, may use OLD ROW AS in case of a deletion
  • 15.
    More CommentsMore Comments •If we omit FOR EACH ROW clause, trigger becomes statement-level trigger (as opposed to row-level trigger) • Statement-level trigger is executed ONCE no matter how many rows it actually effects o Cannot refer to old and new tuples • However, both types of triggers can access old and new set of tuples o OLD TABLE AS … (i.e., deleted tuples or old versions of updated tuples) o NEW TABLE AS … (i.e., inserted tuples or new versions of updated tuples)
  • 16.
    ExampleExample • Prevent averagenet worth of movie executives to drop below $500K • Violation on insert, update, delete => need three triggers! MovieExec(name,address,cert#,netWorth) 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;
  • 17.
    ThankThank You !!!You!!! For More Information click below link: Follow Us on: http://vibranttechnologies.co.in/sql-classes-in-mumbai.html