Previous Topic: Global Deadlock DetectionNext Topic: Sample Non-SQL Database Definition


Sample SQL Database Definition

Sample Database Definition

   CREATE SCHEMA DEMOEMPL;
   SET SESSION CURRENT SCHEMA DEMOEMPL;

  CREATE TABLE          BENEFITS
      (FISCAL_YEAR          UNSIGNED NUMERIC(4,0)                NOT NULL,
       EMP_ID               UNSIGNED NUMERIC(4,0)                NOT NULL,
       VAC_ACCRUED          UNSIGNED DECIMAL(6,2)   NOT NULL WITH DEFAULT,
       VAC_TAKEN            UNSIGNED DECIMAL(6,2)   NOT NULL WITH DEFAULT,
       SICK_ACCRUED         UNSIGNED DECIMAL(6,2)   NOT NULL WITH DEFAULT,
       SICK_TAKEN           UNSIGNED DECIMAL(6,2)   NOT NULL WITH DEFAULT,
       STOCK_PERCENT        UNSIGNED DECIMAL(6,3)   NOT NULL WITH DEFAULT,
       STOCK_AMOUNT         UNSIGNED DECIMAL(10,2)  NOT NULL WITH DEFAULT,
       LAST_REVIEW_DATE     DATE                                         ,
       REVIEW_PERCENT       UNSIGNED DECIMAL(6,3)                        ,
       PROMO_DATE           DATE                                         ,
       RETIRE_PLAN          CHAR(6)                                      ,
       RETIRE_PERCENT       UNSIGNED DECIMAL(6,3)                        ,
       BONUS_AMOUNT         UNSIGNED DECIMAL(10,2)                       ,
       COMP_ACCRUED         UNSIGNED DECIMAL(6,2)   NOT NULL WITH DEFAULT,
       COMP_TAKEN           UNSIGNED DECIMAL(6,2)   NOT NULL WITH DEFAULT,
       EDUC_LEVEL           CHAR(06)                                     ,
       UNION_ID             CHAR(10)                                     ,
       UNION_DUES           UNSIGNED DECIMAL(10,2)                       ,
   CHECK ( (RETIRE_PLAN IN ('STOCK', 'BONDS', '401K') ) AND
           (EDUC_LEVEL IN ('GED', 'HSDIP', 'JRCOLL', 'COLL',
            'MAS', 'PHD') ) ) )
   IN SQLDEMO.EMPLAREA;

  CREATE TABLE          COVERAGE
      (PLAN_CODE         CHAR(03)                                NOT NULL,
       EMP_ID            UNSIGNED NUMERIC(4,0)                   NOT NULL,
       SELECTION_DATE    DATE                       NOT NULL WITH DEFAULT,
       TERMINATION_DATE  DATE                                            ,
       NUM_DEPENDENTS    UNSIGNED NUMERIC(2,0)      NOT NULL WITH DEFAULT)
   IN SQLDEMO.EMPLAREA;
  CREATE TABLE          DEPARTMENT
      (DEPT_ID           UNSIGNED NUMERIC(4,0)                   NOT NULL,
       DEPT_HEAD_ID      UNSIGNED NUMERIC(4,0)                           ,
       DIV_CODE          CHAR(03)                                NOT NULL,
       DEPT_NAME         CHAR(40)                                NOT NULL)
  IN SQLDEMO.INFOAREA;

  CREATE TABLE          DIVISION
      (DIV_CODE          CHAR(03)                                NOT NULL,
       DIV_HEAD_ID       UNSIGNED NUMERIC(4,0)                           ,
       DIV_NAME          CHAR(40)                                NOT NULL)
   IN SQLDEMO.INFOAREA;

  CREATE TABLE          EMPLOYEE
      (EMP_ID               UNSIGNED NUMERIC(4,0)                NOT NULL,
       MANAGER_ID           UNSIGNED NUMERIC(4,0)                        ,
       EMP_FNAME            CHAR(20)                             NOT NULL,
       EMP_LNAME            CHAR(20)                             NOT NULL,
       DEPT_ID              UNSIGNED NUMERIC(4,0)                NOT NULL,
       STREET               CHAR(40)                             NOT NULL,
       CITY                 CHAR(20)                             NOT NULL,
       STATE                CHAR(02)                             NOT NULL,
       ZIP_CODE             CHAR(09)                             NOT NULL,
       PHONE                CHAR(10)                                     ,
       STATUS               CHAR                                 NOT NULL,
       SS_NUMBER            UNSIGNED NUMERIC(9,0)                NOT NULL,
       START_DATE           DATE                                 NOT NULL,
       TERMINATION_DATE     DATE                                         ,
       BIRTH_DATE           DATE                                         ,
  CHECK ( ( EMP_ID <= 8999 ) AND (STATUS IN ('A', 'S', 'L', 'T') ) ) )
  IN SQLDEMO.EMPLAREA;


CREATE TABLE          INSURANCE_PLAN
     (PLAN_CODE            CHAR(03)                              NOT NULL,
      COMP_NAME            CHAR(40)                              NOT NULL,
      STREET               CHAR(40)                              NOT NULL,
      CITY                 CHAR(20)                              NOT NULL,
      STATE                CHAR(02)                              NOT NULL,
      ZIP_CODE             CHAR(09)                              NOT NULL,
      PHONE                CHAR(10)                              NOT NULL,
      GROUP_NUMBER         UNSIGNED NUMERIC(4,0)                 NOT NULL,
      DEDUCT               UNSIGNED DECIMAL(9,2)                         ,
      MAX_LIFE_BENEFIT     UNSIGNED DECIMAL(9,2)                         ,
      FAMILY_COST          UNSIGNED DECIMAL(9,2)                         ,
      DEP_COST             UNSIGNED DECIMAL(9,2)                         ,
      EFF_DATE             DATE                                  NOT NULL)
  IN SQLDEMO.INFOAREA;
  CREATE TABLE          JOB
      (JOB_ID               UNSIGNED NUMERIC(4,0)                NOT NULL,
       JOB_TITLE            CHAR(20)                             NOT NULL,
       MIN_RATE             UNSIGNED DECIMAL(10,2)                       ,
       MAX_RATE             UNSIGNED DECIMAL(10,2)                       ,
       SALARY_IND           CHAR(01)                                     ,
       NUM_OF_POSITIONS     UNSIGNED DECIMAL(4,0)                        ,
       EFF_DATE             DATE                                         ,
       JOB_DESC_LINE_1      VARCHAR(60)                                  ,
       JOB_DESC_LINE_2      VARCHAR(60)                                  ,
   CHECK ( SALARY_IND IN ('S', 'H') ) )
   IN SQLDEMO.INFOAREA;

  CREATE TABLE          POSITION
      (EMP_ID               UNSIGNED NUMERIC(4,0)                NOT NULL,
       JOB_ID               UNSIGNED NUMERIC(4,0)                NOT NULL,
       START_DATE           DATE                                 NOT NULL,
       FINISH_DATE          DATE                                         ,
       HOURLY_RATE        UNSIGNED   DECIMAL(7,2)                        ,
       SALARY_AMOUNT      UNSIGNED   DECIMAL(10,2)                       ,
       BONUS_PERCENT      UNSIGNED   DECIMAL(7,3)                        ,
       COMM_PERCENT       UNSIGNED   DECIMAL(7,3)                        ,
       OVERTIME_RATE      UNSIGNED   DECIMAL(5,2)                        ,
   CHECK ( (HOURLY_RATE IS NOT NULL AND SALARY_AMOUNT IS NULL)
           OR (HOURLY_RATE IS NULL AND SALARY_AMOUNT IS NOT NULL) ) )
   IN SQLDEMO.EMPLAREA;

   CREATE SCHEMA  DEMOPROJ;

   SET SESSION CURRENT SCHEMA DEMOPROJ;

  CREATE TABLE           ASSIGNMENT
      (EMP_ID             UNSIGNED NUMERIC(4,0)                  NOT NULL,
       PROJ_ID            CHAR(10)                               NOT NULL,
       START_DATE         DATE                                   NOT NULL,
       END_DATE           DATE                                           )
   IN PROJSEG.PROJAREA;
 CREATE TABLE           CONSULTANT
     (CON_ID               UNSIGNED NUMERIC(4,0)                 NOT NULL,
      CON_FNAME            CHAR(20)                              NOT NULL,
      CON_LNAME            CHAR(20)                              NOT NULL,
      MANAGER_ID           UNSIGNED NUMERIC(4,0)                 NOT NULL,
      DEPT_ID              UNSIGNED NUMERIC(4,0)                 NOT NULL,
      PROJ_ID              CHAR(10)                                      ,
      STREET               CHAR(40)                                      ,
      CITY                 CHAR(20)                              NOT NULL,
      STATE                CHAR(02)                              NOT NULL,
      ZIP_CODE             CHAR(09)                              NOT NULL,
      PHONE                CHAR(10)                                      ,
      BIRTH_DATE           DATE                                          ,
      START_DATE           DATE                                  NOT NULL,
      SS_NUMBER            UNSIGNED NUMERIC(9,0)                 NOT NULL,
      RATE                 UNSIGNED DECIMAL(7,2)                         ,
   CHECK ( (CON_ID >= 9000 AND CON_ID <= 9999) ) )
   IN PROJSEG.PROJAREA;

  CREATE TABLE           EXPERTISE
      (EMP_ID               UNSIGNED NUMERIC(4,0)                NOT NULL,
       SKILL_ID             UNSIGNED NUMERIC(4,0)                NOT NULL,
       SKILL_LEVEL          CHAR(02)                                     ,
       EXP_DATE             DATE                                         )
   IN PROJSEG.PROJAREA;

  CREATE TABLE           PROJECT
      (PROJ_ID              CHAR(10)                             NOT NULL,
       PROJ_LEADER_ID       UNSIGNED NUMERIC(4,0)                        ,
       EST_START_DATE       DATE                                         ,
       EST_END_DATE         DATE                                         ,
       ACT_START_DATE       DATE                                         ,
       ACT_END_DATE         DATE                                         ,
       EST_MAN_HOURS        UNSIGNED DECIMAL(7,2)                        ,
       ACT_MAN_HOURS        UNSIGNED DECIMAL(7,2)                        ,
       PROJ_DESC            VARCHAR(60)                          NOT NULL)
   IN PROJSEG.PROJAREA;

  CREATE TABLE           SKILL
      (SKILL_ID             UNSIGNED NUMERIC(4,0)                NOT NULL,
       SKILL_NAME           CHAR(20)                             NOT NULL,
       SKILL_DESC           VARCHAR(60)                                  )
   IN PROJSEG.PROJAREA;


  CREATE UNIQUE CALC KEY ON DEMOEMPL.DEPARTMENT(DEPT_ID);

  CREATE UNIQUE CALC KEY ON DEMOEMPL.DIVISION(DIV_CODE);

  CREATE UNIQUE CALC KEY ON DEMOEMPL.EMPLOYEE(EMP_ID);

  CREATE UNIQUE CALC KEY ON DEMOEMPL.INSURANCE_PLAN(PLAN_CODE);

  CREATE UNIQUE CALC KEY ON DEMOEMPL.JOB(JOB_ID);

  CREATE UNIQUE CALC KEY ON DEMOPROJ.CONSULTANT(CON_ID);

  CREATE UNIQUE CALC KEY ON DEMOPROJ.PROJECT(PROJ_ID);

  CREATE UNIQUE CALC KEY ON DEMOPROJ.SKILL(SKILL_ID);


  CREATE UNIQUE INDEX AS_EMPROJ_NDX ON
         DEMOPROJ.ASSIGNMENT(EMP_ID,PROJ_ID);

  CREATE UNIQUE INDEX EX_EMPSKILL_NDX ON
         DEMOPROJ.EXPERTISE(EMP_ID, SKILL_ID);

  CREATE INDEX CO_CODE_NDX ON DEMOEMPL.COVERAGE(PLAN_CODE)
         IN SQLDEMO.INDXAREA;

  CREATE INDEX DE_CODE_NDX ON DEMOEMPL.DEPARTMENT(DIV_CODE);

  CREATE INDEX DI_HEAD_NDX ON DEMOEMPL.DIVISION(DIV_HEAD_ID);

  CREATE INDEX DE_HEAD_NDX ON DEMOEMPL.DEPARTMENT(DEPT_HEAD_ID);

  CREATE INDEX EM_MANAGER_NDX ON DEMOEMPL.EMPLOYEE(MANAGER_ID)
         IN SQLDEMO.INDXAREA;
  CREATE INDEX EM_NAME_NDX ON DEMOEMPL.EMPLOYEE(EMP_LNAME, EMP_FNAME)
         IN SQLDEMO.INDXAREA;

  CREATE INDEX EM_DEPT_NDX ON DEMOEMPL.EMPLOYEE(DEPT_ID)
         IN SQLDEMO.INDXAREA;

  CREATE INDEX IN_NAME_NDX ON DEMOEMPL.INSURANCE_PLAN(COMP_NAME)
          COMPRESSED;

  CREATE INDEX PO_JOB_NDX ON DEMOEMPL.POSITION(JOB_ID)
         IN SQLDEMO.INDXAREA;

 CREATE INDEX CN_NAME_NDX ON DEMOPROJ.CONSULTANT(CON_LNAME,CON_FNAME);



   CREATE CONSTRAINT EMP_BENEFITS
       DEMOEMPL.BENEFITS  (EMP_ID)  REFERENCES
       DEMOEMPL.EMPLOYEE  (EMP_ID)
               LINKED CLUSTERED
               ORDER BY (FISCAL_YEAR DESC);

   CREATE CONSTRAINT INSPLAN_COVERAGE
       DEMOEMPL.COVERAGE        (PLAN_CODE)  REFERENCES
       DEMOEMPL.INSURANCE_PLAN  (PLAN_CODE)
               UNLINKED;

   CREATE CONSTRAINT EMP_COVERAGE
       DEMOEMPL.COVERAGE  (EMP_ID) REFERENCES
       DEMOEMPL.EMPLOYEE  (EMP_ID)
               LINKED CLUSTERED
               ORDER BY ( PLAN_CODE) UNIQUE;

   CREATE CONSTRAINT DIVISION_DEPT
       DEMOEMPL.DEPARTMENT  (DIV_CODE)  REFERENCES
       DEMOEMPL.DIVISION    (DIV_CODE)
               UNLINKED;
   CREATE CONSTRAINT EMP_DEPT_HEAD
       DEMOEMPL.DEPARTMENT  (DEPT_HEAD_ID)  REFERENCES
       DEMOEMPL.EMPLOYEE    (EMP_ID)
               UNLINKED;

   CREATE CONSTRAINT EMP_DIV_HEAD
       DEMOEMPL.DIVISION  (DIV_HEAD_ID)  REFERENCES
       DEMOEMPL.EMPLOYEE  (EMP_ID)
               UNLINKED;

   CREATE CONSTRAINT DEPT_EMPLOYEE
       DEMOEMPL.EMPLOYEE   (DEPT_ID)  REFERENCES
       DEMOEMPL.DEPARTMENT (DEPT_ID)
               UNLINKED;

   CREATE CONSTRAINT MANAGER_EMP
       DEMOEMPL.EMPLOYEE  (MANAGER_ID)  REFERENCES
       DEMOEMPL.EMPLOYEE  (EMP_ID)
               UNLINKED;

   CREATE CONSTRAINT SKILL_EXPERTISE
       DEMOPROJ.EXPERTISE  (SKILL_ID)  REFERENCES
       DEMOPROJ.SKILL      (SKILL_ID)
               LINKED CLUSTERED;
   CREATE CONSTRAINT EMP_POSITION
       DEMOEMPL.POSITION  (EMP_ID)  REFERENCES
       DEMOEMPL.EMPLOYEE  (EMP_ID)
               LINKED CLUSTERED
               ORDER BY (JOB_ID) UNIQUE;

   CREATE CONSTRAINT JOB_POSITION
       DEMOEMPL.POSITION  (JOB_ID)  REFERENCES
       DEMOEMPL.JOB       (JOB_ID)
               UNLINKED;

   CREATE CONSTRAINT PROJECT_ASSIGN
       DEMOPROJ.ASSIGNMENT  (PROJ_ID)  REFERENCES
       DEMOPROJ.PROJECT   (PROJ_ID)
               LINKED CLUSTERED;

   CREATE CONSTRAINT PROJECT_CONSULT
       DEMOPROJ.CONSULTANT  (PROJ_ID)  REFERENCES
       DEMOPROJ.PROJECT     (PROJ_ID)
               LINKED INDEX ORDER BY (PROJ_ID);


   ALTER TABLE DEMOEMPL.COVERAGE
       DROP DEFAULT INDEX;

   ALTER TABLE DEMOEMPL.DEPARTMENT
       DROP DEFAULT INDEX;

   ALTER TABLE DEMOEMPL.DIVISION
       DROP DEFAULT INDEX;

   ALTER TABLE DEMOEMPL.EMPLOYEE
       DROP DEFAULT INDEX;
   ALTER TABLE DEMOEMPL.INSURANCE_PLAN
       DROP DEFAULT INDEX;

   ALTER TABLE DEMOEMPL.POSITION
       DROP DEFAULT INDEX;

   ALTER TABLE DEMOPROJ.ASSIGNMENT
       DROP DEFAULT INDEX;

   ALTER TABLE DEMOPROJ.CONSULTANT
       DROP DEFAULT INDEX;

   ALTER TABLE DEMOPROJ.EXPERTISE
       DROP DEFAULT INDEX;



   CREATE VIEW DEMOEMPL.EMP_VACATION
          (EMP_ID, DEPT_ID, VAC_TIME)
          AS SELECT E.EMP_ID, DEPT_ID, SUM(VAC_ACCRUED) - SUM(VAC_TAKEN)
             FROM DEMOEMPL.EMPLOYEE E, DEMOEMPL.BENEFITS B
             WHERE E.EMP_ID = B.EMP_ID
             GROUP BY DEPT_ID, E.EMP_ID;

   CREATE VIEW DEMOEMPL.OPEN_POSITIONS
          (JOB_ID, JOB_NAME, OPEN_POS)
          AS SELECT J.JOB_ID, J.JOB_TITLE,
                    (J.NUM_OF_POSITIONS - COUNT(P.JOB_ID))
             FROM DEMOEMPL.JOB J, DEMOEMPL.POSITION P
             WHERE P.FINISH_DATE IS NULL AND P.JOB_ID = J.JOB_ID
                   PRESERVE DEMOEMPL.JOB
             GROUP BY J.JOB_ID, J.JOB_TITLE, J.NUM_OF_POSITIONS
             HAVING (J.NUM_OF_POSITIONS - COUNT(P.JOB_ID)) > 0;

   CREATE VIEW DEMOEMPL.EMP_HOME_INFO
          AS SELECT EMP_ID, EMP_LNAME, EMP_FNAME, STREET, CITY, STATE,
                    ZIP_CODE, PHONE
             FROM DEMOEMPL.EMPLOYEE;

   CREATE VIEW DEMOEMPL.EMP_WORK_INFO
          AS SELECT EMP_ID, MANAGER_ID, START_DATE, TERMINATION_DATE
             FROM DEMOEMPL.EMPLOYEE;