Je ne sais pas laquelle des deux approches de schéma de base de données je dois adopter dans la situation suivante.
J'ai besoin de stocker plusieurs attributs pour un site web, par exemple la taille de la page, le nombre de mots, la catégorie, etc. et où le nombre d'attributs peut augmenter à l'avenir. Le but est d'afficher ce tableau à l'utilisateur et il devrait être en mesure de filtrer/trier rapidement les données (la structure du tableau devrait donc permettre des requêtes et des tris rapides). Je souhaite également conserver un journal des données précédentes afin de maintenir une chronologie des changements. Les deux options de structure de table auxquelles j'ai pensé sont les suivantes :
Option A
attributs du site web
id, website_id, page_size, word_count, category_id, title_id, ...... (jusqu'à 18 colonnes et il faut garder à l'esprit qu'il peut y avoir quelques valeurs nulles et qu'il sera peut-être nécessaire d'ajouter d'autres colonnes à l'avenir).
site_attributs_change_log
même structure de table que ci-dessus avec une colonne supplémentaire pour "change_update_time".
Je pense que l'avantage de ce schéma est que les requêtes seront faciles à écrire même si certains attributs sont liés à d'autres tables et que le tri sera également simple. L'inconvénient, je suppose, est que l'ajout de colonnes ultérieurement peut poser des problèmes avec ALTER TABLE qui prend beaucoup de temps à s'exécuter sur de grandes tables de données + il peut y avoir de nombreuses lignes avec de nombreuses colonnes nulles.
Option B
champs_d'attributs_du_site_web
attribute_id, attribute_name (par exemple page_size), attribute_value_type (par exemple int)
attributs du site web
id, website_id, attribute_id, attribute_value, last_update_time
L'avantage de cette approche semble être sa flexibilité, en ce sens que je peux ajouter des colonnes à tout moment et que j'économise de l'espace de stockage. Cependant, même si j'aimerais adopter cette approche, j'ai l'impression que l'écriture de requêtes sera particulièrement complexe lorsqu'il faudra afficher les tables [puisque je devrai afficher les enregistrements de plusieurs sites à la fois et qu'il y aura également des références croisées avec d'autres tables pour certains attributs]. + le tri des données pourrait être difficile [étant donné qu'il ne s'agit pas d'une approche basée sur des colonnes].
Voici un exemple de ce que je chercherais à obtenir :
Site-A.com, 232032 bytes, 232 words, PR 4, Real Estate [linked to category table],
Site-B.com, ..., ..., ... ,...
De plus, l'utilisateur doit pouvoir trier toutes les colonnes basées sur les nombres, auquel cas l'approche B pourrait s'avérer difficile.
Je veux donc savoir si j'ai bien fait de choisir l'option A ou s'il existe d'autres options plus intéressantes que je n'aurais peut-être même pas envisagées au départ.