Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2007, 17h15   #1
Membre éclairé
 
Inscription : décembre 2006
Messages : 480
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2006
Messages : 480
Points : 303
Points : 303
Envoyer un message via MSN à The eye
Par défaut Creation de tables avec plusieurs primary key

Bonjour,

puis-je avoir un exemple de requete de creation de tables ayant plusieurs champs en primary key?

Merci d'avance
The eye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2007, 17h37   #2
Expert Oracle confirmé

 
Homme Gilles ROUARD
Administrateur de base de données
Inscription : mars 2003
Messages : 220
Détails du profil
Informations personnelles :
Nom : Homme Gilles ROUARD
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Conseil

Informations forums :
Inscription : mars 2003
Messages : 220
Points : 322
Points : 322
Bonjour,

Comme une table ne peut avoir qu'un seule PK, l'idée est de poser des AK (Alternative Key), que l'on appelle aussi clés secondaires.

Pour se faire, le(s) champ(s) doi(ven)t être obligatoire(s), et on pose dessus une contrainte d'unicité, tel que le montre l'exemple suivant :

Code :
1
2
3
4
5
6
7
8
9
10
CREATE TABLE TEST2
(
  id1 NUMBER NOT NULL,
  id2 NUMBER NOT NULL,
  id3 NUMBER NOT NULL,
  CONSTRAINT TEST2_PK PRIMARY KEY (id1) USING INDEX TABLESPACE TS_DBA_ARCHI_SE,
  CONSTRAINT TEST2_AK_1 UNIQUE (id2) USING INDEX TABLESPACE TS_DBA_ARCHI_SE,
  CONSTRAINT TEST2_AK_2 UNIQUE (id3) USING INDEX TABLESPACE TS_DBA_ARCHI_SE  
)
TABLESPACE TS_DBA_ARCHI_BE ;
rouardg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2007, 17h43   #3
Membre éclairé
 
Inscription : décembre 2006
Messages : 480
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2006
Messages : 480
Points : 303
Points : 303
Envoyer un message via MSN à The eye
Désolé mais je suis nul en ORACLE...

TABLESPACE toto.... ça suffit pour créer un index?
The eye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2007, 19h37   #4
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Citation:
Envoyé par The eye Voir le message
Bonjour,

puis-je avoir un exemple de requete de creation de tables ayant plusieurs champs en primary key?

Merci d'avance
Si le besoin est de créer une clé primaire sur plusieurs colonnes alors un exemple
est :
Code :
1
2
3
4
5
6
7
8
create table t
(
  c1 number,
  c2 number,
  c3 number,
  constraint pk_t primary key (c1, c2)
);
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2007, 20h48   #5
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Citation:
Envoyé par The eye Voir le message
Désolé mais je suis nul en ORACLE...

TABLESPACE toto.... ça suffit pour créer un index?
En fait, il n'y a même pas besoin de spécifier un tablespace: par défaut les index associés aux contraintes sont créés dans le même tablespace que la table concernée:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
SQL> 
SQL> DROP TABLE TEST2;
 
TABLE supprimee.
 
SQL> 
SQL> CREATE TABLE TEST2
  2  (
  3    id1 NUMBER NOT NULL,
  4    id2 NUMBER NOT NULL,
  5    id3 NUMBER NOT NULL,
  6    CONSTRAINT TEST2_PK PRIMARY KEY (id1) ,
  7    CONSTRAINT TEST2_AK_1 UNIQUE (id2) ,
  8    CONSTRAINT TEST2_AK_2 UNIQUE (id3)
  9  );
 
TABLE creee.
 
SQL> 
SQL> SELECT segment_name, tablespace_name FROM dba_segments WHERE segment_name LIKE '%TEST2%';
 
SEGMENT_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
TEST2
USERS
 
TEST2_PK
USERS
 
TEST2_AK_1
USERS
 
 
SEGMENT_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
TEST2_AK_2
USERS
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 10h05   #6
Membre éclairé
 
Inscription : décembre 2006
Messages : 480
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2006
Messages : 480
Points : 303
Points : 303
Envoyer un message via MSN à The eye
Citation:
Envoyé par Michel SALAIS Voir le message
Si le besoin est de créer une clé primaire sur plusieurs colonnes alors un exemple
est :
Code :
1
2
3
4
5
6
7
8
create table t
(
  c1 number,
  c2 number,
  c3 number,
  constraint pk_t primary key (c1, c2)
);

Oui voilà !!

c'est exactement ça que je cherchais! je l'avais fait une fois et je ne retrouvais plus comment!

Merci beaucoup à tous!
The eye est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h57.


 
 
 
 
Partenaires

Hébergement Web