Incrément automatique vs Différence key unique Lorsque vous les avez tous les deux dans une table?

Quelle est l'utilisation de la key primaire d'incrémentation automatique dans une table, si je ne l'utilise nulle part lors de l'interrogation.

Par exemple, j'ai un formulaire où l'user s'enregistre userid / passwd et etc et une table remplit comme ci-dessous.

user table id int auto increment primary key userid unique key passwd varchar etc etc 

Chaque fois que je vérifie l'user de connection ou toute autre requête, je select * from tbname where userid = ? toujours select * from tbname where userid = ? là j'ai un index unique donc quelle est l'utilité d'avoir l'index primaire sur la colonne d'identification?

Y aura-t-il également une différence de vitesse?

Edit: Mon ID user est en fait un nom d'user, choisissez mon user qui s'enregistre.

J'ai tagué cette question sous mysql et sql server car elle pourrait appartenir aux deux.

L'incrémentation automatique et les keys (primaires ou uniques) sont deux choses différentes.

La différence entre les types de key est:

Clé primaire:

  • Un seul dans chaque table
  • Aucune nullité n'est autorisée
  • La key primaire est un identifiant de key unique

Clé unique:

  • Il peut y avoir plusieurs keys uniques dans une table
  • Les nuls sont autorisés

L'auto-incrémentation est une chose différente tous set.

Lorsque vous select l'incrémentation automatique dans une colonne, vous n'indiquez aucune valeur lors de l'insertion d'un logging. La database gardera trace du dernier identifiant incrémenté inséré, et l'insertion suivante utilisera la valeur après (incrémentée de la quantité que vous spécifiez, le plus souvent 1)

Vous vous interrogez plus sur la design de database que sur un SGBD spécifique. Vous êtes confus, à cause du mélange de la key de substitution et de la key naturelle , semble-t-il.

Clé de substitution

Est-ce bon parce que cela n'a pas de sens réel – il est seulement nécessaire pour identifier une rangée. C'est une design la plus courante – parce que votre set de données peut n'avoir aucune autre condition d'identification ou ne pas être fiable. Votre id semble être cette key de substitution.

Clé naturelle

Dans certains cas particuliers, la table peut avoir une key naturelle – c.-à-d. Un atsortingbut ou un set d'attributes qui peut servir le même but que la key de substitution – c.-à-d. Identifier une ligne dans une table . Si c'est le cas, alors vous pouvez penser à faire de la key naturelle comme key primaire dans le tableau.

Qu'est-ce qui est mieux?

Dans le cas où votre colonne userid a un algorithm de génération, il ne peut pas être auto-incrément, évidemment, et il aura le sens de la key naturelle . Si vous êtes sûr que cette key sera toujours unique – alors votre colonne id est redondante – cela n'a aucun sens dans la colonne maintien, dont le seul rôle (ie identification de ligne) est déjà maintenu par une autre colonne. Et il n'y a rien de mal dans le fait que votre colonne de key primaire ne sera pas auto-incrémentée (ici, encore une fois, je suppose que userid a un algorithm de génération).

Pensez à votre id comme à une convention – parce que c'est vous qui décidez – soit vous avez besoin d'une colonne d'identification de ligne spéciale, soit vous ne le faites pas. Cependant, votre id est encore plus redondant si votre userid n'a pas d'algorithm de génération spécial. Dans ce cas, vous pouvez juste laisser tomber id et définir userid comme auto-incrément. En conclusion – gardez à l'esprit

Les conventions sont bonnes si elles sont utiles

Il n'y a pas d'utilisation dans ce cas. Dans la design de table normale, vous devez utiliser l'incrémentation automatique sur id_user pour générer une key primaire unique. Si vous jetez votre colonne ID d'incrément automatique, vous économisez de l'espace d'index. Vous devez définir user_id sur primary pour éviter les valeurs nulles.

L'incrémentation automatique est une génération automatique d'un identifiant de ligne, qui ne se répète pas. C'est un moyen utile de générer un identifiant user unique. Cependant, l'avoir ne fournit aucune garantie d'unicité, comme vous pouvez revenir en arrière et modifier une valeur, s'il n'y a pas de ressortingction unique

Les keys primaires de substitution sont généralement préférées par les développeurs car elles ne sont pas affectées par de petits changements de vie. Par exemple, un jour, vous pourriez décider que vous voulez laisser vos users changer leurs identifiants, et vous avez alors une chance non nulle de gâcher des choses si vous avez d'autres tables référençant celle-ci par userid. Avec une key de substitution, il n'y a aucune chance qu'elle ait besoin de changer de quelque façon que ce soit. C'est juste plus sûr à utiliser.

Mais je tiens également à mentionner qu'en plus des keys primaires, uniques, auto-incrémentées, naturelles et substitutives, il y a aussi une question d'index clusterisé ou non-cluster. L'index cluster est celui utilisé pour stocker physiquement les lignes de la table. Donc, il fournit l'access le plus rapide. Et il n'est pas évident pour beaucoup de débutants que la key primaire ne soit pas nécessairement votre index clusterisé. Si vous savez que 90% du time vous allez utiliser userid dans vos requêtes et que vous voulez en tirer parti, mais ne pouvez pas garantir que userid ne sera jamais nul (ou modifié), faites de l'ID de substitution votre key primaire non clusterisée userid votre index clusterisé naturel unique.