So verwenden Sie eine innere Verknüpfung SQL-Tabellen für HTML5and CSS3 Programmierung zu kombinieren

Als HTML5 und CSS3-Programmierer können Sie innere verwenden verbindet SQL-Tabellen zu kombinieren. Wenn Sie die Datenbanken zu normalisieren, ist es oft sinnvoll, sie zu brechen in mehrere Tabellen. Werfen Sie einen kurzen Blick auf die Held

Tabelle.

bild0.jpg

Sie haben wahrscheinlich bemerkt, dass die meisten der Mission Informationen nun aus dieser Tabelle, außer ein wichtiges Feld ist weg. Das missionID Feld ist ein Integer-Feld, das den Primärschlüssel der enthält Mission Tabelle. EIN Unbekannter Schlüssel ist ein Feld, das den Primärschlüssel einer anderen Tabelle enthält. Fremdschlüssel werden verwendet, Tabellen zu verbinden, die durch Normierung auseinander gebrochen wurden.

Schauen Sie sich die Beziehung zwischen der Mission und Held Tabellen beginnt Sinn zu machen.

image1.jpg

Das Mission Tabelle nicht über einen Link zurück zum Helden. Es kann nicht, weil jede Mission kann auf eine beliebige Anzahl von Helden verbunden werden, und Sie können keinen aufgelistet Feld haben.

Wie baut man ein cartesianischen verbinden und eine innere Verknüpfung

Vergleichen Sie die Held und Mission Tabellen, und Sie sehen, wie sie zusammenpassen. Das missionID Feld in der Held Tabelle zeigt, welche Mission der Held ist. Keine der tatsächlichen Missionsdaten ist in der Held Feld, nur ein Verweis auf welche Mission der Spieler auf.

eine Abfrage mit den beiden Tabellen zu erstellen ist verlockend. Diese Abfrage erscheint die Tabellen zu verknüpfen, aber es ist natürlich nicht das Richtige zu tun. Sie haben nur drei Helden und zwei Missionen, doch ist diese Abfrage gibt sechs Reihen! Was hier passiert ist, heißt ein Cartesianischen verbinden. Es ist eine Kombination aller möglichen Werte von Helden und Mission, die offensichtlich nicht das, was Sie wollen.

image2.jpg

Sie wollen nicht wirklich alle diese Werte, die Sie nur die, die sehen möchten, wo die Er- schei Held Tisch missionID Spiele bis zum missionID Feld in der Mission Tabelle. Mit anderen Worten, möchten Sie eine Abfrage, die Zeilen nur zurückgeben sagt, wo die beiden Werte von missionID sind gleich.

Es ist fast identisch mit der letzten Abfrage, außer dieser Zeit ein WOHER Klausel gibt an, dass der Fremdschlüssel und Primärschlüssel übereinstimmen sollte.

image3.jpg

Diese besondere Einrichtung (ein Fremdschlüssel-Referenz mit zwei Tabellen zu verbinden) ist ein genannt INNER JOIN. Manchmal sehen Sie die Syntax wie

SELECThero.name AS 'Held', hero.missionID AS 'heroMID', mission.missionID AS 'missMID', mission.description AS 'mission'FROMhero INNER JOIN missionONhero.missionID = mission.missionID-

Einige von Microsofts Datenbank-Angebote bevorzugen diese Syntax, aber es ist wirklich die gleiche Sache: verbinden zwei Tabellen.

Erzwingen einer Eins-zu-Viele-Beziehungen

Jedes Mal, wenn Ihr ER Diagramm, das eine viele-zu-eins zeigt (oder Eins-zu-viele) Beziehung, verwenden Sie in der Regel eine innere Verknüpfung. Hier ist, wie Sie es tun:

  1. Beginnen Sie mit dem ER-Diagramm.

    Auf keinen Fall werden Sie diese direkt in Ihrem Kopf zu bekommen! Machen Sie ein Diagramm. Verwenden Sie ein Tool wie MySQL Workbench, eine andere Software, Papier und Bleistift, Lippenstift auf einem Spiegel, was auch immer. Sie brauchen eine Skizze.

  2. Identifizieren einer Eins-zu-viele-Beziehungen.

    Sie können mit den Menschen zu reden, die diese Daten verwenden, um festzustellen, welche Beziehungen Eins-zu-viele. In den Helden Daten kann ein Held haben nur eine Mission, aber jede Mission kann viele Helden haben. Damit ist der Held der vielen Seite, und die Mission ist die eine Seite.

  3. Finden Sie den Primärschlüssel der Tabelle ein und die vielen Tabelle.

    Jede Tabelle sollte einen Primärschlüssel haben. (Sie werden manchmal erweiterte Alternativen wie Mehrfelder Tasten zu sehen, aber warten Sie, bis Sie ein wenig weiter fortgeschritten für dieses Material sind.)

  4. Machen Sie einen Fremdschlüssel Bezug auf die eine Tabelle in der viele Tabelle.

    Hinzufügen eines Feldes in der Tabelle auf der vielen Seite der Beziehung, die auf der einen Seite nur den Schlüssel zu der Tabelle enthält.

    Sie können einen Fremdschlüssel in der Tabelle auf der einen Seite der Beziehung müssen. Dieses Konzept verwirrt die meisten Anfänger. Sie brauchen nicht (oder wollen) einen Link auf die vielen Tisch zurück, weil Sie nicht wissen, wie viele Links Sie benötigen. Mehrere Links wäre ein börsennotiertes Feld sein, das ist genau das, was Sie zu vermeiden versuchen.

Wenn die vorhergehenden Schritte sind schwer für Sie zu verstehen, denken Sie zurück an den Helden Beispiel. Jeder Held (gemäß den Geschäftsregeln) kann nur auf einer Mission sein. Daher macht es Sinn, einen Link zu der Mission in dem Helden Tisch zu legen, weil Sie nur eine Mission haben.

Jede Mission kann auf viele Helden in Beziehung gesetzt werden, so dass, wenn Sie versuchen, Missionen zu Helden zu verbinden, haben Sie die Felder in der Mission Tabelle aufgelistet, die erste Normalform zu verletzen. Das Ergebnis dieser kommen sieht viel wie die ursprüngliche Absicht der Datenbank, aber jetzt ist es normalisiert.

image4.jpg

Viele Programmierer sind verwirrt mit diesem Beispiel sagen Helden auf mehrere Missionen zu gehen, erlaubt sein sollte, oder sie sind nicht sehr gut Helden. Das ist ein großer Punkt, und es bringt eine der wichtigsten Themen in Datenentwicklung auf. Die Aufgabe des Daten Programmierer ist zu spiegeln die Geschäftsregeln an Ort und Stelle.

Die Geschäftsregeln in diesem Beispiel wurden bewusst gemacht, Dinge zu vereinfachen erklären, so haben Sie eine Geschäftsregel an Ort und Stelle (eine Mission pro Held) bekam, die nicht das beste aus einer "Rettung der Welt" Perspektive sein kann. Wenn jedoch, dass die Geschäftsregel ist Sie haben, Ihre Aufgabe ist es, sie umzusetzen.

Wie ein Blick auf bauen die Verbindung zu kapseln

Die innere Join-Abfrage ist so nützlich, es ist ein Dandy Ort für einen Blick. Eine Ansicht, die ein von ihm erstellt werden:

CREATE VIEW heroMissionView ASSELECThero.name AS 'Held', mission.description AS "Mission", mission.villain AS 'Bösewicht', mission.plot AS 'plot'FROM Held, missionWHEREhero.missionID = mission.missionID-

einen Blick zu haben, bedeutet, dass Sie auf die Abfrage nicht jedes Mal neu zu erstellen. Sie können die Ansicht als eine virtuelle Tabelle für neue Abfragen behandeln:

SELECT * FROM heroMissionView-

Menü