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

SQL> ------------------------------------------SELF REALTIONS,BINARY RELATION,CH

K CONSTRAINTS----------------------------
SQL> -------------------SELF RELATION CONTAINS TWO ISSUES WHICH ARE MORE IMPORTA
NT HERE----------------
SQL> --
SQL>
SQL>
SQL>
SQL>
SQL> CREATE TABLE SAMPLESELF01
2 (
3 SAMPID NUMBER(2)
4 CONSTRAINT SAMPLESELF01_SAMPID_PK PRIMARY KEY,
5 SAMPNAME VARCHAR2(15),
6 SAMPDATE DATE,
7 SAMPIDFK NUMBER(2)
8 CONSTRAINT SAMPPLESELF01_SAMPIDFK
9 REFERENCES SAMPLESELF01(SAMPID)--SelfRelation
10 );
Table created.
SQL> INSERT INTO SAMPLESELF01
2 VALUES()
3
SQL> ED
Wrote file afiedt.buf
1* ---HOW DID YOU INSERT YOUR FIRST VALUE INTO THE FORIEGN KEY COLUMN?----
SQL> ED
Wrote file afiedt.buf
1 ---Once you say you know self relation the first question he will ask you i
s
2* ---How did you insert your first record into the table containing a self re
lation is the first question he will ask you----
SQL> ----Why because a foreign key always says that every value in the foreign k
ey column should definetly be a value that is pre registered in the primary key
column.
SQL>
SQL>
SQL>
SQL> INSERT INTO SAMPLESELF01
2 VALUES(1,'SAMPLE01',SYSDATE,10);
INSERT INTO SAMPLESELF01
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.SAMPPLESELF01_SAMPIDFK) violated - parent
key not found

SQL> --Now the rule of foreign key says that every value in the foreign key shou
ld be a value registerd in the primary key.
SQL> --But the above table is having self relationship,so if it is some other ta
ble not a problem because we will insert the data into that table,
SQL> --then we will insert the data into this table.because this is a self relat
ion table,How the first record went into the table is important.
SQL> ---if one record goes into the column then next ones are very easy,why beca
use we are having one parenatal record atleast.but how about the first record in
sertion is the question.
SQL>
SQL>
SQL> ED
Wrote file afiedt.buf
1 INSERT INTO SAMPLESELF01
2* VALUES(1,'SAMPLE01',SYSDATE,NULL)--We will always insert the first record
into the self relation table with a foreign key column as null.
SQL>
SQL> --so here one other question can come to you is:what is the only value that
is accepted into the foreign key column which may not be registered OR which ca
nnot be registered in the primary key?
SQL> ====>ANS--NULLS
SQL> ---NULL is never accepted by PK
SQL> ---NULL Can be accepted by FK.So foreign key default state is optionality,i
f we want we can make it mandatory.
SQL>
SQL> INSERT INTO SAMPLESELF01
2 VALUES(1,'SAMPLE01',SYSDATE,NULL);
1 row created.
SQL> INSERT INTO SAMPLESELFO1
2 VALUES(2,'SAMPLE01',SYSDATE,1);
INSERT INTO SAMPLESELFO1
*
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> ED
Wrote file afiedt.buf
1 INSERT INTO SAMPLESELF01
2* VALUES(2,'SAMPLE01',SYSDATE,1)
SQL> /
1 row created.
SQL> --so here the VALUE-(1) in the foreign key column is the child record to th
e parental value that is already registered into the table.
SQL> ---in this way one parent can have multiple number of childs.
---FOREIGN KEY CAN HAVE REFERENCE WITH THE CONSTRUCT OF A PARENT MULTIPLE TIMES
.
---SO THE DEFAULT CARDINALITY OF THE FOREIGN KEY IS (MANY)
--SO ONE CHILD ALWAYS SHOULD REFERENCE TO ONLY ONE PARENT.ONE PARENT SHOULD ALWA
YS HAVE REFERENCE TO ONLY ONE PARTICULAR CHILD,
---ONE PARENT CAN HAVE MANY CHILDS BUT IT WILL HAVE REFERENCE WITH ONLY ONE PART
ICULAR CHILD.IF THAT IS RULE THEN DECLARE A FOREIGN KEY HERE AND
---PUT A UNIQUE SEPARETELY AND MOVING ONE-MANY TO ONE-ONE HERE.
----------PARENTAL STATUS SHOULD BE IN A SEQUENTIAL ORDER IS NOT A RULE--------
-------
--IN THE PRIMARY KEY COLUMN OF ABOVE TABLE THE 2,3 CAN REMAIN CHILDS AND NEXT V
ALUE 4 CAN BECOME A PARENT.---

SQL> SELECT * FROM SAMPLESELF01;


SAMPID SAMPNAME SAMPDATE SAMPIDFK
---------- --------------- --------- ----------
1 SAMPLE01 07-NOV-16
2 SAMPLE02 07-NOV-16 1
3 SAMPLE02 07-NOV-16 1
SQL> UPDATE SAMPLESELF01 SET SAMPNAME='SAMPLE03' WHERE SAMPID=3;
1 row updated.
SQL> INSERT INTO SAMPLESELF01 VALUES(1,'SAMPLE04',SYSDATE,3);
INSERT INTO SAMPLESELF01 VALUES(1,'SAMPLE04',SYSDATE,3)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.SAMPLESELF01_SAMPID_PK) violated

SQL> ED
Wrote file afiedt.buf
1* INSERT INTO SAMPLESELF01 VALUES(4,'SAMPLE04',SYSDATE,3)
SQL> /
1 row created.
SQL> SELECT * FROM SAMPLESELF01;
SAMPID SAMPNAME SAMPDATE SAMPIDFK
---------- --------------- --------- ----------
1 SAMPLE01 07-NOV-16
2 SAMPLE02 07-NOV-16 1
3 SAMPLE03 07-NOV-16 1
4 SAMPLE04 07-NOV-16 3
SQL> -----------NOT NULL CONSTRAINT ON FOREIGN KEY COLUMN OR CHILD IS HAVING NOT
NULL CONSTRAINT THEN HOW YOU WILL INSERT THE FIRST RECORD-------
SQL>
SQL> CREATE TABLE SAMPLESELF02
2 (
3 SAMPID NUMBER(4)
4 CONSTRAINT SAMPLESELF02_SAMPID_PK PRIMARY KEY,
5 SAMPNAME VARCHAR2(15),
6 SAMPDATE DATE,
7 SAMPIDFK NUMBER(2),
8 ED
9
SQL> ED
Wrote file afiedt.buf
1 CREATE TABLE SAMPLESELF02
2 (
3 SAMPID NUMBER(4)
4 CONSTRAINT SAMPLESELF02_SAMPID_PK PRIMARY KEY,
5 SAMPNAME VARCHAR2(15),
6 SAMPDATE DATE,
7 SAMPIDFK NUMBER(2)
8 CONSTRAINT SAMPLESELF02_SAMPIDFK_NN NOT NULL---Not null constraint
9 CONSTRAINT SAMPLESELF02_SAMPIDFK
10 REFERENCES SAMPLESELF02(SAMPID)---Self relation.
11* )
SQL> /
Table created.
SQL> ------In the above situation we will insert the first value in the primary
key as the first value in the child column-----
SQL> -----relating your first record to itself----
SQL>
SQL> INSERT INTO SAMPLESELF02 VALUES(1,'SAMPLE01',SYSDATE,1);
1 row created.
SQL> ED
Wrote file afiedt.buf
1* INSERT INTO SAMPLESELF02 VALUES(2,'SAMPLE01',SYSDATE,1)
SQL> /
1 row created.
SQL>

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