2011-03-02 6 views
4

Je construis un CMS (oui, oui, je sais, mais j'aime ça, d'accord? :-)) qui a des 'entrées'. Ces entrées ont un nombre fixe de champs standard qui peuvent être capturés dans un db-id, un titre, une date créée, etc.Quel est le meilleur schéma de base de données relationnelle à utiliser pour implémenter un magasin de données dynamique et flexible?

Toutefois, je souhaite également que les entrées comportent un nombre X de «champs personnalisés» associés. Ces champs personnalisés sont définis par l'utilisateur et peuvent avoir des titres, des descriptions, un formatage, une longueur maximale et d'autres attributs définis. Maintenant, évidemment, je peux stocker les définitions de ces champs dans une table db assez facilement, mais quelle est la meilleure façon de stocker et de faire correspondre les données pour chaque entrée qui correspond à ces champs personnalisés? ExpressionEngine fait fondamentalement la même chose et utilise une table d'entrées qui contient des colonnes ajoutées dynamiquement pour chaque champ personnalisé.

Mais je ne peux pas croire que c'est la meilleure façon de résoudre ce problème.

Existe-t-il de meilleurs moyens de structurer un relationnel db pour gérer ce type de modèle de données flexible?

Répondre

3

Ceci est essentiellement EAV (lite):

http://en.wikipedia.org/wiki/Entity-attribute-value_model

J'ai demandé littéralement la même question (sur un sujet similaire):

Flexible forms and supporting database structure

+0

En fait, après un peu de recherche le chemin expressionengine le gère avec une seule table extensible, plutôt comme une sorte d'héritage de table unique, mais je suis en train d'examiner la solution EAV que vous proposez maintenant pour voir si elle répondrait mieux à mes besoins. –

Questions connexes