J'ai essayé de concevoir un schéma de base de données pour un projet parallèle, mais je n'ai pas été en mesure de produire tout ce que je suis à l'aise avec. J'utilise ASP.Net avec LINQ pour mon accès aux données:Conception de base de données concernant les entrées dynamiques - Une ligne ou plusieurs lignes?
Je vais autoriser les utilisateurs à spécifier jusqu'à 10 "éléments" chacun avec 2 propriétés numériques, et 1 propriété référentielle, le nom de l'élément.
Si je devais mettre cette entrée en 1 ligne, il serait facilement égal à plus de 30 colonnes (minimum), par ex. item_1_name (ref) item_1_weight item_1_volume item_2_name ... etc ...
Et je ne peux pas simplement transformer ces colonnes dans les tables référentiels que chaque propriété peut varier essentiellement de 1 à 400+. J'ai également pensé que si un utilisateur décide de mettre un seul élément dans son entrée, la méthode dont je crée l'objet pour ces données sera statique, car avec LINQ, je devrais vérifier si les propriétés et whatnot sont NULL et travaille en conséquence. De plus, si jamais je voulais augmenter le nombre d'éléments autorisés dans une entrée, ce serait un casse-tête de travailler avec.
L'autre option à laquelle j'ai pensé consiste simplement à créer une ligne pour chaque élément et à l'attacher avec un identifiant d'entrée. Donc, je n'aurais pratiquement jamais d'entrées nulles, mais ma table deviendrait astronomique mais pas très large, car il n'y aurait que 5 colonnes impaires.
Y at-il quelque chose que je néglige dans ma conception/y a-t-il une façon beaucoup plus efficace de le faire?
EDIT: Quand je dis qu'il va croître astronomiquement, je veux dire dans ce sens: Un utilisateur peut créer une entrée, et chaque entrée aura très probablement un groupe d'éléments. Donc, disons qu'ils font une entrée par jour sur le site, ils pourraient avoir 3 groupes d'articles, avec le nombre maximum d'articles (10), ce qui équivaudrait à 30 articles pour cette seule entrée. Faire une entrée tous les jours pendant une semaine à ce rythme et vous pourriez avoir 210 lignes pour cet utilisateur unique.
Ne serait-il pas préférable d'utiliser une contrainte CHECK pour item_id au lieu d'une clé étrangère? – Dave
Vérifier mes modifications. Je suis d'accord, mais je suis toujours préoccupé par l'efficacité de ce que je vais faire car le nombre de lignes va être énorme. – MunkiPhD
Oui, vous pouvez utiliser une contrainte CHECK mais lorsque vous devez étendre à 12 éléments, la modification d'une contrainte CHECK est un changement de métadonnées (ALTER TABLE), et cela peut être coûteux. L'insertion de valeurs (11), (12) est un changement de données facile. –