Bonjour à tous,

Je suis en train de réfléchir à l'architecture d'un nouveau site et je me pose de nombreuses questions sur les avantages et inconvénients d'une table pivot.

Dans quel cas de figure est-il préférable de passer par une table pivot ?
Par exemple, pour appliquer des rôles et des permissions à un ou plusieurs utilisateurs, je comprends que cette structure est plus flexible. Au contraire, si je veux appliquer une catégorie et un statut à mes articles, dois-je créer une colonne dans ma table posts ou dois-je passer par une table pivot ?

Merci d'avance pour vos réponses.
Rémi

6 réponses


Huggy
Réponse acceptée

Tu dois créer une table d'association si tu as une relation N-N entre tes entités :
Un utilisateur à N rôles
Un rôle peut s'appliquer à N utilisateurs

Qu'appelles-tu une table pivot ? une table de jointure ?

car PIVOT est utilisé pour transformer une table , en transformant les valeurs des champs en noms de colonnes.

Par exemple :
J'ai une table User et une table Rôle.
Je vais alors créer une table UserRôle dans laquelle je vais reprendre l'id de l'user et l'id du rôle que je souhaite lui attribuer.

http://laravelsd.com/share/2nM4tV

Cela s'appelle une table d'association qui fait le lien entre les deux. Une table d'association est obligatoire si tu veux bien construire ta base lorsque l'identifiant de deux tables sont liés. Comme par exemple une table article et une table catégorie il faudra une table d'association au milieu car un article peut être de une ou plusieurs catégories et une catégorie peut être affecter à un ou plusieurs article.

c'est pas une table mais une association que tu doit créer, une association entre User et Role pour recupérer les id des 2 tables et les avoir en clef primaire de ton association, si je me souvient bien de mes cours d'SQL, depuis mon passage a du noSql j'ai perdu un peut de la vision Sql

Merci à tous pour vos réponses (malgré mes explications confuses). Vous me confirmez donc que les associations entre table ne doivent se mettre en place que lorsqu'il y a une relation N-N entre deux entités.