9
votes

Avantages et inconvénients de clés autocrament sur "chaque table"

Nous avons une discussion assez longue dans notre société sur la question de savoir s'il s'agit ou non de mettre une clé d'autocrampe sur chaque table de notre base de données.

Je peux comprendre mettre un sur des tables qui auraient une référence FK, mais je n'aime pas la peine de mettre de telles clés sur chacune de nos tables, même si les clés ne seraient jamais utilisées.

Aidez-vous avec les avantages et les inconvénients pour mettre des clés autocramental sur chaque table en dehors de la prise d'espace supplémentaire et ralentir tout un peu (nous avons des tables avec des centaines de millions de disques).

merci


7 commentaires

Mentionnant quels PDDM que vous utilisez serait utile ....


Question en double: Stackoverflow.com/Questtions/840162/...


@ pygorex1: ce n'est pas un duplicata de cette question. Cette question est de savoir si chaque table devrait avoir une PK. Cette question est de savoir s'il devrait y avoir une identité / autocrampe / AutoNumber.


@Rob: clés artificielles (alias substratables) sont les clés primaires les plus courantes.


@OMG je ne nie pas du tout ça. Mais Brumbar demanda s'il a besoin d'une clé de substitution, non pas s'il a besoin d'une clé primaire.


Dupliquer de "En général, chaque table dans une base de données a un champ d'identité à utiliser comme pk?" Stackoverflow.com/Questtions/1207983


Mais cette question impliquait également la question de "Devrais-je mettre un sur les tables existantes"


9 Réponses :


5
votes

Si vous utilisez de petites clés comme celle-ci pour des index en clustere, il y a des avantages assez importants.

J'aime:

Les inserts vont toujours à la fin des pages.

index non cluster (qui nécessite une référence sur la ou les touches CIX) n'auront pas d'adresses de lignes longues à considérer.

Et plus ... Les trucs de Kimberly Tripp sont la meilleure ressource pour cela. Google elle ...

Aussi - si vous n'avez rien d'autre garantissant l'unicité, vous avez un crochet dans chaque rangée que vous n'auriez pas autrement. Vous devez toujours mettre des index uniques sur des champs qui doivent être uniques et utiliser FKS sur des champs appropriés.

mais ... Veuillez considérer les frais généraux de créer de telles choses sur les tables existantes. Cela pourrait être assez effrayant. Vous pouvez mettre des index uniques sur des tables sans avoir à créer des champs supplémentaires. Ces index uniques peuvent ensuite être utilisés pour FKS.


1 commentaires

Je suppose que SQL Server ici, mais dans l'ensemble, les principes seront similaires, quel que soit le système dont vous parlez.



7
votes

Vous avez besoin de clés primaires sur ces tables. Vous ne le savez pas encore.


4 commentaires

Ceci est peut-être vrai - vous n'avez peut-être pas besoin de faire référence à ces tables maintenant, mais dans quelques années, cela pourrait changer.


La question concerne les clés d'autocrampe, pas les clés principales. Il y a une distinction.


@Bill Le lézard: La question implique que ces tables ne possèdent pas de clés primaires ("Je peux comprendre en placer une sur des tables qui auraient une référence FK à").


@R. Bemrose: Si vous lisez la question comme celle-ci, c'est une duplication exacte. A cette affaire, c'est cette réponse. Stackoverflow.com/Questtions/1771237/...



1
votes

Vous ajoutez des touches principales d'incrémentation automatiques de substitution dans le cadre de la mise en œuvre après une conception logique pour respecter l'architecture physique et sur disque du moteur DB.

C'est-à-dire qu'ils ont des propriétés physicales (étroites, numériques, strictement croissantes) qui conviennent à des touches en cluster, dans des jointures, etc.

Exemple: Si vous modélisez vos données, alors "Produit SKU" est votre clé. "ID de produit" est ajouté ensuite (avec une contrainte unique sur "Produit SKU") lors de la rédaction de vos relevés "Créer une table", car vous connaissez SQL Server.

C'est la raison principale.

L'autre raison d'un orme mort de cerveau qui ne peut pas fonctionner sans une ...


0 commentaires

1
votes

De nombreuses tables sont meilleures avec un pc composé composé de deux fks ou plus. Ces tables correspondent aux relations dans le modèle d'entité-relation (ER). Le modèle ER est utile pour conceptualiser un schéma et comprendre les exigences, mais il ne faut pas confondre avec une conception de base de données.

Les tables qui représentent des entités d'un modèle ER devraient avoir une PK SMMIPLE. Vous utilisez un PK de substitution lorsque aucune des clés naturelles ne peut être approuvée. La décision de savoir si une clé peut être approuvée ou non n'est pas une décision technique. Cela dépend des données que vous allez être donnée et de ce que vous êtes censé faire avec cela.

Si vous utilisez une clé de substitution automatique, vous devez maintenant vous assurer que des références en double sur la même entité ne se glissent pas dans vos bases de données. Ces doublons apparaîtraient comme deux rangées ou plus avec un PK distinct (parce que cela a été autocrété), mais sinon des doublons les uns des autres.

Si vous laissez la dupliquer dans votre base de données, votre utilisation des données sera finalement en désordre.


0 commentaires

13
votes

Je suppose que presque toutes les tables auront une clé primaire - et il s'agit simplement de savoir si cette clé est constituée d'une ou de plusieurs clés naturelles ou d'une seule clé de substitution automatique à incrémentation automatique. Si vous n'utilisez pas les touches primaires, vous obtiendrez généralement beaucoup d'avantages de les utiliser sur presque toutes les tables.

Donc, voici quelques avantages et inconvénients de clés de substitution. Tout d'abord, les avantages:

  • Plus important encore: ils permettent aux clés naturelles de changer. Exemple trivial, une table de personnes devrait avoir une clé primaire de la personne_id plutôt que de Last_Name, le nom de fichier.
  • Lire les performances - Les très petits index sont plus rapides pour numériser. Cependant, ce n'est utile que si vous êtes en train de contraindre votre requête par la clé de substitution. Donc, bon pour les tables de recherche, pas si bon pour les tables primaires.
  • SIMPLICITY - s'il est nommé de manière appropriée, il facilite la technologie de la base de données.
  • Capacité - Si vous concevez quelque chose comme une table d'information sur l'entrepôt de données - Les clés de substitution de votre dimensions vous permettent de conserver une table de fait très étroite - qui entraîne des améliorations d'énormes capacités.

    et inconvénient:

    • Ils n'empêchent pas les doublons des valeurs naturelles. Donc, vous voudrez toujours généralement une contrainte unique (index) sur la clé logique.
    • Ecrire des performances. Avec un index supplémentaire, vous allez ralentir les inserts, les mises à jour et la supprime beaucoup plus.
    • SIMPLICITY - Pour les petites tables de données qui ne changent presque jamais, elles ne sont pas nécessaires. Par exemple, si vous avez besoin d'une liste de pays, vous pouvez utiliser la liste ISO des pays. Cela inclut des abréviations significatives. C'est mieux qu'une clé de substitution, car elle est à la fois petite et utile.

      En général, les touches de substitution sont utiles, gardez simplement à l'esprit les inconvénients et n'hésitez pas à utiliser des clés naturelles le cas échéant.


0 commentaires

2
votes

Avoir des touches principales d'autocramentation peut vous permettre de changer de couches orm à l'avenir et ne coûte pas beaucoup de coût (en supposant que vous conserviez vos clés uniques logiques).


2 commentaires

Pourquoi voudriez-vous changer d'ormes si vous avez décidé d'être abstraire à votre base de données? Vous utilisez sûrement des ormes pour masquer la base de données, alors pourquoi ne pas utiliser les Procs stockés si vous allez à Chabge Orms ...


Si vous deviez écrire une extrémité frontale supplémentaire sur une plate-forme différente (par exemple, sur un smartphone) qui n'avait pas votre précédent orm disponible comme choix.



0
votes

L'approche la plus simple consiste à utiliser toujours des touches de substitution qui sont incrémentées automatiquement par la DB ou via un orj. Et sur chaque table. En effet, il s'agit de la méthode généralement à jeun de jointures et de l'apprentissage de la base de données extrêmement simple, c'est-à-dire. Aucun de cela de ce que ma clé est ma clé pour une baisse de table, car ils utilisent tous le même type de clé. Oui, ils peuvent être plus lents mais en vérité, la partie la plus importante du design est une chose qui ne brise pas au fil du temps. Ceci est prouvé pour les clés de substitution. N'oubliez pas que la maintenance du système arrive beaucoup plus longtemps que le développement. Planifier un système pouvant être maintenu. En outre, avec le matériel actuel, la perte de performance potentielle est vraiment négligable.


0 commentaires

3
votes

Je ne suis pas un fan de clés primaires d'incrémentation automatique sur chaque table. Les idées que celles-ci vous donnent des jointures rapides et des inserts de rangée rapides ne sont vraiment pas vraies. Ma compagnie appelle cette pensée de viande de viande après l'histoire de la femme qui a toujours coupé les extrémités de sa viande de viande, juste parce que sa mère l'a toujours fait. Sa mère ne l'a fait que parce que la casserole était trop courte - la tradition continue même si la raison n'existe plus.

  • Lorsque la table de conduite d'une jointure a une touche auto-incrémente, la table jointe ne devrait souvent pas être car elle doit avoir le FK à la table de conduite. C'est le même type de colonne, mais pas auto-incrément. Vous pouvez utiliser le FK comme pk ou partie d'un PK composite.

  • Ajout d'une clé auto-incrémentation d'une table avec une clé unique naturellement unique ne fera pas toujours accélérer les choses - comment peut-il? Vous ajoutez plus de travail en maintenant un index supplémentaire. Si vous n'utilisez jamais la touche Auto-Incrément, il s'agit d'un effort totalement gaspillé.

  • Il est très difficile de prédire les performances d'optimisation - et impossible de prédire les performances futures. Sur certaines bases de données, des index compressés ou en clusters diminueront les coûts de PKS naturellement uniques. Sur certaines bases de données parallèles, des touches d'incrémentation automatique sont négociées entre les nœuds et qui augmente le coût de l'incrément automatique. Vous ne pouvez découvrir que par profilage, et il est vraiment nulle d'avoir à modifier la politique de l'entreprise juste pour modifier la manière dont vous créez une table.


4 commentaires

Bien. Je n'utiliserais pas le FK comme pk. Ensuite, ce ne serait plus un FK. J'utiliserais un incrémentation automatique PK sur la table de conduite et la table secondaire. Index numérique PKS plus rapide même s'il existe un candidat à une clé de Varcharne naturelle, déjà présente. Les incréments automatiques maintiennent une meilleure intégrité des données. Les incréments automatiques découplent également la clé de toute logique commerciale, ce qui rend le schéma plus adaptable.


FKS peut certainement être des PKS aussi. Voir Stackoverflow.com/questions/17636106/... . Les PKS numériques peuvent ne pas indexer plus rapidement - c'est un détail de mise en œuvre de la DB. Les incréments automatiques ne maintiennent pas l'intégrité des données mieux que d'autres types de clés; Lorsque vous avez l'incrémentation automatique des PKS, vous aurez presque toujours besoin de contraintes supplémentaires. Je conviens qu'ils peuvent découpler la clé des règles de l'entreprise afin qu'il puisse vous donner une solution lorsque l'entreprise décide soudainement une clé primaire doit être modifiée. Il ne vaut rien de la peine d'adopter "toujours l'incrément automatique" pour ce bonus.


Ce que je veux dire, c'est qu'un PK doit être unique. Un PK & A FK peut être utilisé pour rejoindre une table, de sorte que vous auriez pu: corriger: Tbluser: PK user_id Auto incrément Tblanceacher pk Tetrd_id Incrément automatique FK user_id incorrect: Tbluser: PK User_Id Auto incrément tbleacher pk TECHNETER_IDE AUTO AUTO INTRÉMENTEMENT AUTO


Un incrément automatique garantit qu'un PK est non seulement unique dans l'état actuel de la table, mais tout au long de l'histoire de cette table. Cela empêche le recyclage clé.



0
votes

Considérez ceci:

Un enregistrement est supprimé dans une table qui a une relation avec une autre table. L'enregistrement correspondant dans la deuxième table ne peut pas être supprimé pour des raisons d'audit. Cet enregistrement devient orphelin de la première table. Si un nouvel enregistrement est inséré dans la première table, une clé primaire séquentielle est utilisée, cet enregistrement est maintenant lié à l'orphelin. Évidemment, c'est mauvais. En utilisant un PK incrémenté automatique, un identifiant qui n'a jamais été utilisé auparavant est toujours garanti. Cela signifie que les orphelins restent des orphelins, ce qui est correct.

Je n'utiliserais jamais les clés naturelles comme une pk. Un pk numérique, comme un incrément automatique, est le choix idéal de la majorité du temps, car il peut être indexé efficacement. Les incréments automatiques sont garantis pour être uniques, même lorsque des enregistrements sont supprimés, créant des relations de données de confiance.


0 commentaires