maketabs.htm; updated 12/17/2001

Creating Oracle Tables
(Includes Referential Integrity Constraints
for Implementing Relationships)

GENERAL.

SIMPLE MODEL.
Types of Data Integrity. IMPLEMENTATION GUIDELINES.


CREATING THE COURSE AND STUDENT MASTER TABLES AND INSERTING DATA.

CREATE TABLE Course (
    CourseNumber CHAR(8)
        CONSTRAINT PK_Course
            PRIMARY KEY

            USING INDEX TABLESPACE Data_Index
            PCTFREE 5,
    Description  VARCHAR(50)
        CONSTRAINT NN_Cou_Desc NOT NULL,
    Hours        Number(2)
        CONSTRAINT NN_Cou_Hours NOT NULL)
PCTFREE 5 PCTUSED 60
STORAGE (  INITIAL 48K
           NEXT 48K
           PCTINCREASE 1
           MINEXTENTS 1
           MAXEXTENTS 300 )
TABLESPACE Data;
 
 
CREATE TABLE Student (
    SSN          CHAR(9)
        CONSTRAINT PK_Student
           PRIMARY KEY

           USING INDEX TABLESPACE Data_Index
           PCTFREE 5,
    StudentName  VARCHAR(50)
        CONSTRAINT NN_Stu_Name NOT NULL,
    DateBirth    Date        Default NULL)
PCTFREE 10 PCTUSED 40
STORAGE (  INITIAL 48K
           NEXT 48K
           PCTINCREASE 1
           MINEXTENTS 1
           MAXEXTENTS 300 )
TABLESPACE Data;

  INSERT INTO Course VALUES ('CMIS108','Intro to Computers',3);

INSERT INTO Course VALUES ('CMIS142',
'VB Programming',3);

INSERT INTO Student VALUES ('111111111',
'Charley Daniels','01-MAR-40' );

INSERT INTO Student VALUES ('222222222',
'Faith Hill','05-FEB-60');
 

SELECT Table_Name, Tablespace_Name
    FROM Tabs
    WHERE Table_Name = 'STUDENT' Or Table_Name = 'COURSE';

SELECT INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS
    FROM Dba_Indexes
    WHERE Table_Name = 'STUDENT' Or Table_Name = 'COURSE';
 

CREATING THE SECTION MASTER TABLE.

CREATE TABLE Section (
    SectionNumber NUMBER(6),
    Term          CHAR(2),
    Year          Number(4),
    Location      VARCHAR(20)
        CONSTRAINT NN_Location NOT NULL,
    CourseNumber  CHAR(8)
        CONSTRAINT NN_Sect_CourseNumber NOT NULL
        CONSTRAINT FK_CouSec
            REFERENCES Course(CourseNumber),
    CONSTRAINT PK_Section
        PRIMARY KEY (SectionNumber, Term, Year)

        USING INDEX TABLESPACE Data_Index
        PCTFREE 5
    )
PCTFREE 20 PCTUSED 65
STORAGE ( INITIAL 48K
          NEXT 48K
          PCTINCREASE 1
          MINEXTENTS 1
          MAXEXTENTS 300 )
TABLESPACE Data;
SELECT Table_Name, Tablespace_Name
    FROM Tabs
    WHERE Table_Name = 'SECTION';

SELECT INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS
    FROM Dba_Indexes
    WHERE Table_Name = 'SECTION';
 

TESTING REFERENTIAL INTEGRITY AND UNIQUENESS CONSTRAINTS FOR THE SECTION TABLE.

INSERT INTO Section
    VALUES (111111,'FA',2000,'FH-3208','CMIS108'); INSERT INTO Section
    VALUES (222222,'FA',2000,NULL,'CMIS108');

ERROR at line 1:
ORA-01400: cannot insert NULL into ("DBOCK"."SECTION"."LOCATION")
 

INSERT INTO Section
    VALUES (333333,'FA',2000,'FH-3103','CMIS342');

ERROR at line 1:
ORA-02291: integrity constraint (DBOCK.FK_COUSEC) violated - parent key not found
 

INSERT INTO Section
    VALUES (111111,'FA',2000,'FH-3208','CMIS142');

ERROR at line 1:
ORA-00001: unique constraint (DBOCK.PK_SECTION) violated
 

CREATING THE ENROLL TABLE AND TESTING CONSTRAINTS.

CREATE TABLE Enroll (
    SSN           CHAR(9),
    SectionNumber NUMBER(6),
    Term          CHAR(2),
    Year          NUMBER(4),
    Grade         CHAR(2)
        CONSTRAINT CK_Grade_Check

        CHECK (Grade IN ('A','B','C','D','E','WP')),
    CONSTRAINT FK_Enr_Stu_SSN FOREIGN KEY (SSN)
        REFERENCES Student
        ON DELETE CASCADE,
    CONSTRAINT FK_Enr_SectionNumber
        FOREIGN KEY (SectionNumber,Term,Year)
        REFERENCES Section
        ON DELETE CASCADE,
    CONSTRAINT PK_Enroll
        PRIMARY KEY (SSN, SectionNumber, Term, Year)

        USING INDEX TABLESPACE Data_Index
        PCTFREE 5
    )
PCTFREE 30 PCTUSED 65
STORAGE (  INITIAL 48K
           NEXT 48K
           PCTINCREASE 0
           MINEXTENTS 1
           MAXEXTENTS 300 )
TABLESPACE Data;

  INSERT INTO Enroll
    VALUES ('111111111','111111','FA',2000,NULL);
  INSERT INTO Enroll
    VALUES ('999999999','111111','FA',2000,'A');

ERROR at line 1:
ORA-02291: integrity constraint (DBOCK.FK_ENR_STU_SSN) violated - parent key not found

INSERT INTO Enroll
    VALUES ('222222222','999999','FA',2000,'A');

ERROR at line 1:
ORA-02291: integrity constraint (DBOCK.FK_ENR_SECTIONNUMBER) violated - parent key not found

INSERT INTO Enroll
    VALUES ('222222222','111111','FA',2000,'G');

ERROR at line 1:
ORA-02290: check constraint (DBOCK.CK_GRADE_CHECK) violated
 
 

VERIFY THE EXISTENCE OF THE TABLES, INDEXES, and CONSTRAINTS

SELECT Table_name, Tablespace_name FROM user_tables;

SELECT index_name, Table_name, Tablespace_name
    FROM user_indexes;

SELECT constraint_name, constraint_type, Table_Name, Search_Condition
    FROM user_constraints;
 

UNARY RELATIONSHIPS.

CREATE TABLE Faculty (
    Fac_SSN             CHAR(9),
    FirstName           VARCHAR(25)
        CONSTRAINT NN_FirstName NOT NULL,
    LastName            VARCHAR(25)
        CONSTRAINT NN_LastName NOT NULL,
    Fac_Dept            VARCHAR(12),
    Fac_Supervisor_SSN  CHAR(9),
    CONSTRAINT PK_Faculty
        PRIMARY KEY (Fac_SSN)
        USING INDEX TABLESPACE DATA_Index
        PCTFREE 5,
    CONSTRAINT FK_Fac_Supervisor
        FOREIGN KEY (Fac_Supervisor_SSN)
        REFERENCES Faculty
        ON DELETE SET NULL
    )
PCTFREE 15 PCTUSED 65
STORAGE (  INITIAL 48K
           NEXT 48K
           PCTINCREASE 0
           MINEXTENTS 1
           MAXEXTENTS 300 )

TABLESPACE Data; INSERT INTO Faculty
    VALUES ('123456789','Douglas','Bock','CMIS',NULL);
INSERT INTO Faculty
    VALUES ('234567890','Susan','Yager','CMIS','123456789');
INSERT INTO Faculty
    VALUES ('345678901','Anne','Powell','CMIS','123456789');
  SQL> column firstname format a10;
SQL> column lastname format a10;
SQL> select * from faculty;

FAC_SSN   FIRSTNAME  LASTNAME   FAC_DEPT     FAC_SUPER
--------- ---------- ---------- ------------ ---------
123456789 Douglas    Bock       CMIS
234567890 Susan      Yager      CMIS         123456789
345678901 Anne       Powell     CMIS         123456789

INSERT INTO Faculty
    VALUES ('456789012','Joe','Prof','CMIS','444444444');

ERROR at line 1:
ORA-02291: integrity constraint (DBOCK.FK_FAC_SUPERVISOR) violated - parent key not found

DELETE FROM faculty WHERE fac_ssn='123456789';

1 row deleted.

SELECT * FROM faculty;

FAC_SSN   FIRSTNAME  LASTNAME   FAC_DEPT     FAC_SUPER
--------- ---------- ---------- ------------ ---------
234567890 Susan      Yager      CMIS
345678901 Anne       Powell     CMIS
 

LAST COMMENTS.



END OF NOTES