J'ai un scénario de conception de table et en tant que type non DBA, j'aimerais avoir des opinions sur ce qui est plus évolutif.
Imaginons que l'on vous demande d'enregistrer des informations sur les maisons d'une zone métropolitaine, en commençant par un petit quartier (200 maisons) mais en finissant par atteindre 500 000+ maisons.
Vous devez stocker les informations de base: ID # (un lot unique # que nous pouvons utiliser comme index unique), Addr, City, State, Zip. Une table fine et simple le gèrera.
Mais chaque année, on vous demandera d'enregistrer des informations supplémentaires sur toutes les maisons - et QUELLES informations changeront chaque année. Ainsi, par exemple, la première année, vous êtes invité à enregistrer le nom de famille et la superficie en pieds carrés des propriétaires. La deuxième année, il vous est demandé de conserver le nom de famille, mais de vider la superficie et de commencer à collecter les prénoms des propriétaires.
Enfin - chaque année, le nombre de colonnes supplémentaires change. Pourrait commencer avec 2 colonnes supplémentaires, puis passer à 6 l'année prochaine, puis redescendre à 2.
Ainsi, une approche de table consiste à essayer d'ajouter les informations personnalisées sous forme de colonnes dans les tables maison afin qu'il n'y ait qu'une seule table.
Mais j'ai une situation où quelqu'un a disposé les tables pour cela comme:
Colonnes "Table de la maison": ID, Addr, Ville, État, Zip - avec une ligne par maison
ID Addr City State Zip
-------------------------------------------
1 10 Maple Street Boston MA 11203
2 144 South Street Chelmsford MA 11304
3 1 Main Avenue Lowell MA 11280
Colonnes "Tableau d'informations personnalisées": ID, nom, valeur - avec un tableau ressemblant à:
ID Name Value
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 Square Footage 1200
2 Square Footage 1930
3 Square Footage
Il y a donc plusieurs lignes pour chaque enregistrement de maison individuel. Chaque année, lorsque les informations facultatives requises changent, ce tableau est littéralement reconstruit, donc l'année prochaine il pourrait ressembler à:
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 First Name John
2 First Name Harry
3 First Name Jim
Finalement, vous accumulez 100 000 rangées de maisons ET un an, il y a 10 informations supplémentaires; le deuxième tableau contient maintenant 1 000 000 de lignes d'informations, dont beaucoup contiennent des informations redondantes (description). Dans l'ensemble, les exigences de la base de données sont que les utilisateurs devront obtenir des informations sur la ligne de la maison + les valeurs de champ personnalisé associées des milliers de fois par jour.
Donc ma question: Serait-ce une mauvaise (ou horrible) pratique de plutôt:
A) Disposez la table de la maison avec une estimation du nombre maximum de colonnes personnalisées (appelées peut-être "1" à "10") et insérez ces valeurs personnalisées directement dans les lignes de la maison
OU
B) Stockez les informations personnalisées dans la table de la maison, mais chaque année lorsque les exigences changent, reconstruisez la table de la maison avec uniquement le nombre de colonnes nécessaires pour les informations personnalisées, avec l'idée que les exigences pourraient devenir folles et vous ne savez jamais combien de maximum des champs facultatifs peuvent être demandés?
Merci, j'espère que cela a du sens!