Update Operations, Transactions, and Dealing with Constraint Violations
The operations of the relational model can be categorized into retrievals and updates. The relational algebra operations, which can be used to
specify retrievals, are discussed
in detail in Chapter 6. A relational algebra expression forms a new relation
after applying a number of algebraic operators to an existing set of
relations; its main use is for querying a database to retrieve information.
The user formulates a query that specifies the data of interest, and a new relation
is formed by applying relational operators to retrieve this data. That result relation becomes the answer to
(or result of) the user’s query. Chapter 6 also introduces the language called
relational calculus, which is used to define the new relation declaratively
without giving a specific order of operations.
In this section, we concentrate on the database modification or update
operations. There are three basic operations that can change the states of
relations in the data-base: Insert, Delete, and Update (or Modify). They insert
new data, delete old data, or modify existing data records. Insert is used to insert one or more
new tuples in a relation, Delete is
used to delete tuples, and Update
(or Modify) is used to change the
values of some attributes in existing tuples. Whenever these operations are
applied, the integrity constraints specified on the relational database schema
should not be violated. In this section we discuss the types of constraints
that may be violated by each of these operations and the types of actions that
may be taken if an operation causes a violation. We use the database shown in
Figure 3.6 for examples and discuss only key constraints, entity integrity
constraints, and the referential integrity constraints shown in Figure 3.7. For
each type of operation, we give some examples and discuss any constraints that
each operation may violate.
1. The Insert Operation
The Insert operation provides
a list of attribute values for a new tuple t
that is to be inserted into a relation R.
Insert can violate any of the four types of constraints dis-cussed in the
previous section. Domain constraints can be violated if an attribute value is
given that does not appear in the corresponding domain or is not of the
appropriate data type. Key constraints can be violated if a key value in the
new tuple t already exists in another
tuple in the relation r(R). Entity integrity can be violated if any part of the primary key of the
new tuple t is NULL. Referential integrity can be violated if the value of any foreign key
in t refers to a tuple that does not
exist in the referenced relation. Here are some examples to illustrate this
discussion.
Operation:
Insert <‘Cecilia’, ‘F’, ‘Kolonsky’, NULL,
‘1960-04-05’, ‘6357 Windy Lane, Katy, TX’, F, 28000, NULL, 4> into EMPLOYEE.
Result: This insertion violates the entity integrity constraint (NULL for the primary key Ssn), so it is rejected.
Operation:
Insert <‘Alicia’, ‘J’, ‘Zelaya’, ‘999887777’, ‘1960-04-05’, ‘6357
Windy Lane, Katy, TX’, F, 28000, ‘987654321’, 4> into EMPLOYEE.
Result: This insertion violates the key constraint because another tuple with the same Ssn value
already exists in the EMPLOYEE relation, and so it is rejected.
Operation:
Insert <‘Cecilia’, ‘F’, ‘Kolonsky’, ‘677678989’, ‘1960-04-05’, ‘6357
Windswept, Katy, TX’, F, 28000, ‘987654321’, 7> into EMPLOYEE.
Result: This insertion violates the referential integrity constraint specified
on Dno in EMPLOYEE because no corresponding referenced tuple exists in
DEPARTMENT with
Dnumber = 7.
Operation:
Insert <‘Cecilia’, ‘F’, ‘Kolonsky’, ‘677678989’, ‘1960-04-05’, ‘6357
Windy Lane, Katy, TX’, F, 28000, NULL, 4>
into EMPLOYEE.
Result: This insertion satisfies all constraints, so it is acceptable.
If an insertion violates one or more constraints, the default option is
to reject the insertion. In this case, it would be useful if the DBMS could
provide a reason to the user as to
why the insertion was rejected. Another option is to attempt to correct the reason for rejecting the insertion, but this is typically not
used for violations caused by Insert;
rather, it is used more often in correcting violations for Delete and Update.
In the first operation, the DBMS could ask the user to provide a value for Ssn, and could then accept the insertion if a valid Ssn value is provided. In opera-tion 3, the DBMS could either ask the user
to change the value of Dno to some valid value (or set it
to NULL), or it could ask the user to insert a DEPARTMENT tuple
with Dnumber = 7 and could accept the original insertion only after such an operation was accepted. Notice that in the latter case the insertion violation can
cascade back to the EMPLOYEE relation if the user attempts to insert a tuple for department 7 with a
value for Mgr_ssn that does not exist in the EMPLOYEE
relation.
2. The Delete Operation
The Delete operation can
violate only referential integrity. This occurs if the tuple being deleted is
referenced by foreign keys from other tuples in the database. To specify
deletion, a condition on the attributes of the relation selects the tuple (or
tuples) to be deleted. Here are some examples.
Operation:
Delete the WORKS_ON tuple with Essn = ‘999887777’ and Pno = 10. Result: This deletion
is acceptable and deletes exactly one tuple.
Operation:
Delete the EMPLOYEE tuple with Ssn = ‘999887777’.
Result: This deletion is not acceptable, because there are tuples in WORKS_ON that
refer to this tuple. Hence, if the tuple in EMPLOYEE is
deleted, referential integrity violations will result.
Operation:
Delete the EMPLOYEE tuple with Ssn = ‘333445555’.
Result: This deletion will result in even worse referential integrity
violations, because the tuple
involved is referenced by tuples from the EMPLOYEE,
DEPARTMENT,
WORKS_ON, and DEPENDENT relations.
Several options are available if a deletion operation causes a
violation. The first option, called restrict,
is to reject the deletion. The second
option, called cascade, is to attempt to cascade (or propagate) the
deletion by deleting tuples that reference the tuple that is being deleted.
For example, in operation 2, the DBMS could automati-cally delete the offending
tuples from WORKS_ON with Essn = ‘999887777’. A third option, called set null or set default,
is to modify the referencing attribute
values that cause the violation; each such value is either set to NULL or changed to reference another default valid tuple. Notice that if a
referencing attribute that causes a viola-tion is part of the primary key, it cannot
be set to NULL; otherwise, it would violate entity integrity.
Combinations of these three options are also possible. For example, to
avoid having operation 3 cause a violation, the DBMS may automatically delete
all tuples from WORKS_ON
and DEPENDENT with Essn = ‘333445555’. Tuples in EMPLOYEE with Super_ssn = ‘333445555’ and the tuple in DEPARTMENT with Mgr_ssn = ‘333445555’ can have their Super_ssn and Mgr_ssn values changed to other valid values or to NULL. Although it may make sense to delete automatically the WORKS_ON and
DEPENDENT tuples that refer to an EMPLOYEE tuple, it may not make sense to delete
other EMPLOYEE tuples or a DEPARTMENT tuple.
In general, when a referential integrity constraint is specified in the
DDL, the DBMS will allow the database designer to specify which of the options applies in case of a violation of the
constraint. We discuss how to specify these options in the SQL DDL in Chapter
4.
3. The Update Operation
The Update (or Modify) operation is used to change the
values of one or more attributes in a tuple (or tuples) of some relation R. It is necessary to specify a
condition on the attributes of the relation to select the tuple (or tuples) to
be modified. Here are some examples.
Operation:
Update the salary of the EMPLOYEE tuple
with Ssn = ‘999887777’ to 28000. Result:
Acceptable.
Operation:
Update the Dno of the EMPLOYEE tuple with Ssn = ‘999887777’ to 1. Result: Acceptable.
Operation:
Update the Dno of the EMPLOYEE tuple with Ssn = ‘999887777’ to 7. Result: Unacceptable, because it
violates referential integrity.
Operation:
Update the Ssn of the EMPLOYEE tuple with Ssn = ‘999887777’ to ‘987654321’.
Result: Unacceptable, because it violates primary key constraint by repeating a value that already exists as a
primary key in another tuple; it violates refer-ential integrity constraints
because there are other relations that refer to the existing value of Ssn.
Updating an attribute that is neither
part of a primary key nor of a foreign key usually causes no problems; the
DBMS need only check to confirm that the new value is of the correct data type
and domain. Modifying a primary key value is similar to delet-ing one tuple and
inserting another in its place because we use the primary key to identify
tuples. Hence, the issues discussed earlier in both Sections 3.3.1 (Insert) and
3.3.2 (Delete) come into play. If a foreign key attribute is modified, the DBMS
must make sure that the new value refers to an existing tuple in the referenced
relation (or is set to NULL). Similar options exist to deal
with referential integrity violations caused by Update as those options
discussed for the Delete operation. In fact, when a referential integrity
constraint is specified in the DDL, the DBMS will allow the user to choose
separate options to deal with a violation caused by Delete and a vio-lation
caused by Update (see Section 4.2).
4. The Transaction
Concept
A database application program running against a relational database
typically executes one or more transactions.
A transaction is an executing
program that includes some database operations, such as reading from the
database, or applying insertions, deletions, or updates to the database. At
the end of the transaction, it must leave the database in a valid or consistent
state that satisfies all the constraints spec-ified on the database schema. A
single transaction may involve any number of retrieval operations (to be
discussed as part of relational algebra and calculus in Chapter 6, and as a
part of the language SQL in Chapters 4 and 5), and any number of update
operations. These retrievals and updates will together form an atomic unit of
work against the database. For example, a transaction to apply a bank
with-drawal will typically read the user account record, check if there is a
sufficient bal-ance, and then update the record by the withdrawal amount.
A large number of commercial applications running against relational
databases in online transaction
processing (OLTP) systems are executing transactions at rates that reach several hundred per second.
Transaction processing concepts, concurrent execution of transactions, and
recovery from failures will be discussed in Chapters 21 to 23.
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.