Question sur foreign key [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 27-12-2005 à 11:58:25
à vue de nez, t'as créé une 1,1 là, pas une 1,n
le mot clé pour une clé étrangère, c'est foreign key, pas primary key...
Marsh Posté le 27-12-2005 à 11:59:24
d'ailleurs, je comprends pas trop ta ligne, tu indiques pas sur quoi tu crée la contrainte en question.
Marsh Posté le 27-12-2005 à 12:34:02
Bon, j'ai du mal comprendre comment ça fonctionne.
D'aprés ce que on ma dit, si dans la contrainte foreign key je n'indique pas la colonne, elle s'applique directement sur la clé primaire de la table de référence.
Mais apparament je dois définir la colonne comme foreign key ?, ce que je ne vois pas dans mon cour.
Et je n'ai toujours pas compris si la colonne à laquel on applique l'altération doit être comme "unique".
Marsh Posté le 27-12-2005 à 12:42:16
normalement oui, mais indique quand même la clé, t'as aucune garantie que ce soit portable d'un sgbd à l'autre.
sinon, là je ne connais pas ta syntaxe, mais il semblerait que tu as créé une clé primaire sur "clone" qui prends les valeurs de la clé primaire de "toto", c'est donc une clé étrangère de type 1,1 (ou 0,1)
donc à priori, les valeurs dans "clone" seront unique et devront obligatoirement être présentes dans "toto". on utilise ce genre de relation lorsqu'on a une table qui contient des éléments facultatifs liés à une autre table qui contient la partie "globale" des enregistrements.
une vrai clé étrangère, c'est :
add contrant fk_toto on clone (nom) reference toto (nom);
ainsi, la colonne "nom" de "clone" devra contenir uniquement des valeurs présentes dans la colonne "nom" de "toto". par contre, tu peux avoir des doublons dans "clone".
un exemple simple :
create table commande
(
id as numeric not null primary key,
reference as varchar not null
);
create table cde_ligne
(
cde_id as numeric not null,
num_ligne as numeric not null,
pro_id as numeric not null,
quantite as numeric not null
);
add constraint pk_cde_ligne primary key on cde_ligne (cde_id, num_ligne);
add constraint fk_cde_id foreign key on cde_ligne (cde_id) reference commande (id);
Marsh Posté le 27-12-2005 à 12:42:41
à quelques fautes de syntaxe près, je ne suis pas pas habitué à écrire les scripts de création de base à la main
Marsh Posté le 27-12-2005 à 16:32:26
Le as est obligatoire pour définir le type ?
Citation : une vrai clé étrangère, c'est : |
Donc apparemment déjà je me trompe pas dans la signification de foreign key, mais dans ton exemple il manque pas le foreign key ?
Merci pour l'aide.
Marsh Posté le 27-12-2005 à 17:04:41
ouais, j'ai oublié le mot clé
le second exemple doit être bon par contre
Marsh Posté le 27-12-2005 à 17:05:21
sinon, oui, tu ne te trompes pas, sauf que ce que tu as posté là haut, c'est pas une FK
Marsh Posté le 27-12-2005 à 17:08:51
Wouala un exemple complet avec SQL Server 2000 :
La syntaxe peut varier légèrement.
Code :
|
PS: la foreign key, c'est le dernier block
Marsh Posté le 27-12-2005 à 23:46:00
Arjuna a écrit : sinon, oui, tu ne te trompes pas, sauf que ce que tu as posté là haut, c'est pas une FK |
Je viens de voir ma bête erreur. Noté primary au lieu de foreign.
Arjuna ==> comment noyer le facile dans du compliqué.
Marsh Posté le 28-12-2005 à 01:12:14
ceci dit, je te le dis depuis le début que t'utilises pas le bon mot clé
Marsh Posté le 29-12-2005 à 13:39:52
Mais oui mais bon, j'avais pas capté la mega bourde, trop grosse a assumer inconciemment.
Marsh Posté le 27-12-2005 à 11:52:27
Bonjours, j'aimerais avoir quelques explications sur la contrainte foreign key.
Mon inconnue est surtout de savoir si la colonne d'une table liée avec la foreign key à une colonne primaire d'une autre table peut avoir des redondances ?
Exp :
CREATE TABLE toto (
nom VARCHAR(10) NOT NULL PRIMARY KEY,
);
CREATE TABLE clone (
nom VARCHAR(10) NOT NULL,
);
ADD CONSTRAINT verification PRIMARY KEY (nom) REFERENCE toto
C'est bon comme base de donné ? Sachant que la table clone peut avoir plusieur fois le même nom et que la table toto ne peux paa avoir plusieurs fois le même nom, la contrainte vérifie que chaque clone est bien d'un toto.
Merci d'avance pour les réponses.
Siron
Message édité par Siron le 27-12-2005 à 11:52:42