Cómo utilizar una combinación interna para combinar las tablas de sql para la programación html5and css3

Como un programador de HTML 5 y CSS 3, puede utilizar combinaciones internas para combinar las tablas SQL. Al normalizar las bases de datos, a menudo tiene sentido para dividirla en varias mesas. Echar un vistazo rápido a la héroe mesa.

Usted probablemente ha notado que la mayor parte de la información de la misión se ha ido de esta tabla, excepto un importante campo. los missionID campo es un campo entero que contiene la clave primaria de la misión mesa. UN clave externa Es un campo que contiene la clave primaria de otra tabla. Las claves externas se utilizan para volver a conectar las tablas que se han descompuesto por la normalización.

Video: Curso Php y Mysql desde cero - Unir dos tablas con Sql Join

Examinar la relación entre las tablas de la misión y el héroe comienza a tener sentido.

los misión tabla no tiene un enlace de vuelta al héroe. No puede, porque cualquier misión puede ser conectado a cualquier número de héroes, y no se puede tener un campo de la lista.

¿Cómo construir unirse a un cartesiano y una unión interna

comparar la héroe y misión tablas, y ver cómo encajan entre sí. los missionID en el campo héroe tabla identifica que tiene como misión el héroe está encendido. Ninguno de los datos de la misión actual es en el héroe campo, sólo un enlace al que misión, el jugador está encendido.

Creación de una consulta con las dos tablas es tentador. Esta consulta aparece a unir las tablas, pero es evidente que no está haciendo lo correcto. Sólo tienes tres héroes y dos misiones, sin embargo, esta consulta devuelve seis filas! Lo que ha sucedido aquí se llama Cartesiana. Es una combinación de todos los valores posibles de héroe y de la misión, lo que obviamente no es lo que quiere.

En realidad, no desea que todos estos valores a apariencias desea ver sólo aquellos en los que la héroe mesas missionID partidos hasta el missionID en el campo misión mesa. En otras palabras, usted quiere una consulta que dice que sólo devuelve filas donde los dos valores de missionID son lo mismo.

Es casi idéntica a la última consulta, excepto que esta vez, una DÓNDE cláusula indica que la clave principal y clave externa debe coincidir.

Esta configuración particular (utilizando una referencia de clave externa para unirse dos tablas) se llama unir internamente. A veces, se ve la sintaxis como

Video: Como hacer un INNER JOIN de tablas con PHP y MySQL

SELECThero.name AS `héroe`, hero.missionID AS `heroMID`, mission.missionID AS `missMID`, mission.description AS `mission`FROMhero INNER JOIN missionONhero.missionID = mission.missionID-

Algunas de las ofertas de bases de datos de Microsoft prefieren esta sintaxis, pero lo que realmente hace lo mismo: se unen dos tablas.

La aplicación de uno-a-muchos

Cada vez que su diagrama ER indica una relación muchos-a-uno (o uno-a-muchos), se utiliza generalmente una combinación interna. He aquí cómo se hace:

  1. Comience con el diagrama de ER.

    De ninguna manera vas a conseguir este derecho en la cabeza! Hacer un diagrama. Utilizar una herramienta como MySQL Workbench, algún otro software, lápiz y papel, lápiz labial en un espejo, lo que sea. Es necesario un boceto.

  2. Identificar las relaciones de uno a muchos.

    Puede que tenga que hablar con la gente que utiliza los datos para determinar qué relaciones son uno-a-muchos. En los datos del héroe, un héroe sólo puede tener una misión, pero cada misión puede tener muchos héroes. De este modo, el héroe es el lado muchos, y la misión es la de un lado.

  3. Encontrar la clave principal de la tabla de uno y los muchos mesa.

    Cada tabla debe tener una clave principal. (A veces se verá alternativas avanzadas como teclas multicampo, pero espera hasta que esté un poco más avanzado para esa materia).

  4. Hacer una referencia de clave externa a la tabla de la mesa de muchos.

    Añadir un campo a la mesa en el lado muchas de las relaciones que contiene sólo la clave para la tabla por un lado.

    Usted no necesita una clave externa en la tabla, por un lado de la relación. Este concepto confunde la mayoría de los principiantes. No es necesario (o quiere) un enlace de vuelta a la mesa de muchos, ya que no sabe cuántos enlaces que necesita. enlaces múltiples serían un campo de la lista, que es exactamente lo que estamos tratando de evitar.

Si los pasos anteriores son difíciles para que usted entienda, piense de nuevo al ejemplo héroe. Cada héroe (de acuerdo con las reglas de negocio) puede estar en una sola misión. Por lo tanto, tiene sentido poner un enlace a la misión en la tabla héroe porque sólo tiene una misión.

Cada misión puede estar relacionado con muchos héroes, por lo que si se intenta vincular las misiones a los héroes, que han enumerado los campos en la tabla de la misión, la violación de la primera forma normal. El resultado de esta unión se parece mucho a la intención original de la base de datos, pero ahora está normalizada.

Muchos programadores se confunden con este ejemplo, diciendo héroes se les debe permitir ir en múltiples misiones, o no son muy buenos héroes. Eso es un gran punto, y nos lleva a uno de los temas más importantes en el desarrollo de datos. La tarea del programador de datos es reflejar las reglas de negocio en marcha.

Las reglas de negocio en este ejemplo se hicieron deliberadamente para simplificar la explicación de las cosas, por lo que tiene una regla de negocio en su lugar (una misión por el héroe) que puede no ser la mejor desde una perspectiva de “salvar al mundo”. Sin embargo, si esa es la regla de negocio que tienes, tu trabajo es implementarlo.

¿Cómo construir una visión para encapsular la unión

La consulta combinación interna es tan útil, que es un lugar excelente para la vista. Una vista de un ser creado de ella:

CREATE VIEW heroMissionView ASSELECThero.name AS `héroe`, mission.description AS `misión`, mission.villain AS `villano`, mission.plot AS `héroe plot`FROM, missionWHEREhero.missionID = mission.missionID-

Tener una visión significa que usted no tiene que volver a crear la consulta cada vez. Se puede tratar la vista como una tabla virtual para las nuevas consultas:

* SELECT heroMissionView-
Artículos Relacionados