2014-04-22 5 views
1

Je crée un service d'hébergement de fichiers, mais en ce moment je crée la partie d'activation de l'email de compte de l'enregistrement. J'ai donc dû créer une structure de base de données.Quand utiliser une structure de base de données relationnelle?

Et maintenant il est:

users 
    id 
    first_name 
    last_name 
    email 
    password 
    since 
    active 
    hash_activate 

Mais je peux le faire comme une base de données relationnelle aussi:

users 
    id 
    first_name 
    last_name 
    email 
    password 
    since 

activation 
    id 
    user_id 
    hash 
    active 

Quelle serait la meilleure façon d'aller à ce sujet? Et pourquoi?

Répondre

0

Si chaque personne n'a qu'un seul hachage d'activation actif à la fois, il est alors possible de le stocker dans la même table que les utilisateurs. Cependant, un avantage de la séparation est que les utilisateurs n'ont qu'un hachage d'activation pendant une courte période de temps, donc pour garder les enregistrements utilisateur plus petits, vous pouvez stocker les hachages dans une table séparée. Garder les enregistrements de l'utilisateur de petite taille le rend plus performant. Dans ce cas, vous n'avez pas de colonne active. Vous devez simplement supprimer les hachages inactifs.

Si vous stockez les colonnes d'activation dans la table utilisateur, veillez à sélectionner les colonnes par nom. Par exemple. dans la plupart des cas, vous voulez faire:

SELECT id, first_name, last_name, email, password 
FROM users 

Au lieu de:

SELECT * 
FROM users 

Vous vouliez seulement à sélectionner les colonnes d'activation lorsque vous en avez besoin.

+0

Bien sûr, vous ne devriez pas utiliser select * dans une requête de production. – HLGEM

+0

En fait, j'aurais toujours la colonne 'active' pour voir si un utilisateur a réellement activé son compte ou non. Si ce n'est pas le cas, après N jours après l'enregistrement, l'enregistrement de l'utilisateur entier sera supprimé, car l'utilisateur n'a pas activé son compte. –

+0

@KidDiamond, a du sens. Si 'active' est pour l'utilisateur, alors stockez-le dans la table utilisateur. Je pensais que c'était pour le hash. –

0

La seconde ne serait judicieuse que si un utilisateur pouvait avoir plusieurs activations. Vous ne dites pas si c'est vrai ou faux, donc je ne pourrais pas vous conseiller.

+0

Un utilisateur ne peut avoir qu'un seul hachage d'activation de compte. –

+0

Ensuite, utilisez la première option avec une seule table. –

0

Si les activations sont temporaires ou si un hachage définit quelqu'un comme actif, alors faites-les différentes. Sinon, cela n'aura vraiment aucune importance. Cependant, ni l'un ni l'autre n'est nécessairement plus ou moins relationnel que l'autre, sans beaucoup plus d'informations. Si vous mettez une contrainte unique sur la combinaison de valeurs dans chaque ligne et que vous définissez chaque colonne avec une contrainte NOT NULL, votre première sera plutôt relationnelle. Vous utilisez une conception relationnelle lorsque l'exactitude des données, avec le temps, est aussi importante, sinon plus importante, que ce que l'application fait avec ces données et/ou lorsque l'exactitude/la cohérence de la structure des données est essentielle au bon fonctionnement d'une application, mais peut-être pas nécessairement garanti par le fonctionnement de l'application.

Questions connexes