Débutant en Bases de données

Résolu/Fermé
nico - 2 janv. 2010 à 04:41
X-Fan Messages postés 805 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 6 janvier 2010 - 4 janv. 2010 à 01:41
Bonjour, et bonne année 2010


je débute en base de données relationnelles, et j'ai du mal à comprendre ce que c'est une contrainte d'intégrité référentielle. un exemple serai vraiment bien. merci pour vos réponses. bonne journée.

3 réponses

X-Fan Messages postés 805 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 6 janvier 2010 19
2 janv. 2010 à 06:44
Bonne année à toi aussi.
C'est agaçant car c'est très facile mais je sais pas comment m'y prendre pour te l'expliquer. ^^

Quand tu as 2 tables, tu peux les lier l'une à l'autre par un champ et, si on peut dire, l'une des deux tables sert à l'autre.

Euh... par exemple...

Une table "Fleur" qui contient les champs suivants:
-No (clé primaire de la table)
-NomFleur
-NoCouleur (référence au champ No de la table Couleur)

Une table "Couleur" qui contient les champs suivants:
-No (clé primaire de la table)
-Nom

On va dire que mes tables contiennent les données suivantes:
Fleur (No => NomFleur => NoCouleur):
- 1 => rose => 1
- 2 => tulipe => 2
- 3 => Pervenche => 1
- 4 => Violette => 3

Couleur (No => Nom)
- 1 => rose
- 2 => rouge
- 3 => violet
- 4 => bleu

Donc le champ NoCouleur de Fleur est lié par référence à No de la table Couleur. Plutôt que de récrire à chaque fois les couleurs pour chaque fleur, je me réfère à des couleurs de l'autre table. Bien entendu, dans l'exemple actuel ça parait idiot de faire deux tables mais pour des systèmes très complexe, c'est extrêmement utile.
Donc, pour continuer, mon champ NoCouleur de la table Fleur va récupérer la fameuse couleur en se servant de la table Couleur. Petite requête du genre:
SELECT f.NomFleur, c.Nom FROM Fleur f INNER JOIN Couleur c ON f.NoCouleur = c.No
Affichera:
rose => rose
tulipe => rouge
pervenche => rose
violette => violet

Ce qui veut dire que je ne pourrais pas détruire une ligne de la table Couleur si elle est référencée au moins une fois dans la table Fleur c'est ça l'intégrité référentielle. Ca sert à empêcher qu'on ne perde des données nécessaires à une autre table. Dans mon exemple, seule la couleur bleu pourra être supprimée car c'est la seule qui n'est pas utilisée. Si je veux pouvoir supprimer la couleur rose, il faudra d'abord que je modifie les lignes 1 et 3 de la table Fleur soit en les détruisant, soit en changeant le NoCouleur pour un autre numéro afin que le fameux numéro 1 (le rose) puisse être retiré car il ne sera plus référencé (utilisé) dans la table Fleur.
0
bonsoir XFan et merci pour ta réponse détaillée. avec ton exemple j'ai vite saisi de quoi il s 'agit.
cependant j'aurai une petit question sur ton exemple, je me demandais si nocouleur dans la table fleur été une clé étrangère?
merci encore
0
X-Fan Messages postés 805 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 6 janvier 2010 19
3 janv. 2010 à 22:52
Salut Nico,
C'est bien ça. NoCouleur dans la table Fleur sera une clé étrangère dont la référence pointe sur la clé primaire de la table Couleur qui est le champ No. :P
0
salut Xfan,
merci d'avoir pris le temps pour me répondre. j'ai bien compris la notion d'intégrité référentielle. je te souhaite une bonne nuit.
a bientôt
0
X-Fan Messages postés 805 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 6 janvier 2010 19
4 janv. 2010 à 01:41
Pas de problèmes. Bon courage et n'hésites pas à repasser par ici en cas de problèmes. Il y aura toujours quelqu'un pour te répondre. ;)
0