According to its definition: A table is key-preserved if every key of the table can also be a key of the result of the join. So, a key-preserved table has its keys preserved through a join.
Let's illustrate this by an example.
create table a (a_id number primary key); create table b (b_id number primary key, a_id number, foreign key (a_id) REFERENCES a(a_id) on delete cascade); create or replace view c as ( select a.a_id, b.b_id from a,b where a.a_id = b.a_id ) insert into a values (1); insert into b values (2,1); insert into b values (3,1); select * from c;
The result is
A_ID B_ID --------- 1 2 1 3
Clearly A's primary key A_ID cannot be used as a primary key in the view, so table A is not a key preserved table. On the other hand, table B's primary key B_ID can be used as a primary key in the view, so table B is a key preserved table for this view C.
So what happens when you
delete from c;
is all the rows in table B are deleted.
Rules for updating a join view
http://docs.oracle.com/cd/E11882_01/server.112/e25494/views.htm#ADMIN11782
No comments:
Post a Comment