Database System Concepts, 5th Ed
Database System Concepts, 5th Ed
Database System Concepts, 5th Edition, Oct 5. 2006 4.2 ©Silberschatz, Korth and Sudarshan
1
date: Dates, containing a (4 digit) year, month and date
Example: date ʻ2005-7-27ʼ
time: Time of day, in hours, minutes and seconds.
Example: time ʻ09:00:30ʼ time ʻ09:00:30.75ʼ
timestamp: date plus time of day
Example: timestamp ʻ2005-7-27 09:00:30.75ʼ
interval: period of time
Example: interval ʻ1ʼ day
Subtracting a date/time/timestamp value from another gives an
interval value
Interval values can be added to date/time/timestamp values
Database System Concepts, 5th Edition, Oct 5. 2006 4.3 ©Silberschatz, Korth and Sudarshan
Types and domains are similar. Domains can have constraints, such
as not null, specified on them.
Database System Concepts, 5th Edition, Oct 5. 2006 4.4 ©Silberschatz, Korth and Sudarshan
2
Domain constraints are the most elementary form of integrity
constraint. They test values inserted in the database, and test queries
to ensure that the comparisons make sense.
New domains can be created from existing data types
Example:
create domain Dollars numeric(12, 2)
create domain Pounds numeric(12,2)
We cannot assign or compare a value of type Dollars to a value of
type Pounds.
However, we can convert type as below
(cast r.A as Pounds)
(Should also multiply by the dollar-to-pound conversion-rate)
Database System Concepts, 5th Edition, Oct 5. 2006 4.5 ©Silberschatz, Korth and Sudarshan
not null
primary key
unique
check (P ), where P is a predicate
Database System Concepts, 5th Edition, Oct 5. 2006 4.6 ©Silberschatz, Korth and Sudarshan
3
Declare branch_name for branch is not null
branch_name char(15) not null
Database System Concepts, 5th Edition, Oct 5. 2006 4.7 ©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Edition, Oct 5. 2006 4.8 ©Silberschatz, Korth and Sudarshan
4
check (P ), where P is a predicate
Database System Concepts, 5th Edition, Oct 5. 2006 4.9 ©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Edition, Oct 5. 2006 4.10 ©Silberschatz, Korth and Sudarshan
5
Ensures that a value that appears in one relation for a given set of
attributes also appears for a certain set of attributes in another relation.
Example: If “Perryridge” is a branch name appearing in one of the
tuples in the account relation, then there exists a tuple in the branch
relation for branch “Perryridge”.
Primary and candidate keys and foreign keys can be specified as part of
the SQL create table statement:
The primary key clause lists attributes that comprise the primary key.
The unique key clause lists attributes that comprise a candidate key.
The foreign key clause lists the attributes that comprise the foreign
key and the name of the relation referenced by the foreign key. By
default, a foreign key references the primary key attributes of the
referenced table.
Database System Concepts, 5th Edition, Oct 5. 2006 4.11 ©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Edition, Oct 5. 2006 4.12 ©Silberschatz, Korth and Sudarshan
6
create table account
(account_number
char(10),
branch_name
char(15),
balance
integer,
primary key (account_number),
foreign key (branch_name) references branch )
create table depositor
(customer_name
char(20),
account_number
char(10),
primary key (customer_name, account_number),
foreign key (account_number ) references account,
foreign key (customer_name ) references customer )
Database System Concepts, 5th Edition, Oct 5. 2006 4.13 ©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Edition, Oct 5. 2006 4.14 ©Silberschatz, Korth and Sudarshan
7
Every loan has at least one borrower who maintains an account with a
minimum balance or $1000.00
create assertion balance_constraint check
(not exists (
select *
from loan
where not exists (
select *
from borrower, depositor, account
where loan.loan_number = borrower.loan_number
and borrower.customer_name = depositor.customer_name
and depositor.account_number = account.account_number
and account.balance >= 1000)))
Database System Concepts, 5th Edition, Oct 5. 2006 4.15 ©Silberschatz, Korth and Sudarshan
The sum of all loan amounts for each branch must be less than the
sum of all account balances at the branch.
create assertion sum_constraint check
(not exists (select *
from branch
where (select sum(amount )
from loan
where loan.branch_name =
branch.branch_name )
>= (select sum (amount )
from account
where loan.branch_name =
branch.branch_name )))
Database System Concepts, 5th Edition, Oct 5. 2006 4.16 ©Silberschatz, Korth and Sudarshan
8
???
For that you need triggers …
Database System Concepts, 5th Edition, Oct 5. 2006 4.17 ©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Edition, Oct 5. 2006 4.18 ©Silberschatz, Korth and Sudarshan
9
The grant statement is used to confer authorization
grant <privilege list>
on <relation name or view name> to <user list>
<user list> is:
a user-id
public, which allows all valid users the privilege granted
A role (more on this in Chapter 8)
Granting a privilege on a view does not imply granting any privileges
on the underlying relations.
The grantor of the privilege must already hold the privilege on the
specified item (or be the database administrator).
Database System Concepts, 5th Edition, Oct 5. 2006 4.19 ©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Edition, Oct 5. 2006 4.20 ©Silberschatz, Korth and Sudarshan
10
The SQL standard defines embeddings of SQL in a variety of
programming languages such as C, Java, and Cobol.
A language to which SQL queries are embedded is referred to as a host
language, and the SQL structures permitted in the host language
comprise embedded SQL.
The basic form of these languages follows that of the System R
embedding of SQL into PL/I.
EXEC SQL statement is used to identify embedded SQL request to the
preprocessor
EXEC SQL <embedded SQL statement > END_EXEC
Note: this varies by language (for example, the Java embedding uses
# SQL { …. }; )
Database System Concepts, 5th Edition, Oct 5. 2006 4.21 ©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Edition, Oct 5. 2006 4.22 ©Silberschatz, Korth and Sudarshan
11
The open statement causes the query to be evaluated
EXEC SQL open c END_EXEC
The fetch statement causes the values of one tuple in the query result
to be placed on host language variables.
EXEC SQL fetch c into :cn, :cc END_EXEC
Repeated calls to fetch get successive tuples in the query result
A variable called SQLSTATE in the SQL communication area
(SQLCA) gets set to ʻ02000ʼ to indicate no more data is available
The close statement causes the database system to delete the
temporary relation that holds the result of the query.
EXEC SQL close c END_EXEC
Note: above details vary with language. For example, the Java
embedding defines Java iterators to step through result tuples.
Database System Concepts, 5th Edition, Oct 5. 2006 4.23 ©Silberschatz, Korth and Sudarshan
Can update tuples fetched by cursor by declaring that the cursor is for
update
declare c cursor for
select *
from account
where branch_name = ʻPerryridgeʼ
for update
To update tuple at the current location of cursor c
update account
set balance = balance + 100
where current of c
Database System Concepts, 5th Edition, Oct 5. 2006 4.24 ©Silberschatz, Korth and Sudarshan
12
Allows programs to construct and submit SQL queries at run time.
Example of the use of dynamic SQL from within a C program.
Database System Concepts, 5th Edition, Oct 5. 2006 4.25 ©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Edition, Oct 5. 2006 4.26 ©Silberschatz, Korth and Sudarshan
13
JDBC is a Java API for communicating with database systems
supporting SQL
JDBC supports a variety of features for querying and updating data, and
for retrieving query results
JDBC also supports metadata retrieval, such as querying about
relations present in the database and the names and types of relation
attributes
Model for communicating with the database:
Open a connection
Create a “statement” object
Execute queries using the Statement object to send queries and
fetch results
Exception mechanism to handle errors
Database System Concepts, 5th Edition, Oct 5. 2006 4.27 ©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Edition, Oct 5. 2006 4.28 ©Silberschatz, Korth and Sudarshan
14
Define a function that, given the name of a customer, returns the
count of the number of accounts owned by the customer.
create function account_count (customer_name varchar(20))
returns integer
begin
declare a_count integer;
select count (* ) into a_count
from depositor
where depositor.customer_name = customer_name
return a_count;
end
Find the name and address of each customer that has more than one
account.
select customer_name, customer_street, customer_city
from customer
where account_count (customer_name ) > 1
Database System Concepts, 5th Edition, Oct 5. 2006 4.29 ©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Edition, Oct 5. 2006 4.30 ©Silberschatz, Korth and Sudarshan
15
Benefits of external language functions/procedures:
more efficient for many operations, and more expressive power
Drawbacks
Code to implement function may need to be loaded into database
system and executed in the database systemʼs address space
risk of accidental corruption of database structures
security risk, allowing users access to unauthorized data
There are alternatives, which give good security at the cost of
potentially worse performance
Direct execution in the database systemʼs space is used when
efficiency is more important than security
Database System Concepts, 5th Edition, Oct 5. 2006 4.31 ©Silberschatz, Korth and Sudarshan
16