Question

Je dois travailler avec une base de données pour faire des rapports Le DB est assez grand: 416 055 104 lignes Chaque ligne est très léger cependant, seulement booléens et int ids.

Chaque ligne est d'identifier par 3 colonnes, mais à ma grande surprise, il n'y a pas de clé primaire sur elle. Seul un index cluster avec une contrainte unique.

Sachant que, j'ai 2 question.

  1. Y aurait-il une bonne raison pour cela?
  2. Est-il possible que je peux transformer cela en une clé primaire.

En ce qui concerne la question 2

Création d'une nouvelle clé primaire crée également un index non ordonnés en clusters à associer avec (il existe déjà un un cluster existant).
Ceci est pas ce que je suis à la recherche. Je veux garder ce même indice, mais aussi faire une clé primaire.

  • Est-il possible?
  • Serait-ce plus rapide que la création à nouveau l'ensemble de l'indice? (Je l'espère)
  • Quelles pourraient être les conséquences? (Serrures? Accident? Données corrompues?)
Était-ce utile?

La solution

Il y a peu ou pas de différence entre une clé primaire et une contrainte UNIQUE sur des colonnes non nullables. Donc, si les colonnes en question ne sont pas annulable alors je vous suggère de ne rien faire. La principale raison de faire une clé candidate dans une clé primaire est si vous avez un logiciel (comme un outil de modélisation de données ou tout autre outil de développement) qui attend la clé d'identifier une contrainte de clé primaire.

Autres conseils

Bonne question.

Si vous avez déjà un index unique sur des colonnes non nullables alors vous avez une clé candidate. Je ne suis pas au courant d'aucun avantage particulier d'en faire une clé primaire « officielle ». En fait, j'ai le sentiment que ne pas en faire un PK donnera une plus grande flexibilité.

  1. Un index unique peut permettre null valeurs. Une clé primaire ne peut pas.

  2. Je crois que vous ne pouvez pas « marquer » un index existant comme clé primaire. Il faudrait laisser tomber et recréer. Pour éviter des choses, je dirais que ce serait bon de placer un TABLOCKX, HOLDLOCK sur la table avant de le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top