Example create primary foreign key

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Exemple DDL Oracle
Contexte Contrainte d'intégrité référentielle (clé primaire / clé étrangère)
Voir aussi Example create table · Example create user tables

Ce script illustre la mise en place d'une relation clé primaire / clé étrangère entre deux tables déjà existantes — ici les tables classiques DEPT (services) et EMP (employés) du schéma de démonstration Oracle. Il ajoute la clé primaire sur DEPT, la clé étrangère correspondante sur EMP, puis un index non unique sur la colonne de clé étrangère.

Créer un index sur toute colonne de clé étrangère est une bonne pratique Oracle : sans lui, une suppression ou une mise à jour de la ligne parente sur la table référencée verrouille l'intégralité de la table enfant (au lieu d'un simple verrou de ligne), ce qui peut provoquer des contentions importantes en environnement multi-utilisateurs.

Script

-- Ajout de la clé primaire sur DEPT, avec son index dédié dans le tablespace INDEXES
ALTER TABLE dept
  ADD CONSTRAINT dept_pk PRIMARY KEY (dept_id)
  USING INDEX
  TABLESPACE indexes
  STORAGE (
    INITIAL     64K
    NEXT        64K
    MINEXTENTS  1
    MAXEXTENTS  121
    PCTINCREASE 0
  )
/

-- Ajout de la clé étrangère sur EMP, référençant DEPT
ALTER TABLE emp
  ADD CONSTRAINT emp_fk1 FOREIGN KEY (dept_id)
  REFERENCES dept (dept_id)
/

-- Index non unique sur la colonne de clé étrangère : évite le verrouillage de table
-- complet lors des DML sur la table parente (voir remarque ci-dessus)
CREATE INDEX emp_fk_n1
  ON emp (dept_id)
  TABLESPACE indexes
  STORAGE (
    INITIAL     64K
    NEXT        64K
    MINEXTENTS  1
    MAXEXTENTS  121
    PCTINCREASE 0
    FREELISTS   3
  )
/

Voir aussi