clé primaire:
alter table nom_de_ta_table
add constraint nom_de_la_pk
primary key (liste_de_tes_champs_séparés_par_des_virgules);
clé étrangère:
alter table nom_table_détail
add constraint nom_de_la_fk
foreign key (liste_de_tes_champs_de_fk_séparés_par_des_virgules)
references nom_de_la_table_maître(liste_des_champs_de_la_pk_de_la_table_maître_séparés_par_des_virgules);
Alors, un exemple... Disons, que je veux lier des villes à leur pays. J'ai donc une table ville, et une table pays.
Disons que j'utilise des clés techniques (number incrémenté par trigger before insert) et des clés uniques. Pour la ville, la clé unique pourrait être code_postal et nom_ville, par exemple, pour pays, le nom du pays.
Donc, mes tables ressembleraient à cela:
ville(
id_ville number not null,
code_postal varchar2(15) not null, -- dans certains pys, il y a des lettres dans le cp
nom_ville varchar2(25) not null,
id_pays number not null);
pays(
id_pays number not null,
nom_pays varchar2(25) not null)
Ensuite, voilà ce qu'il faut faire:
1. créer tes PK:
alter table pays
add constraint pays_pk
primary key(id_pays);
alter table ville
add constraint ville_pk
primary key(id_ville);
2. créer les clés uniques:
alter table pays
add constraint pays_uk
unique (nom_pays);
alter table ville
add constraint ville_uk
unique(code_postal, nom_ville);
3. créer ta clé étrangère:
alter table ville
add constraint ville_pays_fk
foreign key (id_pays)
references pays(id_pays);
Comme je disais, il est entendu que id_pays et id_ville sont remplis par trigger avec des séquences.
Ce que je ferais aussi, c'est créer un index sur id_pays de la table ville.
Autre conseil: crée un tablespace rien que pour tes indexes. Tu peux alors l'utiliser directement lors de la création des indexes et clés uniques et primaires.
Exemple:
imaginons que ton tablespace d'indexes s'appelle tbs_indexes.
alter table ville
add constraint ville_pk
primary key (id_ville)
using index tablespace tbs_indexes;
Enfin, on peut s'étendre encore beaucoup sur le sujet, car tu peux, entre autres, également utiliser le partitionning, ce qui est intéressant sur des tables +/- statiques qui contiennent beaucoup de données.
Bon courage !