Question

Supposons que j'ai un formulaire qui contient trois 10 champs:champ1..field10.- Je stocker les données du formulaire dans une ou plusieurs tables de base de données, probablement à l'aide de 10 colonnes de base de données.

Supposons maintenant que quelques mois plus tard que je veux ajouter plus de 3 champs.Et dans l'avenir, je peut ajouter/supprimer des champs de ce formulaire basé sur l'évolution des besoins.Si j'ai une colonne de base de données par champ de formulaire, puis j'ai fais les changements correspondants dans la base de données chaque fois que je change la forme.Cela semble être un mal de tête d'entretien.Il doit y avoir un peu plus près.

Donc ma question est, comment puis-je concevoir un modèle de données qui est faiblement couplé avec mon INTERFACE?Un cas concret d'utilisation est un système de CRM qui est extensible/personnalisable par les utilisateurs.

Était-ce utile?

La solution

Sauf si vous avez une très bonne raison de faire cela, alors ce est généralement une mauvaise idée.C'est très difficile à optimiser et à l'échelle de la base de données.

Si vous devez absolument le faire, puis Travis la suggestion est très bien pour les petites tables, mais ce n'est pas vraiment de l'échelle que de bien.

Autres conseils

Vous pourriez abstraite des champs à une table distincte de sorte qu'ils sont plusieurs à plusieurs à la Forme de la table:

Formulaire

ID
Nom
etc.

Champ

ID
Étiquette
Valeur

FormField

FormID
FieldID

Mon équipe est venu avec une solution pour cela, lorsque j'ai travaillé pour la Quête de l'Informatique sur les OBJECTIFS (www.totalaims.com).En résumé, nous avons ajouté des écrans de maintenance qui a permis à l'administrateur d'ajouter des métadonnées et suite également à ajouter des champs de la base de données dans certains tableaux.Les champs ont également été ajoutées à leur propre entretien et les écrans de recherche automatiquement.Nous avons construit ce sur le dessus de la OpenACS.Vous pouvez en savoir plus à www.openacs.org - de la recherche pour "flexbase" ou "dynfields" ou regarder ici www.project-open.org/doc/intranet-dynfield/ .Cela a fonctionné assez bien leur principal inconvénient étant un des effets secondaires de la principale à l'envers c'est à direque l'ajout de champs qui pourrait être fait par des non-Administrateurs de bases de données, et comme un résultat de performance pourrait facilement être compromise.

Je l'ai fait dans le passé à l'aide d'une colonne XML dans la base de données pour stocker les champs supplémentaires.En général, je viens d'avoir un gros sac de propriété dans la colonne XML et ensuite utiliser XSD à appliquer lors de la validation de faire des mises à jour ou des inserts.Quand je suis à la récupération des données j'ai des règles XSL ou le modèle objet de déterminer si l'élément est affiché, ce que supplémentaires de mise en forme à appliquer et pour les formulaires web quel est le type de l'élément d'entrée à utiliser en fonction du type de données dans le nœud de propriété.

Il fonctionne vraiment bien si il est nécessaire de disposer de certaines données stockées sur le plan relationnel et d'autres données stockées extensibly pour éviter la grande table, avec beaucoup de lignes nulles effet.

Si vous n'avez pas besoin de faire relationnel choses avec les données, telles que l'adhésion ou pivotante avec d'autres tables dans la base de données, alors qu'un simple autonome de formulaire XML est une bonne solution aussi.

La plupart des bases de données ont maintenant la première classe de la prise en charge XML pour ce genre de chose.Dans SQL Server, par exemple, vous pouvez appliquer un schéma XSD pour une colonne de type de données XML droit dans le datbase.Dans les versions récentes, il est aussi un support pour l'indexation sur ces colonnes.

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