Comment utiliser une jointure interne pour combiner les tables SQL pour la programmation html5and de CSS3

En tant que programmeur HTML5 et CSS3, vous pouvez utiliser jointures internes de combiner des tables SQL. Lorsque vous normaliser les bases de données, il est souvent judicieux de le diviser en plusieurs tableaux. Jetez un coup d'œil rapide à la héros

Sommaire

table.

image0.jpg

Vous avez probablement remarqué que la plupart de l'information de la mission est maintenant disparu de ce tableau, à l'exception d'un domaine important. La missionID champ est un champ de nombre entier qui contient la clé primaire de la mission table. UN clé étrangère est un champ qui contient la clé primaire d'une autre table. Les clés étrangères sont utilisés pour reconnecter les tables qui ont été anéantis par les normalisation.

Regardez la relation entre les tables de la mission et héros commence à faire sens.

image1.jpg

La mission table n'a pas un lien vers le héros. Il ne peut pas, parce que toute la mission peut être connecté à un certain nombre de héros, et vous ne pouvez pas avoir un champ de la liste.

Comment construire une jointure cartésienne et une jointure interne

Comparez le héros et mission tables, et vous voyez comment ils fonctionnent conjointement. La missionID dans le champ héros tableau identifie dont la mission est sur le héros. Aucune des données de mission réelle se trouve dans la héros champ, juste un lien à laquelle la mission du joueur est sur.

Création d'une requête avec les deux tableaux est tentant. Cette requête semble rejoindre les tables, mais il est évidemment pas fait la bonne chose. Vous avez seulement trois héros et deux missions, mais cette requête retourne six rangées! Ce qui est arrivé ici est appelé un Jointure cartésienne. Il est une combinaison de toutes les valeurs possibles de héros et de la mission, qui est de toute évidence pas ce que vous voulez.

image2.jpg

Vous ne voulez pas vraiment toutes ces valeurs à apparence que vous voulez voir seulement ceux où le héros tableau de missionID correspond à la missionID dans le champ mission table. En d'autres termes, vous voulez une requête qui dit seulement revenir les lignes où les deux valeurs de missionID sont les mêmes.

Il est presque identique à la dernière requête, sauf que cette fois, un clause indique que la clé primaire et clé étrangère doit correspondre.

image3.jpg

Cette configuration particulière (en utilisant une référence de clé étrangère à joindre deux tables) est appelé jointure interne. Parfois, vous voyez la syntaxe comme




SELECThero.name AS «héros», hero.missionID AS 'heroMID', mission.missionID AS 'missMID', mission.description AS 'mission'FROMhero INNER JOIN missionONhero.missionID = mission.missionID-

Certains des offres de base de données de Microsoft préfèrent cette syntaxe, mais il n'a pas vraiment la même chose: rejoindre deux tableaux.

L'application de l'un à de nombreuses relations

Chaque fois que votre diagramme ER indique une relation plusieurs-à-un (ou un-à-plusieurs), vous utilisez généralement une jointure interne. Voici comment faire:

  1. Commencez avec le diagramme ER.

    Pas moyen que tu vas obtenir ce droit dans votre tête! Faites un schéma. Utiliser un outil comme MySQL Workbench, un autre logiciel, papier et crayon, rouge à lèvres sur un miroir, peu importe. Vous avez besoin d'un croquis.

  2. Identifier les relations one-to-many.

    Vous pourriez avoir à parler avec des gens qui utilisent les données pour déterminer les relations sont one-to-many. Dans les données de héros, un héros peut avoir qu'une seule mission, mais chaque mission peut avoir de nombreux héros. Ainsi, le héros est le côté beaucoup, et la mission est d'un côté.

  3. Trouver la clé primaire de la table et l'un des nombreux table.

    Chaque table doit avoir une clé primaire. (Vous verrez parfois des alternatives avancées comme les clés multichamps, mais attendez jusqu'à ce que vous êtes un peu plus avancée pour ce genre de choses.)

  4. Faire une référence de clé étrangère à la même table dans la table n.

    Ajouter un champ à la table sur le côté beaucoup de la relation qui ne contient que la clé de la table d'un côté.

    Vous ne devez pas une clé étrangère dans la table d'un côté de la relation. Ce concept confond la plupart des débutants. Vous ne devez pas (ou voulez) un lien vers le nombre de table parce que vous ne savez pas combien de liens vous aurez besoin. Des liens multiples serait un champ de la liste, ce qui est exactement ce que vous essayez d'éviter.

Si les étapes précédentes sont difficiles pour vous de comprendre, penser à l'exemple de héros. Chaque héros (selon les règles de gestion) peut être sur une seule mission. Ainsi, il est logique de mettre un lien vers la mission dans le tableau de héros parce que vous avez une seule mission.

Chaque mission peut être liée à de nombreux héros, donc si vous essayez de relier les missions à des héros, vous avez énuméré les domaines dans le tableau de la mission, en violation de la première forme normale. Le résultat de cette jointure ressemble beaucoup à l'intention originale de la base de données, mais il est maintenant normalisée.

image4.jpg

De nombreux programmeurs se confondre avec cet exemple, en disant héros devraient être autorisés à aller sur de multiples missions, ou ils ne sont pas très bons héros. Voilà un excellent point, et il nous amène à l'une des questions les plus importantes dans le développement de données. Le travail du programmeur de données est de refléter les règles de gestion en place.

Les règles de gestion dans cet exemple ont été faites délibérément à simplifier expliquer les choses, de sorte que vous avez une règle de gestion en place (une mission par le héros) qui peuvent ne pas être la meilleure du point de vue "sauver le monde". Toutefois, si cela est la règle d'affaires que vous avez, votre travail consiste à mettre en œuvre.

Comment construire une vue d'encapsuler le rejoindre

La requête jointure interne est si utile, il est un endroit dandy pour une vue. Une vue d'un être créé à partir de ce:

CREATE VIEW heroMissionView ASSELECThero.name AS «héros», mission.description AS 'mission', mission.villain AS 'méchant', mission.plot AS 'héros plot'FROM, missionWHEREhero.missionID = mission.missionID-

Avoir une vue signifie que vous ne devez pas recréer la requête à chaque fois. Vous pouvez traiter la vue comme une table virtuelle pour les nouvelles requêtes:

* SELECT FROM heroMissionView-

» » » » Comment utiliser une jointure interne pour combiner les tables SQL pour la programmation html5and de CSS3