Quels sont les critères de conception pour les clés primaires?
Choix des clés primaires, candidat clés et les clés étrangères qui les utilisent est d'une importance vitale de la base de données des tâches de conception -- autant de l'art que de la science. La tâche de conception très spécifique de critères de conception.
Quels sont les critères?
Si c'est les devoirs, veuillez nous en informer et d'expliquer la façon dont vous vous approchez le problème et ce qui, exactement, vous êtes coincé sur.
De la stabilité, de la familiarité et de la taille sont les trois principaux critères de conception pour les clés. Je suis en désaccord avec la suggestion que cette question soit fermé. La question est simple et clair.
Je downvoted exactement 2 réponses (1 à cette question et 1 de l'autre), contrastant avec l'46 upvotes j'ai donné. Je downvoted à la fois parce qu'ils n'étaient pas seulement les pauvres, mais monumentale de désinformer. Dans un cas, le pire des pièces ont été résolus et j'ai enlevé mon downvote-même si, la réponse reste un pauvre. Est-ce pas le moyen standard d'utiliser les downvotes? jusqu'à présent, il semble comme SI les gens ont beaucoup plus besoin de mon aide que vice versa. Il d'abord regardé comme je risque de me divertir et de donner un peu de retour, mais les apparences trompent. Il me semble avoir épuisé l'offre d'intéressantes questions.
Pourquoi cette question a rouvert? Pour moi, c'est clairement un cas de quelqu'un qui veut de l'attention et essayer de l'obtenir en mettant en place une énorme récompense sur une question qui n'a pas une seule "bonne" réponse, et qui semble être conçue uniquement pour lui permettre de montrer combien ils sont intelligents (ou pensent qu'ils sont)?
Alors que vous les gars ont été blathering pendant des jours sur ce ésotérisme, j'ai simplement utilisé un auto-incrément entier et a obtenu avec mon travail... 😉
De la stabilité, de la familiarité et de la taille sont les trois principaux critères de conception pour les clés. Je suis en désaccord avec la suggestion que cette question soit fermé. La question est simple et clair.
Je downvoted exactement 2 réponses (1 à cette question et 1 de l'autre), contrastant avec l'46 upvotes j'ai donné. Je downvoted à la fois parce qu'ils n'étaient pas seulement les pauvres, mais monumentale de désinformer. Dans un cas, le pire des pièces ont été résolus et j'ai enlevé mon downvote-même si, la réponse reste un pauvre. Est-ce pas le moyen standard d'utiliser les downvotes? jusqu'à présent, il semble comme SI les gens ont beaucoup plus besoin de mon aide que vice versa. Il d'abord regardé comme je risque de me divertir et de donner un peu de retour, mais les apparences trompent. Il me semble avoir épuisé l'offre d'intéressantes questions.
Pourquoi cette question a rouvert? Pour moi, c'est clairement un cas de quelqu'un qui veut de l'attention et essayer de l'obtenir en mettant en place une énorme récompense sur une question qui n'a pas une seule "bonne" réponse, et qui semble être conçue uniquement pour lui permettre de montrer combien ils sont intelligents (ou pensent qu'ils sont)?
Alors que vous les gars ont été blathering pendant des jours sur ce ésotérisme, j'ai simplement utilisé un auto-incrément entier et a obtenu avec mon travail... 😉
OriginalL'auteur bbadour | 2010-09-03
Vous devez vous connecter pour publier un commentaire.
Les critères pour l'examen d'une clé primaire sont:
OriginalL'auteur BradC
Ce qui est une Clé Primaire?
La clé primaire est quelque chose qui identifie de manière unique une ligne/enregistrement de données. Il peut aussi y avoir plusieurs colonnes, qui est appelé un composite.
Capacité à Changer de
Parce que la clé primaire est souvent utilisé pour les étrangers références, elle doit être aussi stable que possible. Toutes les données dans la base de données est mutable, en fournissant quelqu'un se connecte avec un compte qui possède des privilèges appropriés. C'est pourquoi les bases de données offrent la possibilité de définir CASCADE on DELETE et CASCADE on UPDATE--sync référentielle dépendances sans avoir à désactiver les contraintes.
Naturelle ou Artificielle/mère Porteuse?
Idéalement, vous voulez une clé naturelle. Une clé naturelle de l'existence de données qui identifie de manière unique l'entité que vous êtes à la modélisation. Par exemple, les abréviations des états des états-unis est une bonne clé naturelle parce que l'abréviation est cohérent et tout le monde les connaît:
N'essayez pas trop dur de trouver une clé naturelle. Ils existent rarement. Il est peu probable qu'un État AMÉRICAIN du nom devrait changer, mais c'est plausible.
De façon réaliste, les clés primaires sera généralement artificielle (souvent générés par les fonctionnalités de base de données). Ce sont typiquement des nombres ou Guid, et ils sont considérés comme artificielle parce que sur leur propre - il n'y a rien à raconter leur valeur à l'information qu'ils identifient de manière unique. Un reçu de vente est toujours compté, car il n'y a rien de naturel et c'est aussi pour l'audit des lacunes dans la réception des numéros de soulever des soupçons. Pour démontrer comment l'arbitraire de numérotation est, voici l'état de la table, mais à l'aide d'un entier dans la colonne de clé primaire, US_STATE_CODE:
Il n'y a pas d'obligation de commencer avec la valeur; certains magasins de l'utiliser comme une mesure de sécurité pour contrecarrer l'injection SQL. La valeur est séquentiel basé sur le classement alphabétique de la commande du nom de l'État, mais qui ne peut pas être garanti. Mais à la différence de la clé naturelle, si l'état le nom a été changé - une seule colonne devrait être mis à jour.
Seule Colonne vs Composite
Idéalement une colonne de la clé primaire, mais de prendre la décision sur la base des données à la main-ne pas associer des colonnes, juste pour le plaisir d'avoir une seule colonne. Si vous ne chausse-pied de données, utiliser un caractère pour séparer les données facilement (bien que les opérations à effectuer ce ne sera pas en mesure de profiter d'un indice si présent).
Performance
À partir d'un point de vue des performances, les entiers sont les meilleurs parce qu'ils offrent une gamme décente de valeurs et le nombre d'octets utilisés est faible lorsque vous vous comparez à d'VARCHAR de cinq ou plus de caractères.
C'est la première leçon avec des clés primaires - avez-vous un produit naturel de valeur qui identifie de manière unique un enregistrement? Si la réponse est non, vous devez utiliser une valeur artificielle (entier, GUID).
Si vous allez utiliser des clés naturelles, être très prudent que vous en choisir un qui est statique. Les numéros de téléphone peuvent être uniques, mais ils peuvent aussi être changés. De même, une entreprise peut changer leur ID d'employé format. Même SSNs peut être modifié ou dupliqué (dans de rares cas). Abréviations d'état pourrait être raisonnable de clé primaire aussi longtemps que vous êtes en utilisant comme clé primaire, pas pour l'affichage, puisque la capitalisation des conventions peuvent changer.
Je ne sais pas pourquoi vous supposez que je suis combative, ou pourquoi vous assumez je n'arrive pas à saisir quelque chose. Peut-être que vous projetez vos propres défauts sur moi? Dans mon exemple corrigé, le 1er tuple suit la règle de toujours à l'aide d'une clé de substitution, et le 2e tuple fait l'efficacité de la conception des compromis. Pouvez-vous dire ce 745 signifie en la regardant? Ce n'3296013 atteindre qui n'a pas été déjà réalisé par 840082470, qui se trouve être la clé primaire de mon dossier scolaire à tout ou chaque établissement d'enseignement postsecondaire au Canada. Un bon design est correct, élégant et utile. Je soutiens le 1er exemple tuple échoue sur les 2 chefs d'accusation.
Si on avait donné un clair, raisonnable, juste et utile de la réponse, j'aurais marqué la réponse. Vous n'avez pas. Si je ne peux pas extraire n'importe quelle sens de ce que vous écrivez, je ne peut raisonnablement répondre. Je pense que ceux qui pensent qu'ils extraite raisonnable sens de ce que vous avez écrit, simplement projeté leurs propres hypothèses sur cela pour combler les lacunes. Vous appeler qui attaquent votre réponse, et j'appelle ça honnêtement admettre mes propres limites.
OriginalL'auteur OMG Ponies
Conception de base de données commence avec un modèle conceptuel des données (comme un diagramme entité-relation) et se termine avec un schéma de base de données ou des schémas. Les entités sont mappées à des tables; dans ce processus, une entité peut être divisé en plusieurs tables, plusieurs entités peuvent être fusionnés en un seul tableau et de nouvelles tables peuvent survenir (par exemple, à l'intersection des tables de mettre en œuvre plusieurs-à-plusieurs liens).
Dans une disquette de réparation d'urgence des entités clés primaires. Ce sont des clés naturelles, c'est qu'ils sont des attributs de l'entité. Pour une PERSONNE, une entité, il pourrait être SocialSecurityNumber. Pour une entité d'ORDRE si peut-être OrderRef Pour une FACTURE de l'entité, il peut être InvoiceNo. Dans le premier cas, c'est une vraie vie de l'identificateur; dans le second cas, c'est une clé à puce dans un laid format (2010/DEF/000023 ); dans le troisième cas, c'est une façon monotone nombre d'incrémentation parce que c'est ce que l'actuel système basé sur le papier utilise.
Naturel touches peuvent être fantaisiste. Une fois, j'ai travaillé sur une conception de base de données où l'analyste a spécifié le CLIENT entité avec une clé de (prénom, Nom, Adresse, Sexe, DateOfBirth, DistinguishingCharacteristics) sur la base que les deux individus du même nom, date de naissance et le sexe pourrait vivre à la même adresse.
Les caractéristiques d'une entité de la clé primaire sont:
Quand il s'agit de clés primaires pour les tables de base de données, des clés naturelles ne sont pas toujours adaptés.
Il y a beaucoup de raisons de ne pas utiliser le SSN comme une physique de la clé primaire. Protection des données personnelles d'un citoyen est en fait le plus important, mais c'est aussi le cas d'une personne peut changer. Clés primaires doivent être invariable.
Smart touches sont muets. Ils sont en fait composé de touches compressé dans une seule colonne. Ils sont mieux représentés comme des colonnes séparées, pas moins parce que c'est une obligation fréquente de recherche sur un seul des éléments de la clé. Aussi, le format de ces touches peut changer.
En général composé de touches sont une douleur comme clés primaires parce que nous avons de mise en cascade de plusieurs colonnes de clés étrangères. Cette situation est exacerbée lorsque l'enfant est la clé primaire est définie comme un numéro de série à l'intérieur de la mère de la clé primaire. Il existe des systèmes qui tables dépendantes hérite d'un neuf-colonne de clé étrangère d'un parent lorsqu'ils ont un peu de deux colonnes de données qui leur est propre. Parfois, ce genre d'héritage peut être utile, mais la plupart du temps c'est juste une dispute.
Les caractéristiques d'une entité de la clé primaire sont:
Donc, à moins que la clé candidate est un sens de l'identificateur (comme InvoiceNo) une table doit avoir une synthèse de la clé (AKA clé de substitution). Ce peut être une façon monotone nombre d'incrémentation ou un GUID en fonction de vos besoins. Concernant l'intersection de tables, si ils n'ont pas d'autres attributs ou des tables dépendantes il n'y a pas de valeur en remplaçant le composé de la clé primaire (AKA clé composite) avec un synthétique.
Est le point crucial: nous avons encore appliquer le candidat clés. Cela signifie que l'application de contraintes UNIQUES sur les colonnes - SSN , OrderRef - dans la table parent. C'est parce qu'un synthétique clé identifie de manière unique une ligne dans une table, il n'a pas d'identifier de manière unique les données.
Ce qui concerne la familiarité
Familiarité est bouclé. C'est un facteur important quand il s'agit pour nous d'identifier les clés primaires dans un modèle conceptuel des données, mais il est moins utile lorsqu'il s'agit de conception de base de données.
Dans un commnet @bbadour fournit deux exemples contrastés:
et pose la question suivante:
"Ce n'3296013 atteindre qui n'a pas été déjà réalisé par 840082470, qui se trouve être la clé primaire de mon dossier scolaire à tout ou chaque établissement d'enseignement postsecondaire au Canada."
Bien, 840082470 est comme un numéro de facture. De même, c'est un sens de la chaîne de chiffres. Si le système que nous concevons, appartient au domaine de l'enseignement supérieur Canadien, alors il est certainement acceptable comme une clé candidate. Cependant, parce qu'il est l'un des principaux apparemment possédé par un autre système central (pardonnez-moi de ne pas comprendre le système universitaire Canadien), il est ouvert à certaines objections à l'encontre de SSN comme clé primaire. Nous sommes tributaires de l'extérieur du système pour s'assurer de l'unicité, de garantir la stabilité et la vérification de l'identité.
Comme pour 745 contre PE,CA, qui est clairement faux. La société Canadienne des postes (abréviation de "Prince Edward Island" et de la norme ISO digraphe "Canada" identifier deux pièces distinctes de l'information et de dériver à partir de différentes sources, de sorte qu'ils devraient être représentées par deux colonnes séparées. Mais concentrons-nous sur si 745 ou PE qui fait la meilleure de la clé primaire.
Première chose, la base de données n'est pas en charge le type de données que nous utilisons pour le code de représenter "l'Île du Prince-Édouard". Il veut juste de la garantie de l'unicité.
Deuxième chose, l'utilisateur face partie du système est susceptible d'afficher la pleine expansion "Prince Edward Island", auquel cas l'application aura besoin pour exécuter une recherche de toute façon. C'est parce que les utilisateurs d'un système qui contient également les adresses de le pays du Pérou ou de l'état de Californie appréciera la clarté de l'étendue de noms[1]. Certes, si nous allons au-delà des quelques cas (comme les abréviations d'état) la demande doit toujours élargir les codes lors de l'affichage pour les utilisateurs.
Donc le seul avantage de l'utilisation de PE plutôt que 745 est qu'il fait des requêtes ad hoc plus facile.
Troisième chose, si le code d'extension des changements que nous voulions distinguer les enregistrements qui utilisent la version la plus récente. C'est beaucoup plus facile si
745='Prince Edward Island'
et746='Prince Edward Is.'
que si nous utilisons PE en tant que clé primaire.Quatrième chose, il y a des considérations de programmation. Par exemple, si les développeurs de l'application ont à fournir des listes déroulantes à l'aide de Java Énumérations ils ont besoin de codes numériques.
En bref, la connaissance naturelle, des touches n'est pas aussi utile que la pratique de la substitution de clés.
[1] les Canadiens savent que CA représente le Canada. Mais ne MO stand pour le Maroc, Monaco, la république de Moldova, Mongolie, Monténégro ou de Montserrat? En fait aucun d'entre eux: c'est Macao.
Juste assez, cependant, je ne vois pas ce que les clés ont à voir avec la physique. Il semble que vous inclure "d'identification unique", "invariable", pas "composé". Pas les mots que j'utiliserais, mais certainement 3 critères de conception. Je me suis un peu amusé qui vous correspondent le dessin ER diagrammes logiques de modélisation. Vous semblez dire "physicalizing" implique à la fois des clés primaires et étrangères. Je ne vois pas ce qui a à voir avec le physique.
Je me suis amusée à cause de l'ERM est une méthodologie de l'analyse conceptuelle est NIAM, par exemple. ERD est un langage graphique utilisé pour l'analyse conceptuelle, comme ORM, par exemple. Rien de tout cela n'a vraiment rien à voir avec conception logique; bien que, des outils pour la disquette de réparation d'urgence et de l'ORM souvent flou les choses en proposant des fonctionnalités pour automatiser les grandes parties de la logique de conception. Je downvoted votre réponse pour la confusion parmi les plus fondamentales de vocabulaire en ELLE comme en témoigne l'ISO/CEI 2382 standard vocabulaires.
Vous fixe certaines des plus flagrantes bits, j'ai donc enlevé mon downvote. Merci!!!!
C'est rare, mais il y a également eu des cas de double du SSN (je suppose que l'administration de la sécurité sociale fixe à un certain point tout de même)
OriginalL'auteur APC
Une Clé Primaire est une clé qui identifie de manière unique une entité. Lorsque vous faites le choix d'une clé primaire, le meilleur choix est presque toujours une clé de substitution qui n'a absolument rien à voir avec l'entité à tous les autres que l'identification unique.
Et c'est tout. Il y a des soi-disant rares cas où une clé primaire peut être une clé naturelle, mais je n'ai jamais vu un valide.
La plupart d'entre nous utilisent un 32-bit auto-incrément entier comme une clé primaire. Un autre excellent choix (dans certaines circonstances) est un UUID.
Si vous pensez que l'unicité est le seul critère. Est-ce exact?
Si votre réponse est "Le seul critère de choix d'une bonne clé primaire de l'unicité", pourquoi ne pas vous dire que dans votre réponse, au lieu de la coller dans une définition de quelque part d'autre?
OriginalL'auteur Randolpho
Une clé candidate est un ensemble d'attributs qui sont irréductiblement unique (irréductible sens qu'aucun attribut ne peut être retiré de la clé sans perdre l'unicité de la propriété).
D'autres critères dans le choix de ce candidat clés à mettre en œuvre sont: la simplicité, la stabilité, la familiarité.
Ces trois critères sont importants, mais pas nécessairement les attributs essentiels d'une clé. Par exemple, il peut être souhaitable et tout à fait raisonnable d'appliquer une clé qui peut changer souvent. par exemple: un nom d'utilisateur doit être unique, mais l'utilisateur peut le modifier à volonté tant qu'il reste unique.
Une clé primaire est une clé candidate.
OriginalL'auteur nvogel
Hey. il est ouvert à nouveau. Va ici.
(1) Choisir le bon candidat clés.
Qu'elle ne concerne pas le concepteur de base de données pour choisir le candidat clés.
Le concepteur de base de données a la responsabilité de voir à ce que tous les
l'unicité des exigences qu'il est informé par l'utilisateur, sera appliquée.
C'est donc l'utilisateur qui "choisit" ce que le candidat touches sont.
Il y a deux scénario, je pense que vous détendre, ce sans équivoque
position un peu.
Est de savoir si l'utilisateur dit que certains d'attribut de type "vidéo" ou "audio" (ou
certains de ces) est unique. Il peut être impossible de la respecter
et en plus il est de la responsabilité du concepteur de le signaler à l'
utilisateur (comme il est également de sa responsabilité de signaler que "l'unicité" de
le contenu audio et vidéo est très discutable sujet, et que tout
l'unicité sur ces valeurs d'attribut, même si applicable par le système,
a encore une bonne chance de ne pas être la même singularité que l'utilisateur
veut).
Seconde est de savoir comment l'image devient brouillé par la possibilité de distinctes
logique conceptions portant sur le même problème. Si D1 et D2 sont deux
valide conceptions portant sur le même problème, alors il pourrait être le cas que
un certain compte tenu de l'unicité de la règle imposée par l'utilisateur, est applicable à l'aide de
clés en D1, mais pas en D2. De ce point de vue, "le choix de candidat
les touches" peut être interprété comme "le choix d'un design particulier, tel qu'un
compte tenu de l'unicité de la règle est applicable à l'aide des touches". Mais ce n'était pas vraiment
la question que vous avez posée.
(2) Choisir les bonnes clés primaires.
Il y a un moment, Darwen lancé à la question "Quelles sont les bonnes raisons pour unique
un candidat en particulier parmi les autres comme "primaire"?".
Rien n'est sorti, à l'exception peut-être : "à croire que c'
clé particulier est préféré à utiliser chaque fois qu'en faisant référence à la
cette relvar". Je soupçonne qu'ils ne l'ai pas trouvé qui vaille la peine de changer
leur décision antérieure que "aucune touche n'est plus unique que les autres".
Mais, en supposant que, néanmoins, il existe une raison valable pour unique
une touche particulière comme "primaires", je suppose que le suivant
considérations s'appliquent :
par exemple, la clé de cluster dans la conception physique.
la valeur de certains de clé primaire. Des valeurs clés qui sont très stables
sera préférable par rapport à des valeurs de clés qui sont les plus volatils.
leurs opérations quotidiennes.
significativement différents, ce qui a le plus petit de codage de taille.
Je suis d'accord que le choix d'une clé primaire désigne simplement une clé candidate préférée pour les clés étrangères des références. Cependant, même si l'on a éliminé le nom de "clé primaire" tout à fait, les concepteurs doivent encore choisir de clé candidate de se propager dans une autre relation à des fins de référence. Si les utilisateurs à identifier un très référencé relation instable, clé composite, avez-vous l'intention d'insinuer que le concepteur n'a pas à choisir un supplément de simple, stable clé? Ou à l'aide de simple, stable clés pour le référencement de la relation? Votre clé candidate article semble dire que.
OriginalL'auteur Erwin Smout
Votre réponse à Erwin:
"Je suis d'accord que le choix d'une clé primaire désigne simplement une clé candidate préférée pour les clés étrangères des références. Cependant, même si l'on a éliminé le nom de "clé primaire" tout à fait, les concepteurs doivent encore choisir de clé candidate de se propager dans une autre relation à des fins de référence. Si les utilisateurs à identifier un très référencé relation instable, clé composite, avez-vous l'intention d'insinuer que le concepteur n'a pas à choisir un supplément de simple, stable clé? Ou à l'aide de simple, stable clés pour le référencement de la relation? Votre clé candidate article semble dire que. – bbadour 8 heures "
Votre question initiale a été sujet de "les clés primaires'. Vous pouvez maintenant changer votre focus à clés et les clés étrangères. Une clé est une contrainte d'intégrité, de sorte que les seuls critères sont qu'un ensemble minimal d'attributs doit être unique dans une relation (l'unicité et de l'irréductibilité). Si nous changeons notre attention sur les clés étrangères puis la simplicité, la stabilité et la connaissance sont les critères pour choisir parmi tous les candidats touches de référencé relation. Il pourrait y avoir plus de candidats touches qui remplissent des critères plus ou moins la même étendre. Si l'on regarde la familiarité, un candidat pourrait être très familier à un groupe d'utilisateurs, et pas à un autre groupe pour lequel une autre clé candidate est plus familier. Une réflexion sur les différents points de vue ou subschemas d'une base de données. Ce second groupe d'utilisateurs devraient choisir un autre candidat clés à des fins de référence (clé étrangère). Si vous insistez dans "les clés primaires" dont nous n'avons qu'une par rapport puis-je demander ce que fait une clé primaire de plus que les autres.
Je pense que le terme de clé primaire ne doit pas être utilisé. Au moins au niveau logique. Aussi le terme de "clés étrangères" n'est pas bien choisi (clés étrangères ne sont pas des touches, mais les références).
Donc, je pense que les remarques de Erwin sur "principal" clés ont été très au point. Ou au moins, c'est mon interprétation de ce qu'il veut dire.
Êtes-vous d'accord avec cela?
Si oui, voudriez-vous changer votre original question "Quels sont les critères de conception pour les clés et quels sont les critères pour choisir une clé étrangère de la disposition des candidats les clés?"?
Si non, pourquoi?
Ce qui concerne,
Carlos
Les deux Erwin de réponse et de votre réponse sont assez bon pour obtenir un vote de moi, mais aucun ne répond à la question directement assez, assez clairement ou élaboré assez pour justifier de la bounty. Alors que votre réponse est la 1ère pleinement énumérer les critères de conception, il le fait comme un de côté tout en coupant les cheveux en quatre la question au lieu d'y répondre. Non, je ne vais pas modifier la question, pour 2 raisons principales: 1) la brièveté et 2) de clarté.
Ma réponse était aussi à propos de "logique" conception de base de données. Et je pense que nous ne devrions pas parler de clés étrangères référençant les clés primaires mais candidat clés. Je pense que j'ai été clair à ce sujet. En aparté: le candidat à quoi? pour devenir primaire? Laisse tomber le "candidat" chose aussi: il suffit de les ‘clés’. J'ai dû demander ce que fait une clé primaire primaire de plus que les autres. J'ai aussi expliqué que les critères sont différents pour déterminer si un ensemble d'attributs doit être une clé et pour le choix d'une clé étrangère. Bottom line: parler de "primaire" clés " est problématique.
Même si vous ne modifiez pas votre question, seriez-vous d'accord que ma reformulation (en essayant d'oublier le "principal" clés) de votre question est moins problématique? En aparté: Ce n'était pas mon intention de donner un élaboré réponse (je ne suis pas de faire ses devoirs ici) ou d'obtenir une prime. Si je comprends et je suis d'être compris, je suis heureux.
Non, je ne serais pas d'accord. Une clé candidate est un candidat pour le référencement. Une clé primaire fournit des conseils sur la meilleure façon de faire référence à une relation. Je ne trouve pas ma question problématique. J'espère que quelqu'un de motivé pour répondre à une question seraient motivés à fournir le meilleur de leurs réponse quel que soit incitatif. ::haussement d'épaules::
OriginalL'auteur Carlos M. Calvelo
Une clé primaire est une clé candidate choisi pour un traitement spécial, de sorte que nous devons d'abord regarder les propriétés de candidat clés. Un ensemble d'une ou de plusieurs colonnes est une clé candidate si elle a les deux propriétés suivantes:
Unicité: Une clé candidate doit identifier de manière unique chaque ligne dans un tableau. Aucune table ne peut contenir deux lignes avec la même valeur pour la clé candidate.
Irreducability: la Suppression de la colonne à partir d'une clé candidate doit violer les uniqness de la propriété. En d'autres termes, aucun sous-ensemble de colonnes d'une clé candidate est lui-même une clé candidate.
Si aucun candidat n'existe, et parfois même si on n', une clé de substitution est souvent créés à l'aide d'un auto-incrémentation colonne de type integer, ou à l'aide d'une autre technique. Cette clé de substitution est maintenant aussi une clé candidate.
Il est souvent utile de choisir parmi les candidats les touches et pour désigner l'un d'entre eux en tant que clé primaire. Le premier critère souvent appliquée est la simplicité indiquant la clé candidate avec le moins de colonnes. Cependant, il existe d'autres critères éventuels, comme la familiarité, familière valeurs étant plus utiles que les non-valeurs familières, et de la stabilité, stable touches d'être moins problématiques que les touches qui sont susceptibles d'évoluer. Ces critères sont cependant strictlty en dehors de la portée du modèle relationnel, souvent en conflit les uns avec les autres, et sont souvent amenés à traiter avec des contraintes de mise en œuvre.
Je dirais que les deux premiers concepts de "l'unicité" et "irreducability" sont moins des critères de conception que les propriétés fondamentales des clés primaires, tandis que les derniers concepts de la "simplicité", "connaissance" et la "stabilité" sont plus correctement étiquetés critères de conception, car ils impliquent des compromis et de la subjectivité.
Pourquoi choisir une clé primaire? La simplicité et la familiarité sont pas les seuls critères pour le choix des candididate touches, mais pourquoi devrions-nous choisir une clé primaire. Si il y a plusieurs candidats clés dans une table, il simplifys choses si toutes les touches de pointage pour que le tableau se réfèrent à la même clé candidate. En outre, l'acte de choisir une clé candidate aidera à faire connaître.
OriginalL'auteur Paul Mansour
Un
PRIMARY KEY
est quelque chose qui va définir l'entité, seule l'entité et de rien, mais l'entité.Vous pouvez le prendre à partir du monde extérieur. Dire, un catalogue d'étoiles nombre d'identifier une étoile (bon exemple), ou un
SSN
d'identifier une personne (mauvais exemple).Dans ce cas, vous pouvez compter sur le monde extérieur.
SSN
? (Ils ne le font pas).SSN
's uniques? (Ils ne le sont pas).SSN
être attribué à une autre personne? (Il peut).Vous pouvez générer à l'intérieur de votre modèle, à l'aide de
AUTOINCREMENT
ouGUIDs
ou quoi que ce soit.Dans ce cas, vous comptez sur vous-même et votre base de données de compétences.
ID
? (Oui, ils le font, sinon ils ne seraient pas dans la table avecID NOT NULL
).ID's
unique? (Oui, ils le sont, lePRIMARY KEY
contrainte prend soin d'elle).Ou un autre ensemble de réponses:
ID
? (Non, ils ne le font pas, les gens, la table a été accidentellement laissé tomber, même si certains autres informations conservées).ID's
unique? (Non, nous n'avons pas réussi à fusionner les deux versions de la base de données correctement).AUTOINCREMENT
par erreur).La chose la plus importante est qu'une clé de substitution est une fête qui est toujours avec vous. Vous pouvez toujours créer une clé de substitution: rien sur Terre ne peut vous empêcher de déclarer un
AUTOINCREMENT
champ. Mais de loin pas toutes les choses ont une sorte d'identifiant tout le monde est d'accord sur.Cependant, un bon naturel clé ne peut pas être surestimée.
Guide Star Catalog
de la base de données est probablement sauvegardés de façon plus fiable que la vôtre, et la liste desUS
des codes d'état, vous pouvez toujours restaurer à droite de la mémoire.OriginalL'auteur Quassnoi
Une seule vraiment, choisir une mère porteuse pour chaque table (identité/auto_number) ou quelque chose de similaire que les utilisateurs ne seront jamais à même de voir si vous pouvez faire tout ce qui est nécessaire, avec eux quand vous en avez besoin maintenant et dans l'avenir.
Il dépend dont les critères que vous consultez. Clés primaires doivent être à l'intérieur d'une base de données et déterminé SANS fin de la saisie de l'utilisateur, à mon avis, pour les performances et la maintenabilité des raisons.
Je pensais que j'ai été clair, quand j'ai utilisé des mots comme "choisir", "bon", "conception de base de données", "conception" et "critères de conception". N'avais-je pas?
Votre réponse ne répond pas à la question. L'utilisation d'une clé de substitution ne permet pas d'éviter la nécessité de choisir d'autres touches.
OriginalL'auteur Tahbaza
(Pas tout à fait sûr de savoir comment interpréter cette question. Sonne comme un quiz ou quelque chose où vous êtes à la recherche pour une seule "bonne" réponse à partir d'un manuel. Je vais interpréter la question est plus pratique, d'où mon conseil ci-dessous).
Au moins dans le MS SQL monde, la discussion sur une bonne Clé Primaire est inévitablement enveloppé dans une discussion à propos de la bonne index cluster pour une table. Les deux ne sont pas ont être le même, mais ils le sont par défaut, et pour de nombreuses tables, faire les deux le même est souvent une bonne idée.
Pour les fins de notre discussion, il est important de distinguer entre les deux:
Un CLÉ PRIMAIRE est un champ ou une combinaison de champs qui identifient de manière unique une ligne.
Un INDEX CLUSTER est un champ ou une combinaison de champs qui représente l'organisation physique d'une table. (Encore une fois, je parle de MS SQL Server, vous ne savez pas comment les autres RBDS pourrait gérer ce)
Touche pour le reste de ma discussion est de savoir que depuis SQL 7.0, la clés de l'index cluster est utilisé comme identificateur de ligne pour tous les index non cluster. Cela signifie que les mêmes critères de choix d'une bonne clé de cluster sont les mêmes que pour le choix d'un bon de clé primaire.
Regardons d'abord les critères d'un bon index cluster (à Partir de Kimberly Tripp à l'excellent article de). Un index cluster doit être:
Il est aisé de voir les 3 premiers sont aussi de bons critères pour une clé primaire. #4 est un bonus qui permettront de réduire la fragmentation de la table comme les tables de croître.
Un GUID comme clé primaire, aussi populaire que qui est, en fait fails 2 de ces critères (Étroit et Croissante). En tant que tel, il n'est pas recommandé comme un PK/index Cluster dans la plupart des cas (voir Kim l'article ici)
OriginalL'auteur BradC
Je vais dire ici quelque chose qui n'est pas prévu.
Tous les trucs qu'ils enseignent dans la base de données à propos de la normalisation et des touches est tout faux quand il s'agit de choisir des clés primaires.
La clé primaire est spécial quand il s'agit de la gamme des requêtes, et pour cette raison, si vous avez une dominante gamme requête qui est votre clé primaire, pas d'exceptions.
Si votre dominante gamme de requête n'est pas sur une clé candidate, vous vous retrouvez avec une clé primaire qui n'est pas appliquée pour l'originalité! Cela est parfois appelé un index cluster, ce qui est un abus de langage car il n'y a pas d'index.
Maintenant la normalisation et candidat touches sont tous importants, et vous voulez imposer des contraintes uniques sur au moins certains d'entre eux. Mais n'attribuez pas à la clé primaire, car il est la clé naturelle. En fait, c'est plus lent que la définition d'un index et d'une contrainte unique. Définir la clé primaire basé sur les requêtes d'intervalle seulement.
Rappelez-vous, il n'y a pas de contrainte d'avoir des clés primaires. Une table sans les clés primaires est appelé un tas de table et n'a pas intrinsèque de la commande ou de la commande d'insertion intrinsèque de la commande.
EDIT: définition de la gamme de requête:
Une gamme de requête est une requête qui est une COMMANDE PAR requête ou contient soit supérieure ou inférieure à l'opérateur. Ce qui nous intéresse sont les colonnes pour lesquelles ces requêtes exécutées sur. L'idée fondamentale est une gamme de requête récupère plusieurs (dizaines à centaines de milliers, mais pas de toutes les lignes de la table selon les conditions de délimitation à l'une ou aux deux extrémités.
Il ya un autre type de requêtes de plage, et c'est là que vous avez une clé étrangère dans une autre table et une opération est de sélectionner tous les correspondants sur cette clé étrangère. C'est en fait aussi une gamme de requête bien évidemment pas.
Vous semblez être l'amalgame entre la "Clé Primaire" avec "Index Cluster". Dans Microsoft SQL Serveur il est vrai que PKs par défaut étant l'index cluster si vous ne spécifiez pas tout différents, mais ils sont tout à fait différents concepts.
Je ne peux pas encore faire beaucoup de sens de votre réponse. Il semble que vous venez de dire que quelle que soit la référence de clé étrangère est plus interrogé définit la clé primaire. Cependant, lors de la conception, on peut décider qui de plusieurs candidats touches pour se propager à une autre relation pour les fins de référencement.
vous êtes mal informé. Les clés et les index sont des concepts complètement différents. Touches et cluster index encore plus. Je ne sais pas de n'importe quel SGBD qui nécessite une clé primaire et un "index cluster" pour désigner le même ensemble de colonnes - certainement pas SQL Server. Cependant, le sujet est touches en général, ce n'est pas une question sur les limites de certaines logiciel particulier si votre réponse est hors de propos.
Joshua: à mon avis, vous sous-estimez l'importance de clés primaires régulièrement à des bases de données si vous conception sur la base de certains "dominante de la requête".
OriginalL'auteur Joshua