Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 13/09/2011, 16h20   #1
Membre émérite
 
Avatar de anisj1m
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2006
Messages : 1 055
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : Tunisie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2006
Messages : 1 055
Points : 929
Points : 929
Envoyer un message via Yahoo à anisj1m
Par défaut INSERT et SELECT avec clé étrangère

Bonjour,

J'ai deux tables société et employer, la table employer a une foreign key sur la table societe.

Pour la gestion des requêtes je veux savoir qu'elle est l'apport de la déclaration de la contrainte foreign key.

POUR INSERT : si je dois insérer une société, est ce que je dois insérer séparément ces employer dans des inserts sur la table employer aussi ?

Pour SELECT : est-ce que je dois faire une requête sur la table société et faire une autre requête sur la table employer pour avoir les employer ayant l'id de la société?

Si cela est vrai, alors où est l'apport de déclarer une contrainte foreign key?
__________________
Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.
anisj1m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 16h41   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par anisj1m Voir le message
j'ai deux tables société et employer,
En français, on écrit "employé" pour parler de quelqu'un qui est salarié d'une société, "employer" est un verbe !

Citation:
la table employer a une foreign key sur la table societe.

POUR INSERT : si je dois insérer une société, est ce que je dois insérer séparément ces employer des des inserts sur la table employer aussi ?
Pour que la clé étrangère de la table "employe" référençant la clé primaire de la table "societe" puisse être alimentée lors de l'insertion d'un employé, il faut que la société pré-existe dans la table "societe". Donc on insère d'abord la société puis ses employés.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- Insertion de la société
INSERT INTO societe (ste_nom)
VALUES ('Developpez.com');
 
-- Insertion d'un employé
INSERT INTO employe (emp_id_societe, emp_nom, emp_prenom)
VALUES (
  (SELECT ste_id
   FROM societe
   WHERE ste_nom = 'Developpez.com'
  ),
  'Dupont',
  'Jean'
)
Citation:
Pour SELECT : est ce que je dois faire une requête sur la table société et faire une autre requête sur la table employer pour avoir les employer ayant l'id du société?
Non puisque l'identifiant de la société est la clé étrangère dans la table "employe".
Si tu n'as que le nom de la société et pas son identifiant, tu fais une jointure :
Code :
1
2
3
4
SELECT e.emp_nom, e.emp_prenom
FROM employe e
INNER JOIN societe s ON s.ste_id = e.emp_id_societe
WHERE s.ste_nom = 'Developpez.com'
Citation:
si cela est vrai, alors ou est l'apport de déclaré une constraint foreign key?
Les clés étrangères garantissent la cohérence des données.
Impossible d'insérer l'identifiant de société 12 dans la table des employés si cet identifiant n'existe pas dans la table "societe", c'est à dire si la société n'existe pas.

Et pour l'interrogation des données, c'est sur les clés primaires et clés étrangères que se font les jointures.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil 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 00h22.


 
 
 
 
Partenaires

Hébergement Web