0% found this document useful (0 votes)
53 views27 pages

SQL: Triggers, Views, Indexes: Introduction To Databases Compsci 316 Fall 2014

Triggers allow automatic actions to occur when data is modified. Row-level triggers fire for each modified row, while statement-level triggers fire once per SQL statement. Views provide a virtual table defined by a query. Indexes are auxiliary data structures that can speed up data retrieval based on column values.

Uploaded by

Com Comcom
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
53 views27 pages

SQL: Triggers, Views, Indexes: Introduction To Databases Compsci 316 Fall 2014

Triggers allow automatic actions to occur when data is modified. Row-level triggers fire for each modified row, while statement-level triggers fire once per SQL statement. Views provide a virtual table defined by a query. Indexes are auxiliary data structures that can speed up data retrieval based on column values.

Uploaded by

Com Comcom
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 27

SQL:

Triggers, Views, Indexes


Introduction to Databases
CompSci 316 Fall 2014
2

Announcements (Tue., Sep. 23)


• Homework #1 sample solution posted on Sakai
• Homework #2 due next Thursday
• Midterm on the following Thursday
• Project mixer this Thursday
• See my email about format
• Email me your “elevator pitch” by Wednesday midnight
• Project Milestone #1 due Thursday, Oct. 16
• See project description on what to accomplish by then
3

Announcements (Tue., Sep. 30)


• Homework #2 due date extended to Oct. 7
• Midterm in class next Thursday (Oct. 9)
• Open-book, open-notes
• Same format as sample midterm (from last year)
• Already posted on Sakai
• Solution to be posted later this week
4

“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

Statement-level trigger example


!"" #
$ %#& '$ '( %
$ ( !(" ( ) 82 * %
$' + * 3 (
& 2 $ '3 3 4
)+ 1 5 6 6
(& 1 !( ,* 2 1
$ '3 %
)+ - . /07
10

8 $' trigger example


• Never allow age to decrease
!"" ( $ '9:
8 $' %#& '$ '( %
$ ( !(" '2& ') * ;
( ) ') *
$' + ')
)+ ( , - 0
* 5 7
8 $' triggers are often used to
“condition” data
Another option is to raise an error in the trigger
body to abort the transaction that caused the
trigger to fire
11

Statement- vs. row-level triggers


Why are both needed?
• Certain triggers are only possible at statement level
• If the number of users inserted by this statement
exceeds 100 and their average age is below 13, then …
• Simple row-level triggers are easier to implement
• Statement-level triggers require significant amount of
state to be maintained in '2& 82 and ( ) 82
• However, a row-level trigger gets fired for each row, so
complex row-level triggers may be inefficient for
statements that modify many rows
12

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

Creating and dropping views


• Example: members of Jessica’s Circle
• <! ) *
* 2 = $ '3 %
)+ 1 !( ,* 2 1 $ '3 3 4
)+ 1 5 6 607
• Tables used in defining a view are called “base tables”
• User and Member above
• To drop a view
• & '# <! ) 7
15

Using views in queries


• Example: find the average popularity of members in
Jessica’s Circle
•* 2 <", 0 $ '3 7
• To process the query, replace the reference to the view
by its definition
•* 2 <", 0
$ '3 ,* 2 = $ '3 %
)+ 1 !(
,* 2 1 $ '3 3 4
)+ 1 5 6 600
* 7
16

Why use views?


• To hide data from users
• To hide complexity from users
• Logical data independence
• If applications deal with views, we can change the
underlying schema without affecting applications
• Recall physical data independence: change the physical
organization of data without affecting applications
• To provide a uniform interface for different
implementations or sources
Real database applications use tons of views
17

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

& 2 $ '3 % # )+ 1 5 >?@7

translates to:

& 2 $ '3 % )+ 1 5 >?@7


19

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

A case with too many possibilities


<! ) # , 0 *
* 2 <", 0 $ '3 % 7
• Note that you can rename columns in view definition

%#& # * 5 . /7
• Set everybody’s pop to 0.5?
• Adjust everybody’s pop by the same amount?
• Just lower Jessica’s pop?
21

SQL92 updateable views


• More or less just single-table selection queries
• No join
• No aggregation
• No subqueries

• Arguably somewhat restrictive


• Still might get it wrong in some cases
• See the slide titled “An impossible case”
• Adding )! + + E '# !'( to the end of the view
definition will make DBMS reject such modifications
22

!(* & '$ triggers for views


!"" 1 #
!(* & '$ %#& '( #
$ ( !(" '2& ') * ;
( ) ') *
$' + ')
%#& %
* 5 F , G 07
• What does this trigger do?
23

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

Examples of using indexes


•* 2 = $ '3 % )+ 5 68 67
• Without an index on User.name: must scan the entire
table if we store User as a flat file of unordered rows
• With index: go “directly” to rows with 568 6
•* 2 = $ '3 % ; 3 4
)+ % 1 5 3 4 1
(& 3 4 1 5 6 67
• With an index on Member.gid or (gid, uid): find relevant
Member rows directly
• With an index on User.uid: for each relevant Member
row, directly look up User rows with matching uid
• Without it: for each Member row, scan the entire User table for
matching uid
• Sorting could help
25

Creating and dropping indexes in SQL


H%(!I% J !(& K '(
, ;L; 07
• With %(!I% , the DBMS will also enforce that
,…, is a key of

& '# !(& K 7

• Typically, the DBMS will automatically create


indexes for # !3 : E : and %(!I% constraint
declarations
26

Choosing indexes to create


More indexes = better performance?
• Indexes take space
• Indexes need to be maintained when data is
updated
• Indexes have one more level of indirection

Optimal index selection depends on both query


and update workload and the size of tables
• Automatic index selection is now featured in some
commercial DBMS
27

SQL features covered so far


• Query
• Modification
• Constraints
• Triggers
• Views
• Indexes

You might also like