2010-10-19 5 views
4

Mon application permet aux utilisateurs d'envoyer des fichiers les uns aux autres. Les utilisateurs réguliers peuvent modifier leurs contacts, changer le mot de passe, etc. En outre, les utilisateurs administrateurs peuvent ajouter/supprimer des utilisateurs et afficher le journal de ce qui s'est passé. Ma question est de savoir comment stocker ce journal dans la base de données MySQL?Comment enregistrer une base de données?

Je pensais que pour stocker le journal comme celui-ci:

log_id time user_id action_type      description 
------ ---- ------- ---------------- ---------------------------------------- 
    1  ....  4  User added   Added new user: alex 
    2  ....  1  Contact added  Added contact Paul to group Family 
    3  ....  1  User removed  Removed user: gabrielle 
    4  ....  3  Files sent   Sent files 3,5,7,14 to contacts 2,4,8 
    5  ....  8  Group added  Added new group: Family 
    6  ....  8  Password changed 
    7  ....  8  First Name changed Changed First Name from Michael to Misha  

Quel type serait le meilleur pour action_type? Puisque de nouvelles action_type s pourraient être ajoutées à l'avenir, je pensais que ENUM ne serait pas un bon choix. J'ai donc pensé à le faire VARCHAR(..), comme description.

Est-ce que cela semble raisonnable?

Je serai heureux d'entendre des commentaires/suggestions.

+2

énerve: Appelez votre clé primaire 'id' au lieu de' log_id'. Vous évitez les répétitions moche: 'logs.log_id' – meagar

+4

@meagar - Il n'y a rien de mal à utiliser log_id, et c'est un schéma de nommage recommandé. Il s'assure que les noms de colonnes ne se chevauchent pas lors des jointures sans avoir à taper une longue liste d'alias. – mellowsoon

+2

@mellowsoon C'est pourquoi j'ai dit "bête noire" et non "tu te trompes". – meagar

Répondre

12

Si vous êtes préoccupé par l'ajout de types d'action supplémentaires, faire une table séparée pour stocker vos types d'action et et se joindre à votre table de journaux avec une clé étrangère:

logs table:

log_id time user_id action_type_id  description 
------ ---- ------- ---------------- ----------------------------------- 
    1  ....  4   1   Added new user: alex 
    2  ....  1   2   Added contact Paul to group Family 
... 

action_types table:

id name 
--- --------------- 
1  User added 
2  Contact added 
..... 
Questions connexes