Pourquoi est-primaire, clé étrangère de la relation nécessaire lorsqu'on peut rejoindre sans elle?
Si nous pouvons obtenir des données de deux tables sans avoir primaire et de clé étrangère de la relation, alors pourquoi nous avons besoin de cette règle? Pouvez-vous svp m'expliquer clairement, avec des exemples appropriés?
C'est une base de données de test, n'est pas l'esprit de la mauvaise structure.
Tables de la structure:
**
table - 'test1'
columns - id,lname,fname,dob
no primary and foreign key and also not unique(without any constraints)
**
**table - 'test2'
columns- id,native_city
again, no relations and no constraints**
Je peux encore participer à ces tableaux avec les mêmes colonnes "id",
donc, si il n'y a pas de primaire clé étrangère, alors qu'est-ce que l'utilisation de ce?
- Merci de poster votre structure de la table - il faire expliquer beaucoup plus facile.
- PKs, UNIQUEs, et non PAS les valeurs Null & FKs n'ont rien à voir avec l'interrogation. Ils sont contraintes d'intégrité.
- Double Possible de Pourquoi sont-clés étrangères plus utilisé dans la théorie que dans la pratique?
Vous devez vous connecter pour publier un commentaire.
La principale raison pour les primaires et les clés étrangères est de faire respecter la cohérence des données.
Une clé primaire renforce la cohérence de l'unicité des valeurs sur une ou plusieurs colonnes. Si un ID de la colonne est une clé primaire, alors il est impossible d'avoir deux lignes avec la même valeur d'ID. Sans que la clé primaire, le nombre de lignes qui peuvent avoir la même valeur d'ID et vous ne seriez pas en mesure de les distinguer en fonction de l'ID de la valeur seul.
Une clé étrangère renforce la cohérence des données de points d'ailleurs. Il garantit que les données qui est pointé existe réellement. Dans un typique de la relation parent-enfant, une clé étrangère s'assure que chaque enfant a toujours des points à l'un des parents et que le parent existe réellement. Sans la clé étrangère vous pourriez avoir des "orphelins" les enfants de ce point à un parent qui n'existe pas.
Vous avez besoin de deux colonnes du même type, un sur chaque table, à REJOINDRE. Qu'ils soient primaires et les clés étrangères ou non n'a pas d'importance.
Vous n'avez pas besoin d'un FK, vous pouvez vous joindre à l'arbitraire des colonnes.
Mais d'avoir une clé étrangère s'assure que la jointure sera réellement réussir à trouver quelque chose.
Clé étrangère vous donner certaines garanties qui serait extrêmement difficile et source d'erreurs pour mettre en œuvre autrement.
Par exemple, si vous n'avez pas de clé étrangère, vous pouvez insérer un enregistrement de détail dans le système et juste après que vous avez vérifié que l'appariement de fiche est de présenter quelqu'un d'autre le supprime. Pour empêcher cela, vous devez verrouiller la table de maître, lorsque vous modifiez la table de détail (et vice versa). Si vous n'avez pas besoin/voulez-vous que la garantie de fixation FKs.
En fonction de votre SGBDR une clé étrangère peut également améliorer les performances de sélectionner (mais également dégrade les performances de mises à jour, des insertions et suppressions)
Je sais que sa fin de post, mais j'utilise le site pour ma propre référence et donc je voulais mettre une réponse ici pour moi de faire référence à l'avenir aussi. J'espère que vous (et d'autres) trouveront utile.
Disons un tas de super Einstein experts ont conçu notre base de données. Notre super parfait de la base de données dispose de 3 tables et les relations définies entre eux:
Dans la plupart des scénarios tels qu'une base de données simple, facile à naviguer, mais dans des bases de données commerciales, il est généralement impossible d'être en mesure de dire au stade de la conception de toutes les utilisations possibles et la combinaison d'utilisations de données, les tables et même des bases de données, d'autant que les systèmes et les autres systèmes intégrés ou de tension autour ou à l'extérieur. Ce simple fait a donné naissance à une industrie tout entière construite sur les bases de données appelée Business Intelligence. Mais je m'égare...
Dans le cas ci-dessus, la structure est tellement simple à comprendre que son facile à voir, vous pouvez vous joindre à partir de TblA, grâce à B, et C et vice versa pour obtenir ce dont vous avez besoin. Il est également très vaguement met en lumière certains des problèmes avec la faire. Maintenant étendre cette simple chaîne de 10, 20 ou 50 relations de long. Maintenant, tout d'un coup, vous commencez à imaginer un besoin exactement pour votre scénario. En termes simples, une jointure de A à C ou vice versa, ou A à F ou B à Z ou de tout ce que notre système se développe.
Il existe de nombreuses façons cela peut en effet être fait. Celui qui est mentionné ci-dessus étant le plus populaire, qui est de conduire à travers tous les liens. Le problème majeur est qu'il est très lent. Et devient progressivement plus lent le plus de tables que vous ajoutez à la chaîne, plus les tables de croître, et plus vous vous voulez aller à travers elle.
Solution 1: Rechercher un lien commun. Il doit être là si vous avez enseigné d'une raison de se joindre A à C. Si elle n'est pas évident, créer une relation et ensuite rejoindre sur elle. c'est à dire à se joindre À Une au travers de B à C, il doit y avoir quelques points communs ou votre jointure serait de produire des résultats zéro ou un nombre massif ou sur les résultats (produit Cartésien). Si vous connaissez ce point commun, il suffit d'ajouter l'colonnes A et C, et de le relier directement.
La règle pour les relations, c'est que tout simplement ils doivent avoir une raison d'exister. Rien de plus. Si vous pouvez trouver une bonne raison pour le lien de A à C, puis le faire. Mais vous devez vous assurer que votre raison n'est pas redondante (c'est à dire son déjà traités d'une autre manière).
Maintenant un mot d'avertissement. Il y a quelques pièges. Mais je ne fais pas un bon travail d'explication, donc je vous renvoie à ma source plutôt que d'en parler ici. Mais rappelez-vous, c'est entrer dans du lourd, donc cette vidéo sur le ventilateur et le gouffre de pièges est vraiment seulement un point de départ. Vous pouvez vous joindre sans relations. Mais je vous conseille de regarder cette vidéo en premier, car cela va au-delà de ce que la plupart des gens apprennent au collège, et bien sur le territoire de la BI et SAP gars. Ces gars-là, alors qu'ils peuvent, de leur journée de travail est de se spécialiser dans exactement ce genre de chose. Comment obtenir des quantités massives de données à parler les uns aux autres et de faire sens.
Cette vidéo est l'une des meilleures vidéos que j'ai trouver sur le sujet. Et il vaut la peine de regarder sur certains de ses autres vidéos. J'ai beaucoup appris de lui.
Une clé primaire n'est pas nécessaire. Une clé étrangère est pas nécessaire non plus. Vous pouvez construire une requête de joindre deux tables sur n'importe quelle colonne vous le souhaitez, aussi longtemps que les types de données correspondre ou sont convertis match. Aucune relation ne doit explicitement d'exister.
Pour ce faire, vous utilisez une jointure externe:
joindre avec la relation
Jointure SQL