Cours
Dans ce tutoriel, je vais vous expliquer ce qu'est une relation un-à-plusieurs, comment la mettre en œuvre dans la conception d'une base de données et les meilleures pratiques à suivre pour garantir l'évolutivité et l'efficacité de vos bases de données.
Si vous débutez en tant qu'ingénieur de bases de données, je vous recommande de suivre notre Introduction aux bases de données relationnelles en SQL et cours sur la conception de bases de données pour apprendre à créer des relations lors de la définition de votre schéma de base de données.
Qu'est-ce qu'une relation un-à-plusieurs ?
Une relation un-à-plusieurs (1:N) décrit le scénario dans lequel un enregistrement d'une table peut être lié à plusieurs enregistrements d'un autre tableau. En termes simples, cela signifie qu'une chose existe une seule fois, mais qu'elle peut être reliée à de nombreuses choses connexes.
Par exemple, un seul client peut passer plusieurs commandes, mais chaque commande n'appartient qu'à un seul client.
Vous observerez fréquemment des relations un-à-plusieurs décrites à l'aide de ces terminologies :
- Table parentale : Une table contenant l'enregistrement « un ».
- Tableau des enfants : Une table contenant les « nombreux » enregistrements
Dans notre exemple, l'enregistrement client se trouvera dans la table parent, et la table des commandes se trouvera dans la table enfant.
Comprendre la cardinalité dans les relations un-à-plusieurs
La cardinalité indique le nombre d'enregistrements pouvant être reliés entre deux tables. Il répond à des questions telles que :
- Quel est le nombre maximal de commandes qu'un client peut passer ?
- Est-il possible qu'un client n'ait aucune commande ?
Les relations un-à-plusieurs sont asymétriques, ce qui signifie que les règles diffèrent selon les tables. Dans la table parent, un seul enregistrement peut être lié à plusieurs enregistrements, tandis que dans la table enfant, chaque enregistrement ne peut être lié qu'à un seul enregistrement.
La cardinalité comprend également des limites minimales et maximales, où :
- Cardinalité minimale : Le nombre minimal d'enregistrements associés autorisé.
- Cardinalité maximale : Les enregistrements les plus pertinents sont autorisés.
Par exemple, un client peut avoir zéro ou plusieurs commandes, mais une commande doit appartenir à un seul client.
Ces règles influencent la conception des tables en indiquant si certains champs peuvent être vides et dans quelle mesure la base de données applique strictement les relations.
Visualisation des relations un-à-plusieurs à l'aide de diagrammes ER
Dans la conception de bases de données, un diagramme entité-relation (ER) est un moyen visuel de représenter les tables (entités), leurs liens (relations) et le nombre d'enregistrements pouvant être liés (cardinalité).
Notation du diagramme ER
La plupart des diagrammes ER utilisent des symboles spécifiques aux extrémités des lignes reliant vos tableaux afin d'indiquer précisément la nature de la relation. Ci-dessous figurent les concepts visuels couramment utilisés pour :
- Entités : Dessinés sous forme de rectangles pour représenter des tableaux tels que
CustomersouOrders. - Relations : Représentées sous forme de lignes reliant les entités afin d'indiquer comment celles-ci sont liées les unes aux autres.
- Symboles de cardinalité : Le nombre
1ou une ligne simple représente l'unité, tandis que∞,*, ou une patte d'oie, représente les relations multiples.
Exemple de diagramme ER simple
L'exemple ci-dessous illustre la relation entre la table « Customers » et la table « Orders ». La relation un-à-plusieurs indique qu'un client peut passer plusieurs commandes, mais que chaque commande appartient à un seul client. Le tableau « CustomerID » apparaît dans le tableau « Orders » afin de le relier au tableau « Customers ».

Exemples courants de relations un-à-plusieurs
Voici quelques exemples de scénarios de relations un-à-plusieurs que vous pourriez rencontrer :
- Auteur → Livres: Un auteur peut rédiger plusieurs ouvrages, mais chaque ouvrage n'a qu'un seul auteur (dans une conception simple).
- Département → Employés: Un département peut compter de nombreux employés, mais chaque employé appartient à un seul département.
- Catégorie → Produits: Une catégorie peut contenir plusieurs produits, mais chaque produit est affecté à une seule catégorie.
Mise en œuvre d'une relation un-à-plusieurs dans une base de données relationnelle
Les relations un-à-plusieurs sont mises en œuvre à l'aide de clés primaires et de clés étrangères. Dans cette section, je vais vous démontrer comment ces contraintes contribuent à garantir l'intégrité des données dans les bases de données.
Clés primaires et étrangères
La clé primaire est une colonne qui identifie de manière unique chaque ligne d'une table, tandis que la clé étrangère est un champ ou un ensemble de champs dans une table qui fait référence à la clé primaire dans une autre table.
Dans une relation un-à-plusieurs, le côté « un » possède une clé primaire, et la table « plusieurs » stocke cette clé en tant que clé étrangère. La clé étrangère établit alors le lien entre les deux tables et garantit que chaque enregistrement du côté « multiple » renvoie à un enregistrement valide du côté « unique ».
Exemple SQL de base
Examinons comment établir une relation un-à-plusieurs dans SQL à l'aide de l'exemple ci-dessous.
Vous allez créer la table Customers, dans laquelle l'CustomerID identifie de manière unique chaque client. Il s'agit de la table principale.
-- Create Customers table with CustomerID as primary key
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
CustomerName VARCHAR(100)
);
Veuillez maintenant créer la table Orders, dans laquelle CustomerID est une clé étrangère. Dans ce tableau, chaque commande fait référence à un seul client et constitue le tableau enfant.
-- Create Orders table with CustomerID as a foreign key
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
OrderDate DATE,
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
Un-à-plusieurs par rapport à Relations multiples
Il est essentiel de comprendre la différence entreles relations un-à-plusieurset plusieurs-à-plusieurs pour concevoir correctement une base de données. Le tableau ci-dessous résume ces différences :
|
Aspect |
Relation un-à-plusieurs |
Relation multiple à multiple |
|
Définition |
Un enregistrement dans le tableau A peut être associé à plusieurs enregistrements dans le tableau B. |
Les enregistrements du tableau A peuvent être liés à plusieurs enregistrements du tableau B, et inversement. |
|
Orientation relationnelle |
Un → Plusieurs (sens unique) |
Beaucoup ↔ Beaucoup (bidirectionnel) |
|
Règle sur le tableau B |
Chaque enregistrement du tableau B correspond à un seul enregistrement du tableau A. |
Chaque enregistrement du tableau B peut être associé à plusieurs enregistrements du tableau A. |
|
Exemples courants |
Client → Service des commandes → Employés |
Étudiants ↔ CoursProduits ↔ Commandes |
|
Signification dans le monde réel |
Un client peut passer plusieurs commandes, mais chaque commande est attribuée à un seul client. |
Un étudiant peut s'inscrire à plusieurs cours, et chaque cours peut accueillir plusieurs étudiants. |
|
Mise en œuvre |
Clé étrangère unique du côté multiple |
Nécessite une table de jointure (jonction) |
|
Emplacement de la clé étrangère |
Stocké dans la table « many » |
Stocké dans la table de jointure (deux clés étrangères) |
Il est important de noter que les bases de données relationnellesne peuvent pas stocker directement les relations plusieurs-à-plusieurs à l'aide d'une seule clé étrangère. Ils utilisent plutôt une table de jointure (également appelée table de jonction ou table passerelle).
Par exemple, vous pouvez relier en toute sécurité les enregistrements de la table Students à ceux de la table Courses en utilisant la table Enrollments comme table de jointure. La table de jointure divise la relation plusieurs-à-plusieurs en deux relations un-à-plusieurs, et stocke donc les clés étrangères des deux tables. Cette conception facilite la normalisation de la base de données. normalisationet à maintenir l'efficacité.
Je vous recommande de suivre notre cours Joindre des données dans SQL pour découvrir les différents types de jointures en SQL et apprendre à travailler avec différentes tables liées dans la base de données.
Erreurs courantes dans les relations un-à-plusieurs
Voici quelques-uns des problèmes courants que vous pourriez rencontrer dans les relations un-à-plusieurs, ainsi que les solutions pour les résoudre :
- Placer la clé étrangère dans la mauvaise table : Lorsque vous stockez la clé étrangère dans la table « one » plutôt que dans la table « many », vous finissez par stocker plusieurs valeurs dans une seule colonne ou par répéter des colonnes, ce qui rompt la normalisation et complique les requêtes. Pour résoudre ce problème, veuillez toujours placer la clé étrangère du côté « many » de la relation.
- Confusion entre « un-à-plusieurs » et « plusieurs-à-plusieurs » : Si vous modélisez une relation comme une relation un-à-plusieurs alors que les deux côtés peuvent en réalité avoir plusieurs enregistrements associés, cela peut entraîner des données manquantes, des lignes dupliquées ou des conceptions rigides qui ne peuvent pas évoluer en fonction des besoins. Pour résoudre ce problème, veuillez toujours vérifier si un enregistrement enfant peut avoir plusieurs enregistrements et, si oui, utiliser une table de jointure.
- Autorisation involontaire d'enregistrements orphelins : Laisser des enregistrements enfants exister sans enregistrement parent valide peut entraîner des incohérences dans les données, telles que des commandes sans client ou des employés sans service. Pour résoudre ce problème, veuillez utiliser des contraintes de clé étrangère telles que ON DELETE CASCADE, afin que la base de données applique automatiquement les relations valides.
Meilleures pratiques pour la conception de relations un-à-plusieurs
Je recommande les meilleures pratiques suivantes comme guide pour vous aider à concevoir des relations un-à-plusieurs efficaces et évolutives :
-
Veuillez utiliser une nomenclature claire et cohérente : Nommez les clés primaires de manière prévisible, par exemple
CustomerIDetOrderID. Une dénomination claire rend les relations évidentes sans avoir recours à des diagrammes et s'avère utile pour faire correspondre les noms des clés étrangères aux clés primaires référencées. -
Appliquer les contraintes de clé étrangère : Veuillez utiliser des clés étrangères pour permettre à la base de données de préserver l'intégrité des données et d'éviter les enregistrements invalides ou orphelins, en particulier à mesure que vos données augmentent.
-
Réfléchissez à l'avance à la manière dont vous souhaitez procéder pour la suppression : Vous pouvez déterminer le sort des enregistrements enfants lorsqu'un enregistrement parent est supprimé afin d'éviter toute perte accidentelle de données ou toute référence brisée. Par exemple,
CASCADEgarantit que tous les enregistrements enfants sont supprimés lorsque l'enregistrement parent est supprimé. -
Veuillez privilégier des designs simples : Évitez systématiquement les tables superflues ou les relations complexes, et concentrez votre conception sur le modèle dont vous avez besoin actuellement, sans tenir compte d'hypothèses futures. Veuillez noter que les conceptions simples sont plus faciles à maintenir, à expliquer et à étendre.
Conclusion
Une relation un-à-plusieurs décrit comment un enregistrement unique dans une table peut être associé à plusieurs enregistrements dans une autre, tandis que chacun de ces enregistrements associés n'appartient qu'à un seul parent. Ce modèle est fondamental dans la conception des bases de données relationnelles, car il permet de maintenir les données organisées et d'éviter les doublons inutiles.
Je recommande notre parcours de carrière d'ingénieur de données associé en SQL cursus pour apprendre à concevoir des bases de données en SQL afin de traiter, stocker et organiser efficacement les données. De plus, si vous souhaitez améliorer vos compétences en gestion de bases de données pour le big data, notre cours Introduction à la modélisation des données dans Snowflake vous aidera à maîtriser la modélisation dimensionnelle.
Questions fréquentes
En quoi une relation un-à-plusieurs diffère-t-elle d'une relation plusieurs-à-plusieurs ?
Dans une relation un-à-plusieurs, seul un côté peut avoir plusieurs enregistrements associés ; dans une relation plusieurs-à-plusieurs, les deux côtés peuvent en avoir, ce qui nécessite une table de jointure.
Quelle table contient la clé étrangère dans une relation un-à-plusieurs ?
La clé étrangère est enregistrée dans la table du côté « multiple » de la relation.
Une relation un-à-plusieurs peut-elle exister sans clé étrangère ?
En théorie, oui, mais dans la pratique, il est fortement recommandé d'utiliser des clés étrangères pour garantir l'intégrité des données et éviter les enregistrements non valides.
Comment puis-je déterminer si mon modèle de données doit être de type « un-à-plusieurs » ou « plusieurs-à-plusieurs » ?
Veuillez vérifier si les deux parties peuvent disposer de plusieurs enregistrements connexes. Si oui, il s'agit d'une relation plusieurs-à-plusieurs ; sinon, il s'agit d'une relation un-à-plusieurs.
Qu'est-ce que la cardinalité dans les relations ?
La cardinalité décrit la relation numérique entre les deux tables. Dans une relation 1:N, la cardinalité est de un du côté parent et de plusieurs du côté enfant.
