Mysql
 sql >> Base de données >  >> RDS >> Mysql

L'utilisation d'une table principale pour les colonnes partagées est-elle une bonne pratique pour une base de données entière ?

Pourquoi? Faites tout vos entités ont besoin d'être extensibles de cette façon ? Probablement pas - dans la plupart des applications, il y a une ou deux entités au maximum qui bénéficieraient de ce niveau de flexibilité. Les autres entités bénéficient en fait de la stabilité et de la clarté de not changer tout le temps.

EAV est un exemple de l'Effet de plateforme interne :

En d'autres termes, il est maintenant de votre responsabilité d'écrire du code d'application pour faire tout ce qu'un SGBDR approprié fournit déjà, comme les contraintes et les types de données. Même quelque chose d'aussi simple que de rendre une colonne obligatoire comme NOT NULL ne fonctionne pas dans EAV.

C'est vrai parfois un projet nécessite beaucoup de tables. Mais vous vous trompez si vous pensez avoir simplifié le projet en ne faisant que deux tables. Vous aurez toujours autant d'entités distinctes que vous auriez eu de tables, mais maintenant c'est à vous de les empêcher de se transformer en tas d'ordures.

Avant d'investir trop de temps dans EAV, lisez cette histoire sur une entreprise qui a presque cessé de fonctionner parce que quelqu'un a essayé de rendre son référentiel de données arbitrairement flexible :Mauvaise CaRMa .

J'ai également écrit plus sur EAV dans un article de blog, EAV FAIL , et dans un chapitre de mon livre, Antipatterns SQL :Éviter les pièges de la programmation de base de données .