Question de conception de base de données pour tous. J'ai un formulaire (comme, le type de papier) qui a plusieurs points d'entrée pour les données. Ce formulaire a changé et devrait changer au fil des ans. Il est en train de devenir une application informatique, de sorte que nous pouvons, entre autres, cesser de gaspiller du papier. (Et des choses mineures, comme avoir toutes les données dans un magasin central qui peut être interrogé, etc.) Je voudrais stocker toutes les données de formulaires dans une base de données, et être assez agnostique quant aux changements.Conception de base de données: Stocker des données à partir de formulaires papier dans la base de données
A l'origine, j'envisagiez chaque champ pour être une chaîne - et j'avais quelque chose comme la table suivante:
FormId int (FK)
FieldName nvarchar(64)
FieldValue nvarchar(128)
... quelque chose comme ça. C'était en fait un peu plus 3NFy en ce que FieldName était dans une autre table, associée à une clé artificielle, de sorte que les noms de champs n'étaient pas dupliqués partout.
Cependant, je voudrais étendre cela aux données numériques et déroulantes. Je pourrais juste stocker des données numériques comme des chaînes, mais cela semble être une idée assez moche. Pareil avec des listes déroulantes. Je pourrais arrêter d'utiliser une table, et utiliser des colonnes sur la table de formulaire principale (celle que FormId référence ci-dessus), mais cela signifie ajouter une colonne pour chaque nouvel élément au fur et à mesure, et les anciens formulaires seraient simplement nul. (Et, à moins que j'emmagasinés, je ne sais pas quand cette colonne a été créé avec la table de chaîne ci-dessus, il est implicite..)
je pourrais étendre le tableau ci-dessus à quelque chose comme:
FormId int (FK)
FieldName nvarchar(64)
FieldValueType int -- enum as to which of the columns below are valid (or just let nulls imply that)
FieldValue nvarchar(128)
FieldValueInt int
Les combos devraient être dans un OTLT (une vraie table de correspondance), ce que j'ai des réserves à propos, mais peut-être que c'est nécessaire ici?
Un conseil sur StackOverflow? J'utilise MSSQL, mais c'est vraiment une question plus générale.