Pour moi, que vous choisissiez une seule ligne ou EAV dépend de la façon dont vous voulez les consommer.
Le pouvoir d'EAV réside dans le fait que de nouvelles données peuvent être ajoutées sans changement de structure. Cela signifie que si vous souhaitez une nouvelle valeur de configuration, il vous suffit de l'ajouter à la table et de l'extraire à l'endroit souhaité dans le code. Il n'est pas nécessaire d'ajouter un nouveau champ au domaine, au schéma, au mappage ou aux requêtes DAL. , etc.
Son défaut est qu’il n’a que la structure la plus simple qui soit, ce qui vous oblige à traiter les données avec pessimisme. Toute utilisation d’une valeur de configuration doit s’attendre à ce que la valeur ne soit pas présente, ou au format approprié, et se comporte en conséquence lorsque cela n’est pas le cas. Une valeur de configuration peut ne pas être analysable en double, en int ou en char. Cela peut être nul. il peut ne pas y avoir de ligne pour la valeur du tout. Pour contourner ce problème, il suffit généralement d’une seule valeur "par défaut" valide pour toutes les valeurs de configuration d’un type particulier de code ( extrêmement rare; la valeur par défaut est tout aussi problématique pour la consommation de code), ou pour Conservez un dictionnaire codé en dur des valeurs par défaut (qui doit changer chaque fois qu'une nouvelle colonne est ajoutée, rendant le principal avantage du stockage EAV peu utile).
Une seule rangée large est à peu près le contraire. Vous le mappez sur une seule instance d'un objet de configuration avec un champ / une propriété pour chaque valeur de configuration existante. Vous savez exactement quel type ces valeurs doivent être au moment de la compilation et vous "échouez vite" dans le DAL si une colonne de configuration n'existe pas ou n'a pas une valeur du type approprié, ce qui vous donne un emplacement pour capturer les exceptions en fonction sur les problèmes de récupération / hydratation de la configuration.
Le principal inconvénient est qu'un changement structurel est nécessaire pour chaque nouvelle valeur; nouvelle colonne de base de données, nouvelle colonne dans la couche DAL (le mappage ou les requêtes / SP SQL), nouvelle colonne de domaine, nécessaires pour tester correctement l'utilisation.
La situation appropriée pour utiliser l'un ou l'autre est la situation dans laquelle les inconvénients sont atténués. Pour moi, la plupart des situations de codage de configuration ont nécessité une implémentation à une seule ligne. Cela est principalement dû au fait que si vous introduisez une toute nouvelle valeur de configuration régissant le comportement d'une partie de votre programme, vous devez déjà modifier le code pour utiliser la nouvelle valeur de configuration. pourquoi ne pas aller sur l'objet config et ajouter la valeur à utiliser?
En bref, un schéma EAV pour stocker la configuration ne résout pas vraiment le problème qu’il est censé résoudre, et la plupart des solutions de contournement aux problèmes qu’il présente viole DRY.