Débutant en Bases de données
Résolu
nico
-
X-Fan Messages postés 805 Date d'inscription Statut Membre Dernière intervention -
X-Fan Messages postés 805 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Débutant en Bases de données
- Fuite données maif - Guide
- Supprimer les données de navigation - Guide
- Trier des données excel - Guide
- Base de registre - Guide
- Service de diffusion de données - Forum TNT / Satellite / Réception
3 réponses
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.
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.
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