Je suis en train de refondre une petite application interne pour mon équipe, et je me retrouve un peu bloqué sur un point de conception. Actuellement, on a un système où les données des utilisateurs et leurs historiques de connexion sont dans la même table, et ça devient vraiment désordonné à maintenir. Je pense qu'il serait plus propre de séparer tout ça, mais je ne suis pas certain de la meilleure façon de lier les informations entre elles sans créer de problèmes de performance plus tard. J'ai lu des choses sur la normalisation, mais je me demande si c'est vraiment nécessaire pour un projet de cette taille, ou si je complique les choses pour rien.
|
Comment savoir s'il faut normaliser une base de données pour un petit projet?
|
|
Bonne idee de viser une separation des donnees des utilisateurs et de l histoire des connexions. Dans une petite app cela peut paraitre lourd mais sur la duree c est plus lisible et plus sur. L approche habituelle est d avoir une table users et une table logins reliees par user_id. Mettre une cle etrangere et des index sur user_id aide les requetes et les jointures restent rapides tant que vous ne gardez pas des millions de lignes dans la meme table. Pensez aussi a une colonne last_login dans la table users si vous n avez pas besoin de tout l histoire
J avoue que pour un petit projet c est parfois overkill de tout normaliser des le depart. Tenter de creer deux tables et des joints peut compliquer les tests et les deploiements. Une approche pragmatique consiste a demarrer avec deux tables simples mais sans trop de sophistication et a ajouter des index. On peut stocker des infos basiques de connexion dans une table login_check avec user_id et timestamp et garder le reste dans la meme table si besoin, puis migrer si la charge augmente
Le raisonnement technique derriere normalisation dit qu il faut separer les entites et utiliser des cles etrangeres. Dans ce cas les entites vont etre utilisateurs et evenements de connexion. On cree une table users id nom mail etc et une table auth_events avec user_id et timestamp et event_type. On active des index sur user_id et sur timestamp pour les analyses historiques. Pour eviter les joins lourds on peut envisager des vues materialisées si necessaire
Perso j aime lire des docs tech mais je suis aussi sensible au style. Si votre equipe parle plus vite que les specs alors commencez simple et documentez ce qui change. Le mot clef ici est lisibilite plus que pure theorie. L histoire de la connexion peut devenir un flux d events dans une table separee et on peut faire un compte rendu sur les dashboards sans toucher au reste
Remettez en question le cadre meme il est possible que le vrai souci ne soit pas la table mais les requetes qui lisent les historiques. Peut etre qu un modele orienté events ou une table unique mais clean peut suffire. Le sujet porte sur comment l equipe accede a linfo pas sur la structure parfaite pour toujours. Si on peut faire des microservices ou des stockages dedies on peut aussi re penser l architecture
J me suis retrouve a coder sur un vieux schema qui melange tout et je suis frustration. On peut etre clair separer les historiques et les users soulage mais si on perd du temps a optimiser chaque join on perd du temps pour les features. Le comportement attendu par le lecteur est souvent simple tu veux des requetes rapides et un audit facile. Normalisation peut aider mais vous pouvez aussi commencer basique et evoluer
|
|
« Sujet précédent | Sujet suivant »
|

