2009-12-30 10 views
0

J'ai un formulaire web avec environ 15 cases à cocher que les utilisateurs peuvent cocher 0 ou toutes les 15 cases et toute quantité entre les deux. La base de données qui stockera les données de formulaire est MySQL, mais les rapports seront générés à partir des données de MS Access à l'aide d'une connexion MySQL ODBC. Je vois trois options pour gérer cela.Comment normal mes données checkbox pour le stockage dans la base de données

La façon dont la feuille de calcul:

Demandez une table avec une colonne booléenne pour chaque case à cocher et une zone de texte pour "Autres"

La façon Normalisé:

deux tables, une avec les données de formulaire autres que l'info case à cocher. Puis une deuxième table contenant le FK des données de formulaire et la valeur de la case à cocher dans une relation un à plusieurs. Gérez l'insertion des valeurs de case à cocher séparément de l'insertion des données de formulaire avec une certaine boucle lorsque le formulaire est traité.

La façon courte:

Avoir une table avec un champ de texte pour les données de cases à cocher. Lors du traitement du formulaire, concaténez les valeurs de la case à cocher en une chaîne séparée par des virgules et placez-la dans le champ de texte avec les autres données.


Tant le chemin d'accès et la façon courte sont alléchants en raison de la facilité avec laquelle ils peuvent être utilisés pour générer des rapports, la façon dont court en particulier. Malheureusement, alors que je préfère la manière normalisée, personne dans mon organisation qui développe les parties Access ne sait comment générer des rapports qui utilisent correctement les données normalisées, du moins pas proprement. Le mode d'accès et le mode court peuvent être problématiques lors du filtrage par valeurs de case à cocher (le mode d'accès le plus souvent).

Comment dois-je procéder dans ce cas? Si je vais dans la voie normalisée, je devrai aussi prendre la responsabilité de développer un outil pour générer des rapports, ce qui pourrait faire quelques pas et être un peu un problème politique. Je m'en tiens à ce qu'ils utilisent déjà (The Access way) en augmentant ma charge de travail immédiate et en m'achetant un tas de problèmes de programmation sur toute la ligne, mais en évitant toute politique de bureau. Ou la façon hybride qui coûte un peu de programmation maintenant et quelques ennuis plus tard, a seulement quelques obstacles dans les autres membres du projet?

+0

L'approche dénormalisée n'est * pas * la voie d'accès du tout. L'accès ne vous interdit en aucun cas d'utiliser les structures de table appropriées. Veuillez le changer pour lire "la manière de calcul", puisque c'est une manière plus sensible de le décrire. Je vote la question vers le bas pour employer cette expression et enlèverai mon downvote si vous le modifiez pour résoudre ce problème. –

+0

La raison pour laquelle je l'ai défini comme étant le "chemin d'accès" puisque c'est généralement l'endroit où voir ce modèle, puisque c'est le moyen le plus simple de faire fonctionner correctement les formulaires sans codage. Merci de l'avoir changé cependant, il semble que ce soit une description plus juste. –

Répondre

2

Je ne suis pas d'accord que ce que vous appelez "la voie d'accès" n'est pas normalisé. Tant que toutes les cases à cocher ont une signification différente et ne dépendent que de la clé (et non l'une de l'autre), la table est normalisée (au moins, 3NF ou BCNF). En d'autres termes, si vous ne voyez pas de problèmes avec cette structure, allez-y, Codd ne viendra pas vous hanter pendant votre sommeil. (Et même date sera probablement ok avec cela, tant que vous ne stockez pas les cases "off" comme NULL: p)

+0

Il me semble que ce qui est décrit est clairement dénormalisé, puisqu'il dit 15 valeurs plus AUTRES. Et appeler l'approche dénormalisée "la voie de l'accès" est tout simplement stupide, car ce n'est pas une telle chose - c'est une approche tableur. L'accès ne limite en aucun cas la capacité du développeur à créer un schéma correctement normalisé. –

+0

David, je ne vois pas ça du tout. La question se lit comme suit: "J'ai un formulaire Web avec environ 15 cases à cocher que les utilisateurs peuvent cocher 0 ou toutes les 15 cases à cocher et toute quantité entre les deux." Donc, dans mon livre, cela se traduit par 15 attributs optionnels, et aucune contrainte supplémentaire (dépendance) entre les cases à cocher. S'il vous plaît citer où vous lisez "..plus AUTRE" parce que je ne le vois pas. –

+0

A la fin de "la voie d'accès" il dit, "et une zone de texte pour 'autre'". –

0

Si la valeur vrai/faux sont des éléments discrets de données qui sont directement liés à la PK alors vous pourriez les mettre dans la même table que l'entité pour laquelle ils sont.

Si vous vouliez le séparer dans une autre table, alors c'est très bien. Il suffit de mettre une colonne pour toujours option. Ceci est facile à développer ou à supprimer à l'avenir en ajoutant ou en supprimant des colonnes.

Je ne recommanderais pas la liste des valeurs séparées par des virgules car elles ne sont pas maintenables et entraînent de la confusion.

+0

? - veuillez informer –

0

Concevez vos données à capturer sous forme normalisée.

Dans votre base de données Access, créez une requête Analyse croisée qui l'affichera dans le format que vous avez décrit, avec une colonne distincte pour chaque élément de données de case à cocher. Utilisez cette requête de tableau croisé en tant que vue à partir de laquelle les personnes extrayant des données pour les rapports effectuent leurs sélections.

Vous obtenez le meilleur des deux mondes, au détriment de passer du temps à effectuer la requête de tableau croisé. Si ce délai devient exorbitant, envisagez des instantanés.

Questions connexes