2010-09-28 2 views
0

Supposons que nous ayons un CMS multi-site et que chaque site web de ce CMS ait 2 options: preview_width et preview_height. Nous savons que chaque option devrait avoir une valeur par défaut si elle n'est pas définie par l'utilisateur. Nous savons également que la liste des options sera étendue dans un proche avenir. Quelle est la meilleure pratique pour stocker ces options dans la table MySQL?Enregistrer la liste des options extensible dans la table MySQL? Meilleur entrainement?

Je sais que trois pratiques et les deux ont ne dispose pas (ou peut-être je ne sais pas comment utiliser correctement ces pratiques) ...

  1. pratique n ° 1: Chaque option est représentée comme colonne dans options tableau.

    Inconvénient: Nous devons modifier options la table à chaque fois que nous l'ajout d'une nouvelle option. Pratique n ° 2: Toutes les options sont stockées comme objet/tableau sérialisé dans la colonne options de la table des sites.

    Inconvénients: Pour ajouter une nouvelle option avec une valeur par défaut - nous avons besoin de boucler toutes les lignes et modifier les options un numéro de série; ou nous pouvons ajouter cette option quand elle est demandée et trouvée absente. Pratique n ° 3: Toutes les options sont stockées dans la table des options avec la structure: id, site_id, option_name, option_value. Inconvénients: Lors de l'ajout d'une nouvelle option, nous devrions mettre à jour cette table avec des options par défaut pour chaque site Web.

Quel est votre choix? Quelle pratique choisir quand de nouvelles options sont ajoutées très souvent? Y a-t-il d'autres pratiques?

Merci.

Répondre

0

Je voudrais utiliser la pratique n ° 3. Pour stocker la valeur par défaut, vous pouvez essayer d'écrire une méthode pour obtenir les options:

Vous devez également écrire méthode default_value(option) qui devrait chercher des valeurs par défaut dans un fichier de configuration ou autre.

+0

Btw .. une autre variante de la pratique # 3 est de placer les valeurs par défaut dans des lignes avec 'site_id = 0'. Donc nous pouvons toujours obtenir les options en cours par 'array_merge (get_options (site_id = 0), get_options (site_id = 12345))' Que pensez-vous? – Kirzilla

+0

Je pensais juste à utiliser 'site_id = null' comme valeur par défaut. – klew