Question

Je suis en train de rénover notre CMS et j'ai couru dans une situation que je ne sais pas quelle solution adopter. Fondamentalement, chacun de nos clients abrite le contenu de leur site dans leur propre base de données. Cela inclut le contenu, les enquêtes, la recherche des mots utilisés par les visiteurs, le menu strucutre, etc.

Beaucoup de contenu sur les sites de nos clients est dynamique et ils peuvent les changer via le CMS. Toutes ces données sont enregistrées dans une base de données relationnelle, je l'ai conçu, mais je suis en cours d'exécution dans quelques situations où la tenue de ces préférences dans un tableau serait exagéré.

Par exemple, le CMS leur permet d'envoyer des e-mails à une liste de destinataires. Ils peuvent choisir d'utiliser notre serveur ou ils peuvent mettre dans leur propre serveur smtp. Cependant, dans ce cas, il serait un peu exagéré de créer une table avec une colonne pour « mailService » et avoir des valeurs spécifiques tiennent depuis la table détiendrait qu'une seule ligne.

Voici les quelques idées que je suis venu avec en cherchant un peu sur ce site et / ou Google, mais je ne suis pas trop sûr de ce que leurs avantages et leurs inconvénients sont:

  • tenir Fondamentalement toutes les préférences dans un tableau comme je l'ai mentionné ci-dessus, quelque chose que je voudrais éviter.
  • Maintenez toutes ces préférences « single » dans un fichier XML que je serais modifions quand ils changent leurs paramètres.
  • Avoir une table avec les préférences dites columsn suivantes: id, preferenceName, valeur. Chaque fois que j'aurais une nouvelle préférence je venais de l'ajouter, modifier ou supprimer (je ne aime pas cette option parce que je sens que je devrais hardcode trop de valeurs ... au moins de la manière Je vois la mise en œuvre)

Je suis un peu penché vers l'idée XML, mais je voudrais obtenir des commentaires de la bonne communauté ici à Stackoverflow :) Peut-être en utilisant XML serait une idée horrible pour une raison que je l'ai complètement oublié ou il y a un votre-dumb-pourquoi-didnt-vous-just-do-cette solution. Merci pour toute entrée!

Était-ce utile?

La solution

La route xml fonctionne bien dans le sens où il permet facilement de nouveaux attriutes à ajouter et permet attributs à regrouper. L'inconvénient est qu'il est impossible de migrer ou les données de préférence de mise à jour en utilisant SQL. Il doit être fait par programmation. Vous pouvez également ne pas requête préférences pour les attributs individuels en cas de besoin.

Tout cela pour dire, si vous maintenez un petit nombre de préférences où il n'y a pas besoin d'interroger ou de les mettre à jour via SQL, XML fonctionnerait bien pour vous. Dans le cas contraire, le nom, la valeur table de paire dans la base de données serait une meilleure façon de procéder.

Autres conseils

Je dirais que la table de base de données d'utilisation d'un si vous avez déjà, et de diviser les noms des paramètres dans des catégories sensibles:

mail_service:recipients
mail_service:sender
mail_service:smtp:hostname
mail_service:smtp:username
mail_service:smtp:password

Autre que cela, je préfère yaml XML pour des raisons de lisibilité. Il est comme XML, mais sans tout le désordre.

 mail_service:
     recipients:
       - recipient1@domain.com
       - recipient2@domain.com
       - recipient3@domain.com
       - recipient4@domain.com

  visuals:
    header:
      text_color: #BBCCDD
      background_color: #FFFFFF

La classe Symfony YAML est une belle bibliothèque autonome pour analyser ce fichier dans un tableau PHP.

Vous pouvez également utiliser un simple fichier PHP.

$settings = array(
 "mail_service:recipients" => " .... ",
 "mail_service:sender" => " .... ",    
 "mail_service:smtp:hostname" => " .... ",
 "mail_service:smtp:username" => " .... ",
 "mail_service:smtp:password" => " .... ");

J'aller avec le fichier XML (mais il n'a pas besoin d'être XML - si elle était Java j'utiliser un fichier de propriétés jusqu'à ce que je trouve une raison de ne pas) ou une table seule clé / valeur (la champ id ne gagne pas beaucoup moins que ce soit une clé étrangère de faire la différence entre les différentes installations).

Personnellement, j'aime la polyvalence de SQL et d'avoir des choses autonome. Utilisation de la base de données n'ajoute une complexité qui ne sont pas déjà là (vous obtiendrez le même niveau de la mise en cache gratuitement, par exemple, lorsque vous devez développer votre propre cache XML si la performance est un problème). Je choisirais XML que si les valeurs ont une structure très complexe qui rendrait la manipulation par SQL encombrantes.

Je ne sais pas pourquoi vous pensez que vous devez « hardcode beaucoup de valeurs » et plus précisément pourquoi il y aurait plus hardcoding avec une solution de base de données qu'avec une solution de fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top