SQL: Triggers, Views, Indexes: Introduction To Databases Compsci 316 Fall 2014
SQL: Triggers, Views, Indexes: Introduction To Databases Compsci 316 Fall 2014
“Active” data
• Constraint enforcement: When an operation
violates a constraint, abort the operation or try to
“fix” data
• Example: enforcing referential integrity constraints
• Generalize to arbitrary constraints?
• Data monitoring: When something happens to the
data, automatically execute some action
• Example: When price rises above $20 per share, sell
• Example: When enrollment is at the limit and more
students try to register, email the instructor
5
Triggers
• A trigger is an event-condition-action (ECA) rule
• When event occurs, test condition; if condition is
satisfied, execute action
• Example:
• Event: some user’s popularity is updated
• Condition: the user is a member of
“Jessica’s Circle,” and pop drops below 0.5
• Action: kick that user out of Jessica’s Circle
6
Trigger example
!"" #
$ %#& '$ '( % Event
$ ( !(" ( ) ') * %
$' + ') Condition
)+ ( , % - . /0
(& , % 1 !( ,* 2 1
$ '3 3 4
)+ 1 5 6 600
& 2 $ '3 3 4
)+ 1 5 % 1 (& 1 5 6 67
Action
7
Trigger options
• Possible events include:
• !(* '( table
•& 2 '( table
• %#& ['$ column] '( table
• Granularity—trigger can be activated:
• $' + ') modified
• $' +* 3 ( that performs modification
• Timing—action can be executed:
• $ or 8 $' the triggering event
• !(* & '$ the triggering event on views (more later)
8
Transition variables
• '2& '): the modified row before the triggering event
• ( ) '): the modified row after the triggering event
• '2& 82 : a hypothetical read-only table containing
all rows to be modified before the triggering event
• ( ) 82 : a hypothetical table containing all
modified rows after the triggering event
Not all of them make sense all the time, e.g.
• $ !(* statement-level triggers
• Can use only ( ) 82
• 8 $' & 2 row-level triggers
• Can use only '2& ')
• etc.
9
System issues
• Recursive firing of triggers
• Action of one trigger causes another trigger to fire
• Can get into an infinite loop
• Some DBMS leave it to programmers/database administrators
(e.g., PostgreSQL)
• Some restrict trigger actions (e.g., Oracle)
• Many set a maximum level of recursion (e.g., 16 in DB2)
• Interaction with constraints (very tricky to get right!)
• When do we check if a triggering event violates constraints?
• After a 8 $' trigger (so the trigger can fix a potential violation)
• Before an $ trigger
• $ triggers also see the effects of, say, cascaded deletes
caused by referential integrity constraint violations
(Based on DB2; other DBMS may implement a different policy)
13
Views
• A view is like a “virtual” table
• Defined by a query, which describes how to compute
the view contents on the fly
• DBMS stores the view definition query instead of view
contents
• Can be used in queries just like a regular table
14
Modifying views
• Does it even make sense, since views are virtual?
• It does make sense if we want users to really see
views as tables
• Goal: modify the base tables such that the
modification would appear to have been
accomplished on the view
18
A simple case
<! ) % # *
* 2 1; $ '3 % 7
translates to:
An impossible case
<! ) # % *
* 2 1; $ '3 %
)+ A5 . B7
!(* !( ' # %
< 2% *,CBD; . @07
• No matter what we do on User, the inserted row
will not be in PopularUser
20
%#& # * 5 . /7
• Set everybody’s pop to 0.5?
• Adjust everybody’s pop by the same amount?
• Just lower Jessica’s pop?
21
Indexes
• An index is an auxiliary persistent data structure
• Search tree (e.g., B+-tree), lookup table (e.g., hash table), etc.
More on indexes later in this course!
• An index on . can speed up accesses of the form
• . =
• . > (sometimes; depending on the index type)
• An index on . ,…, . can speed up
• . = ∧ ⋯∧ . =
• . ,…, . > ,…, (again depends)
Ordering or index columns is important—is an index
on . , . equivalent to one on . , . ?
How about an index on . plus another on . ?
24