Example create primary foreign key
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
- Example create table — création des tables DEPT/EMP utilisées ici
- Example create user tables — autre exemple de clé primaire/étrangère, sur un schéma différent
- Example create tablespace — création des tablespaces référencés (INDEXES, USERS)