Les différents types de relations dans une base de données MySQL
Considérons une base de données contenant des produits, des clients et leurs commandes.
Chaque commande appartient à un client et peut contenir un ou plusieurs produits achetés. Un même produit peut avoir été acheté par plusieurs clients différents, ou par le même client dans plusieurs commandes.
Voici à quoi ressemble le shema de notre base de données :
Relations directes et indirectes
Relations directes (relations internes):un à un, un à plusieurs
Une relation directe entre deux tables A et B est une relation dans laquelle la table A est directement reliée à la table B par une clé étrangère, obligatoire ou non. Ce type de relation peut être univoque ou multiple.
Dans notre exemple, le champ orders.customers_id est une relation directe avec customers.id. Le champ orders.customers_id est une clé étrangère.
Cette relation permet d'associer chaque commande à un client.
Avec PHP CRUD Generator, il nous permettra d'afficher le nom du client de chaque commande dans la liste des commandes.
Dans l'onglet Build List du générateur CRUD, vous verrez la relation affichée de cette manière :
Relations indirectes (relations externes) :plusieurs à plusieurs
Une relation indirecte permet de relier plusieurs enregistrements de la table A à plusieurs enregistrements de la table B. Pour ce faire, on utilise une table intermédiaire, généralement composée de deux clés étrangères, chacune permettant d'identifier les enregistrements des tables A et B. Il s'agit d'une relation de plusieurs à plusieurs.
Dans notre exemple, la table products_orders est la table intermédiaire. Elle permet d'associer les produits commandés aux commandes. Les tables products_orders.products_id et products_orders.orders_id sont toutes deux des clés étrangères.
Avec PHP CRUD Generator, il permettra d'afficher tous les produits de chaque commande dans un tableau imbriqué dans la liste des commandes.
Le générateur vous permet également de choisir les champs de produits que vous souhaitez afficher, et si les utilisateurs du panneau d'administration sont autorisés à ajouter/modifier/supprimer des produits directement à partir de la liste READ des commandes.
Avec PHP CRUD Generator, il nous permettra d'afficher le nom du client de chaque commande dans la liste des commandes.
Dans l'onglet Build List du générateur CRUD, vous verrez la relation affichée de cette manière :
Relations identifiantes et non identifiantes
Identifier les relations
Une relation d'identification peut être définie lorsque deux tables sont reliées par le même identifiant. En d'autres termes, les enregistrements de la seconde table sont des éléments ou des caractéristiques inhérents à la première table.
Par exemple : un livre est composé de chapitres. Chaque chapitre fait partie d'un livre unique identifié. Dans ce cas, la clé étrangère chapters.books_id sera répertoriée comme la deuxième clé primaire de la table chapters.
Ce type de relation est aujourd'hui très rarement utilisé. On lui préfère généralement une relation indirecte, plus généraliste et moins restrictive.
Relations non identifiantes
Une relation non identifiante est une relation dans laquelle deux tables sont reliées par une appartenance ou des attributs communs ou une inclusion.
Par exemple : chaque commande appartient à un client; chaque commande contient un ou plusieurs produits.