Вы находитесь на странице: 1из 54

Chapter 4

Constraints
Jason C. H. Chen, Ph.D.
Professor of MIS
School of Business
Gonzaga University
Spokane, WA 99258 USA
chen@jepson.gonzaga.edu
Dr. Chen, Oracle Database System (Oracle)

What will we study today?

Data

Dr. Chen, Oracle Database System (Oracle)

Integrity

How to
achieve it?

Referential
Integrity

Objectives
Explain the purpose of constraints in a table
Distinguish among PRIMARY KEY, FOREIGN
KEY, UNIQUE, CHECK, and NOT NULL
constraints and the appropriate use for each
constraint
Understand how constraints can be created when
creating a table or modifying an existing table
Distinguish between creating constraints at the
column level and table level

Dr. Chen, Oracle Database System (Oracle)

Objectives (continued)
Create PRIMARY KEY constraints for a single
column and a composite primary key (cpk)
Create a FOREIGN KEY constraint
Create a UNIQUE constraint
Create a CHECK constraint
Create a NOT NULL constraint using the ALTER
TABLEMODIFY command
Include constraints during table creation
Use DISABLE and ENABLE commands
Use the DROP command
Dr. Chen, Oracle Database System (Oracle)

Referential Integrity
Can we delete customers#5 if orders#1 is still in the
database? Why?
customers

pk
Customers#5

pk
orders#1

customer#
1001

1005
1020

orders
Order#
1000

1003
1012

LastName
MORALES

GIRARD
FALAH

Referred
NULL

NULL
NULL

Region
SE

NW
NE

fk
customer#
1005
1001
1007

ShipZip

ShipCost

98114

32328
49002

2.00

4.00
6.00

Can we create orders#1 if customers#5 is not


created? Why?

Dr. Chen, Oracle Database System (Oracle)

Refresh the Database


1. Create a new folder on c:\ as follows:
c:\oradata\chapter4
2. Go to Blackboard and download data
files from Oracle chapter4 and save under
c:\oradata\chapter4\
3. Run the following script file
Start c:\oradata\chapter4\JLDB_Build_4.sql

Dr. Chen, Oracle Database System (Oracle)

Type the following SQL commands


-- chapter 4, Figure 4-5; p. 104
INSERT INTO customers (customer#, lastname,
firstname, region)
VALUES (1020, 'PADDY', 'JACK', 'NE');
--extra INSERT command
INSERT INTO orders (order#, customer#, orderdate)
VALUES (1021, 1021, '06-APR-09');
-- DELETE command
DELETE FROM customers
WHERE customer# = 1005;
Dr. Chen, Oracle Database System (Oracle)

pk

Customers#5

Can we delete
customers#5 if
orders#1 is still in
the database?
Why?
Can we insert a
different customer
with Duplicate pk?

pk

fk

orders#1

Can we create
orders#1 if
customers#5 is
not created?
Why?

Dr. Chen, Oracle Database System (Oracle)

customers

pk

pk

customer#
1001

1005
1020

orders
Order#
1000

1003
1012

LastName
MORALES

GIRARD
FALAH

Referred
NULL
NULL
NULL

Region
SE

NW
NE

fk
customer#
1005
1001
1007

ShipZip

ShipCost

98114

32328
49002

2.00

4.00
6.00

RULES:
1. You cant add a record to TABLE- (or the table with fk, e.g., orders)
unless there is a corresponding record in TABLE-1 (or the table with pk).
2. You cant delete a record in TABLE-1 (or the table with pk, e.g.,
customers) if there is a record in TABLE- (or the table with fk).
Order of entering data into the database: customers orders
Order of deleting data from the database: orders customers
Dr. Chen, Oracle Database System (Oracle)

Review from Last Class


What are the three rules of naming table and field?
What are the three (total of four) required information
that should be described for each field?
1. Name
2. Type
3. Size
4. Constraint

L
Dr. Chen, Oracle Database System (Oracle)

10

What is a Constraint?
A rule used to enforce business rules, practices,
and policies
A rule used to ensure accuracy and integrity of
data
A mechanism used to protect
the relationship between data within an Oracle
table, or
the correspondence between data in two different
tables.
For example, the state entered must be one of the 50
states in the U.S.
Dr. Chen, Oracle Database System (Oracle)

11

Types of Constraints
Integrity constraints: define primary and foreign
keys
Value constraints: define specific data values or
data ranges that must be inserted into columns and
whether values must be unique or not NULL
Table constraint: restricts the data value with
respect to all other values in the table
Field (column) constraint: limits the value that
can be placed in a specific field, irrespective of
values that exist in other table records

Dr. Chen, Oracle Database System (Oracle)

12

I. Naming conventions for constraints


<tablename>_<fieldname>_<constraint id>
Where <constraint id> is:
pk
PRIMARY KEY
fk
REFERENCES <tablename> (pk)
ck
CHECK <condition to be checked>
(note that cc stands for CHECK CONDITION)
nn
NOT NULL
uk
UNIQUE
e.g.,
s_id NUMBER (6) CONSTRAINT student_s_id_pk PRIMARY KEY;
Dr. Chen, Oracle Database System (Oracle)

13

Integrity Constraints

Define primary key fields


Specify foreign keys and their
corresponding table and column
references

Specify composite keys


Dr. Chen, Oracle Database System (Oracle)

14

Creating a Table

CREATE TABLE tablename


(fieldname1 data_type (size)
[CONSTRAINT constraint_name constraint_type],

fieldname2 data_type (size),

[CONSTRAINT constraint_name constraint_type,]

);
Dr. Chen, Oracle Database System (Oracle)

15

Creating Constraints
When
During table creation
After table creation, by modifying the existing
table

How
Column level approach
Table level approach

Dr. Chen, Oracle Database System (Oracle)

16

Creating Constraints at the Column Level


If a constraint is being created at the column level, the
constraint applies to the column specified

Figure 4-1

Syntax for creating a column-level constraint

Creating Constraints at the Table Level


Approach can be used to create any constraint type after all
table field definitions are completed except NOT NULL
Required if constraint is based on multiple columns

Figure 4-2

Syntax for creating a table-level constraint

Dr. Chen, Oracle Database System (Oracle)

17

pk

CUSTOMERS

Customer# LastName

FirstName

Address

City

NUMBER(4) VARCHAR2(10)

VARCHAR2
(10)

VARCHAR2
(20)

VARCHAR2(12) VARCHAR
2(2)

pk

fk

State

Zip

Referred

Region

Email

VARCHAR2
(5)

NUMBER(
4)

CHAR(2)

VARCHAR2(
30)

ORDERS

Order#

Customer#

OrderDate

ShipDate

ShipStreet

ShipCity

ShipState

ShipZip

ShipCost

NUMBER(4)

NUMBER(4)

DATE

DATE

VARCHAR2(18)

VARCHAR2(15)

VARCHAR2(2)

NUMBER(4)

NUMBER(4,2)

CREATE TABLE Customers


(Customer# NUMBER(4),
LastName VARCHAR2(10) NOT NULL,
FirstName VARCHAR2(10) NOT NULL,
Address VARCHAR2(20),
City VARCHAR2(12),
State VARCHAR2(2),
Zip VARCHAR2(5),
Optional
Referred NUMBER(4),
(variable name)
Region CHAR(2),
Email VARCHAR2(30),
CONSTRAINT customers_customer#_pk PRIMARY KEY(customer#),
CONSTRAINT customers_region_ck
CHECK (region IN ('N', 'NW', 'NE', 'S', 'SE', 'SW', 'W', 'E')) );
Dr. Chen, Oracle Database System (Oracle)

18

pk

CUSTOMERS

Customer# LastName

FirstName

Address

City

NUMBER(4) VARCHAR2(10)

VARCHAR2
(10)

VARCHAR2
(20)

VARCHAR2(12) VARCHAR
2(2)

pk

fk

State

Zip

Referred

Region

Email

VARCHAR2
(5)

NUMBER(
4)

CHAR(2)

VARCHAR2(
30)

ORDERS

Order#

Customer#

OrderDate

ShipDate

ShipStreet

ShipCity

ShipState

ShipZip

ShipCost

NUMBER(4)

NUMBER(4)

DATE

DATE

VARCHAR2(18)

VARCHAR2(15)

VARCHAR2(2)

NUMBER(4)

NUMBER(4,2)

CREATE TABLE Orders


(Order# NUMBER(4),
Customer# NUMBER(4),
OrderDate DATE NOT NULL,
ShipDate DATE,
ShipStreet VARCHAR2(18),
ShipCity VARCHAR2(15),
Optional
ShipState VARCHAR2(2),
(variable name)
ShipZip VARCHAR2(5),
ShipCost NUMBER(4,2),
CONSTRAINT orders_order#_pk PRIMARY KEY(order#),
CONSTRAINT orders_customer#_fk FOREIGN KEY (customer#)
REFERENCES customers(customer#));
Dr. Chen, Oracle Database System (Oracle)

19

How to define composite key?

pk

ORDERS

Order#

Customer#

OrderDate

ShipDate

ShipStreet

ShipCity

ShipState

ShipZip

ShipCost

NUMBER(4)

NUMBER(4)

DATE

DATE

VARCHAR2(18)

VARCHAR2(15)

VARCHAR2(2)

NUMBER(4)

NUMBER(4,2)

pk

BOOKS

ISBN

Title

PubDate

PubID

Cost

Retail

Discount

Category

VARCHAR2(10)

VARCHAR2(30)

DATE

NUMBER(2)

NUMBER(5,2)

NUMBER(5,2)

NUMBER(4,2)

VARCHAR2(12)

fk
Order#
NUMBER(4)

cpk
Item#
NUMBER(2)

fk

ORDERITEMS

ISBN
VARCHAR2(10)

Quantity
NUMBER(3)

PaidEach
NUMBER(5,2)

CREATE TABLE ORDERITEMS


( Order# NUMBER(4),
Item# NUMBER(2),
Optional
ISBN VARCHAR2(10),
Quantity NUMBER(3) NOT NULL,
(variable name)
PaidEach NUMBER(5,2) NOT NULL,
CONSTRAINT orderitems_order#item#_pk PRIMARY KEY (order#,
item#),
CONSTRAINT orderitems_order#_fk FOREIGN KEY (order#)
REFERENCES orders (order#) ,
CONSTRAINT orderitems_isbn_fk FOREIGN KEY (isbn)
REFERENCES books (isbn) ,
CONSTRAINT oderitems_quantity_ck CHECK (quantity > 0) );
Dr. Chen, Oracle Database System (Oracle)

20

Your Job
You need to study and understand all
CREATE TABLE SQL commands in
JLDB_Build_4.sql

Dr. Chen, Oracle Database System (Oracle)

21

Enforcement of Constraints
All constraints are enforced at the table
level
If a data value violates a constraint, the
entire row is rejected

Dr. Chen, Oracle Database System (Oracle)

22

Constraint Types

Table 4-1

Constraint types

Dr. Chen, Oracle Database System (Oracle)

23

Your Turn

Dr. Chen, Oracle Database System (Oracle)

24

Primary Key Constraints


Syntax:
CONSTRAINT constraint_name PRIMARY KEY

Create a table with the following information:


1. Name of the table: students
2. Fields: s_id number with 6 digits and is a primary key, s_name
character with 30 chars, s_class with 2 chars, s_dob with DATE
SQL> CREATE TABLE students
2
(s_id NUMBER(6) CONSTRAINT students_s_id_pk PRIMARY
KEY,
3
s_name VARCHAR2(30),
4
s_class CHAR(2),
5
s_dob DATE);
Dr. Chen, Oracle Database System (Oracle)

25

Primary Key Constraints (cont.)


at the Column-Level
SQL> CREATE TABLE students
2
(s_id NUMBER(6) CONSTRAINT students_s_id_pk PRIMARY
KEY,
3
s_name VARCHAR2(30),
4
s_class CHAR(2),
5
s_dob DATE);

at the Table-Level

Practice:
Type in one of the command.

SQL> CREATE TABLE students


2
(s_id NUMBER(6),
3
s_name VARCHAR2(30),
4
s_class CHAR(2),
5
s_dob DATE,
6
CONSTRAINT students_s_id_pk PRIMARY KEY (s_id));
Dr. Chen, Oracle Database System (Oracle)

26

Adding Constraints to Existing Tables


Constraints are added to an existing table
with the ALTER TABLE command
Add a NOT NULL constraint using
MODIFY clause
All other constraints are added using ADD
clause

Dr. Chen, Oracle Database System (Oracle)

27

Using the PRIMARY KEY Constraint


Ensures that columns do not contain duplicate
or NULL values
Only one per table is allowed

Figure 4-3 Syntax of the ALTER TABLE command to add a PRIMARY KEY constraint

Dr. Chen, Oracle Database System (Oracle)

28

Constraint Checked with Data Input

Figure 4-5

Insert a row to test the constraint

Dr. Chen, Oracle Database System (Oracle)

29

PRIMARY KEY Constraint for Composite Key


List column names within parentheses
separated by commas

Figure 4-7
Dr. Chen, Oracle Database System (Oracle)

Adding a composite PRIMARY KEY constraint


30

Drop Contraint
ALTER TABLE orderitems
DROP CONSTRAINT
orderitems_order#item#_pk PRIMARY
KEY (order#, item#);

Dr. Chen, Oracle Database System (Oracle)

31

Multiple Constraints on a Single Column


A column may be included in multiple constraints
The order# column is included in a primary key and a
foreign key constraint

Optional
(variable name)

Figure 4-32 Assigning multiple constraints to a column


Dr. Chen, Oracle Database System (Oracle)

32

Using the FOREIGN KEY Constraint


Requires a value to exist in the referenced column
of another table
NULL values are allowed
Enforces referential integrity
Maps to the PRIMARY KEY in parent table
customers
pk

Customer#

LastName

orders
Order#

FirstName

Address

Region

fk
Customer# OrderDate

Dr. Chen, Oracle Database System (Oracle)

ShipZip

ShipCost
33

Using the FOREIGN KEY Constraint


You cannot delete a value in a parent table (pk)
referenced by a row in a child table (fk)

customers
pk

Customer#

LastName

orders
Order#

FirstName

Address

Region

fk
Customer# OrderDate

Dr. Chen, Oracle Database System (Oracle)

ShipZip

ShipCost
34

customers
pk Customer#

orders
Order#

LastName

FirstName

Address

Region

fk
Customer# OrderDate

ShipZip

ShipCost

RULES:
1. You cant add a record to TABLE- (or the table with fk,
e.g., orders) unless there is a corresponding record in
TABLE-1 (or the table with pk).
2. You cant delete a record in TABLE-1 (or the table with pk, e.g.,
customers) if there is a record in TABLE- (or the table with fk).
Order of entering data into the database: customers orders
Order of deleting data from the database: orders customers
Dr. Chen, Oracle Database System (Oracle)

35

FOREIGN KEY Constraint Example

Figure 4-9 Adding a FOREIGN KEY constraint


Dr. Chen, Oracle Database System (Oracle)

36

Deletion of Foreign Key Values


You cannot delete a value in a parent table
referenced by a row in a child table
Use ON DELETE CASCADE keywords
when creating FOREIGN KEY constraint
it automatically deletes a parent row when
the row in a child table is deleted

Dr. Chen, Oracle Database System (Oracle)

37

Using the UNIQUE Constraint


No duplicates are allowed in the referenced
column
NULL values are permitted

Figure 4-16 Adding a UNIQUE constraint


Dr. Chen, Oracle Database System (Oracle)

38

Using the CHECK Constraint


Updates and additions must meet specified
condition

Figure 4-19 Adding a CHECK constraint to the ORDERS table


Dr. Chen, Oracle Database System (Oracle)

39

Using the NOT NULL Constraint


The NOT NULL constraint is a special
CHECK constraint with IS NOT NULL
condition
Can only be created at column level
Included in output of DESCRIBE command
Can only be added to an existing table using
ALTER TABLEMODIFY command

Dr. Chen, Oracle Database System (Oracle)

40

NOT NULL Constraint Example

Figure 4-23 Adding a NOT NULL constraint


Dr. Chen, Oracle Database System (Oracle)

41

Practice
Lets try to create additional tables
JustLee Books would like to create some new
tables to store office equipment inventory data.
EQUIP
DEPT
DeptID
Dname
Fax

EquipID
Edesc
Purchdate
Rating
DeptID
EtypeID

ETYPES
EtypeID
Etypename

Figure 4-26 E-R model for equipment tables


Dr. Chen, Oracle Database System (Oracle)

42

Including Constraints during Table


EQUIP
pk DEPT

pk

DeptID
Dname
Fax

fk

EquipID
Edesc
Purchdate
Rating
DeptID
EtypeID fk

Each department name must be unique.


Each department must be assigned a name .

pk ETYPES
EtypeID
Etypename

unique
NOT NULL

Each equipment type name must be unique


unique
Each equipment type must be assigned a name. NOT NULL
Each equipment item must be assigned a valid department.
If an equipment item is assigned a type, it must be a valid type.
Valid rating values for equipment are A, B, and C. ck
Dr. Chen, Oracle Database System (Oracle)

43

DEPT table creation


-- chapter 4, Figure 4-27; p. 117
CREATE TABLE dept
(deptid NUMBER(2),
dname VARCHAR2(20) NOT NULL,
fax VARCHAR2(12),
CONSTRAINT dept_deptid_pk PRIMARY KEY (deptid),
CONSTRAINT dept_dname_uk UNIQUE (dname) );

Each department name must be unique.


unique
Each department must be assigned a name . NOT NULL

Dr. Chen, Oracle Database System (Oracle)

44

What is the main difference on the following


CREATE TABLE statements?
Constraints are defined at the table-level
-- chapter 4, Figure 4-27; p. 117
CREATE TABLE dept
(deptid NUMBER(2),
dname VARCHAR2(20) NOT NULL,
fax VARCHAR2(12),
CONSTRAINT dept_deptid_pk PRIMARY KEY (deptid),
CONSTRAINT dept_dname_uk UNIQUE (dname) );
Constraints are defined at the column-level
-- chapter 4, Figure 4-30; p. 119
CREATE TABLE dept
(deptid NUMBER(2) CONSTRAINT dept_deptid_pk PRIMARY KEY,
dname VARCHAR2(20) NOT NULL CONSTRAINT dept_dname_uk
UNIQUE,
fax VARCHAR2(12));
Dr. Chen, Oracle Database System (Oracle)

45

Each equipment type name must be unique


-- chapter 4, Figure 4-28; p. 118
Each equipment type must be assigned a name.
CREATE TABLE etypes
(etypeid NUMBER(2),
etypename VARCHAR2(20) NOT NULL,
CONSTRAINT etypes_etypeid_pk PRIMARY KEY (etypeid),
CONSTRAINT etypes_etypename_uk UNIQUE (etypename) );

-- chapter 4, Figure 4-29; p. 119


CREATE TABLE equip
Each equipment item must be assigned a valid department.
(equipid NUMBER(3),
If an equipment item is assigned a type, it must be a valid
type.
edesc VARCHAR2(30),
purchdate DATE,
Valid rating values for equipment are A, B, and C.
rating CHAR(1),
deptid NUMBER(2) NOT NULL,
etypeid NUMBER(2),
CONSTRAINT equip_equipid_pk PRIMARY KEY (equipid),
CONSTRAINT equip_deptid_fk FOREIGN KEY (deptid)
REFERENCES dept (dept_id),
CONSTRAINT equip_etypeid_fk FOREIGN KEY (etypeid)
REFERENCES etypes (etypeid),
CONSTRAINT equip_rating_ck CHECK (rating IN ('A', 'B', 'C', 'D')) );
Dr. Chen, Oracle Database System (Oracle)

46

Including Constraints during Table Creation Table Level

Include at end of column list

Figure 4-29 EQUIP table creation


Dr. Chen, Oracle Database System (Oracle)

47

Viewing Constraints USER_CONSTRAINTS


Display constraint listing for a specific table

Figure 4-33 SELECT statement to view data about existing constraints


Dr. Chen, Oracle Database System (Oracle)

48

Disabling Constraints
-- chapter 4, Figure 4-36; p. 123
ALTER TABLE equip
DISABLE CONSTRAINT equip_rating_ck;
ALTER TABLE equip
ENABLE CONSTRAINT equip_rating_ck;

Dr. Chen, Oracle Database System (Oracle)

49

Dropping Constraints
-- chapter 4, Figure 4-38; p. 124
ALTER TABLE equip
DROP CONSTRAINT equip_rating_ck;
-- chapter 4, Figure 4-39; p. 125
ALTER TABLE customers
DROP PRIMARY KEY;
-- chapter 4, Figure 4-40; p. 125
ALTER TABLE customers
DROP PRIMARY KEY CASCADE;

Dr. Chen, Oracle Database System (Oracle)

50

HW!!
Practice all the examples in the text.
A Script file is available on the Bb (file name:
Ch4Queries.sql)
After completing all examples, do the HW (hint: see
the tables below for the final schema and the sample
output on the Bb under Assignments
store_reps

pk

rep_id
NUMBER(5)

pk

last
VARCHAR2(15)

first
VARCHAR2(10)

cpk, fk

name
VARCHAR2(30)

rep_contracts

store_id
NUMBER(8)
Dr. Chen, Oracle Database System (Oracle)

name
VARCHAR2(5)

base_salary
NUMBER(7,2)

fk

book_stores

store_id
NUMBER(8)

comm
CHAR(1)

contact
VARCHAR2(30)

cpk

quarter
CHAR(3)

rep_id
NUMBER(5)

cpk, fk

rep_id
NUMBER(5)
51

Homework - Hands-On Assignments


Email me with one attachment
(Oracle_ch4_Spool_Lname_Fname.) to:
chen@jepson.gonzaga.edu
with subject title of
bmis441_Oracle_ch4
Read and Practice all examples on Chapters 4
1. Run the script files (in the folder \oradata\chapter4\):
JLDB_Build_4.sql
2. Read Oracle assignment and create a script file
Oracle_ch4_Lname_Fname.sql for questions (#1 to
#8; p.133) on Hands-on Assignments. .
3. Execute and test one problem at a time and make sure
they are all running successfully.
4. When you done, spool the script files (see next slide
for spooling instructions) and email the file
(Oracle_ch4_Spool_Lname_Fname.txt) to me by the
midnight before the next class.

Dr. Chen, Oracle Database System (Oracle)

52

How to Spool your Script and Output Files


After you tested the script file of Oracle_ch4_Lname_Fname.sql successfully,
follow the instructions below to spool both script and output files:
Step 0. Run the following script file from SQL*Plus (since you have created
JLDB tables)
Start c:\oradata\chapter4\JLDB_Build_4.sql

1. type the following on SQL>


Spool c:\oradata\Oracle_ch4_Spool_Lname_Fname.txt (make sure your name is entered)

2. open Oracle_ch4_Lname_Fname.sql that you already tested


3. copy and paste all the SQL commands (including all comments) to the
SQL*PLUS
4. type Spool Off on the SQL>
The output should contain your personal information, all SQL commands and
their solution on the .txt file and saved in C: drive (oradata\ folder)
Email me with the spooled file (.txt) with attachment to:
chen@jepson.gonzaga.edu
with subject title of
bmis441_Oracle_ch4
Dr. Chen, Oracle Database System (Oracle)

53

End of chapter 4

Dr. Chen, Oracle Database System (Oracle)

54

Вам также может понравиться