¿Cómo manejar muchos-a-muchos se une en sql para la programación css3 html5and

Las uniones interiores son una manera perfecta para poner en práctica las relaciones uno-a-muchos de SQL para la programación HTML5 y CSS3. Si nos fijamos en los diagramas ER, que suelen aparecer muchos-a-muchas relaciones, también. Por supuesto, también es necesario para modelarlos. Aquí está el secreto: no se puede realmente hacerlo. El modelo de datos relacional no tiene realmente una buena manera de hacer de muchos a muchos se une. En su lugar, es falso. No es difícil, pero es un poco furtivos.

Utiliza muchos-a-muchos se une para manejar los datos que cotizan en bolsa, como la relación entre el héroe y el poder. Cada héroe puede tener cualquier número de poderes, y cada poder puede pertenecer a cualquier número de héroes.

imagen0.jpg

El interior join era fácil porque usted acaba de poner una referencia clave externa a un lado de la relación en el que muchos mesa. En un muchos-a-muchos se unen, no hay “, uno " lado, así que ¿dónde pones la referencia? Deja a los informáticos para llegar a una solución astuto.

Tenga en cuenta que esta tabla no contiene ninguna referencia a los poderes. Usted ve un montón de poderes, pero no se hace referencia a los héroes.

image1.jpg

Aquí está la parte difícil.

image2.jpg

Los resultados de esta consulta pueden sorprenderle. La nueva tabla contiene nada más que las claves externas. No tiene mucho sentido por su cuenta, sin embargo, representa una de las ideas más importantes de datos.

La comprensión de las tablas de enlace

los hero_power tabla es una tabla nueva marca, y es cierto que un poco bicho raro:

  • No contiene los datos de su cuenta. Muy poco aparece dentro de la tabla.

  • No se trata de una entidad. La mayoría de las mesas están a punto entidades en sus datos. Éste no es.

  • Se trata de una relación. Esta tabla es en realidad acerca de las relaciones entre el héroe y el poder. Cada entrada de esta tabla es un vínculo entre el héroe y el poder.

  • Contiene dos referencias de clave externa. Cada registro en esta tabla vincula una entrada en la héroe mesa con uno en la poder mesa.

  • Tiene una relación muchos-a-uno unen con cada una de las otras dos tablas. Esta tabla tiene un muchos-a-uno la relación con el héroe mesa. Cada registro de hero_power se conecta a un registro de héroe. Del mismo modo, cada registro de hero_power se conecta a un registro del poder.

  • El que muchos-a-dos se une a crear una de muchos a muchos se unen. Aquí está la parte mágica: Mediante la creación de una mesa con dos de muchos a uno se une, se crea una relación muchos-a-muchos unión entre las tablas originales!

  • Este tipo de estructura se denomina una mesa de enlace. Vincula tablas se utilizan para crear muchos-a-muchos relación entre entidades.

Cómo utilizar las tablas de enlace para hacer de muchos a muchos se une

Aquí está un diagrama ER en toda regla de los datos héroe.

image3.jpg

Vincula tablas no son realmente útil por su cuenta, ya que no contienen datos reales. En general, se utiliza una tabla de enlace dentro de una consulta o vista:

SELECThero.name AS 'héroe', power.name AS 'power'FROMhero, poder, hero_powerWHEREhero.heroID = hero_power.heroIDANDpower.powerID = hero_power.powerID-

Aquí están algunas ideas acerca de este tipo de consulta:

  • Combina tres mesas. Esa complejidad parece de miedo al principio, pero es realmente muy bien. El punto de esta consulta es utilizar el hero_power tabla para identificar las relaciones entre el héroe y el poder. Tenga en cuenta que la DE cláusula enumera las tres tablas.

  • los DÓNDE cláusula tiene dos enlaces. La primera parte de la DÓNDE cláusula enlaza la hero_power mesa con el héroe mesa con una combinación interna. La segunda parte vincula la poder mesa con otra combinación interna.

  • Puede utilizar otra cláusula para limitar aún más los resultados. Por supuesto, usted todavía puede añadir otras piezas a la Y cláusula para que los resultados de resolver un problema particular, pero deje que solo por ahora.

Ahora usted tiene los resultados que puede utilizar.

image4.jpg

Una vez más, esta consulta es un lugar obvio para una vista:

CREATE VIEW heroPowerView ASSELECThero.name AS 'héroe', power.name AS 'power'FROMhero, poder, hero_powerWHEREhero.heroID = hero_power.heroIDANDpower.powerID = hero_power.powerID-

Por lo general, usted no va a hacer sus resultados exactamente igual que este punto de vista. En su lugar, mostrar información para, por ejemplo, Chico binario, y desea una lista de sus poderes. No es necesario decir Binary Boy tres veces, por lo que tienden a utilizar dos consultas (tanto desde puntos de vista, si es posible) para simplificar la tarea. Por ejemplo, mirar a estas dos preguntas:

SELECT * FROM heroMissionView DONDE héroe = "poder-boy' SELECT binaria DESDE DONDE heroPowerView héroe = 'boy'- binaria

La combinación de estas consultas le da suficientes datos para describir todo en la tabla original. Normalmente, conectar todos estos datos juntos en su código PHP.

El código de acceso de datos PHP estándar, excepto que tiene dos pases a la base de datos:

showDetails.php? lt; php // connecttry {$ con = new PDO ('mysql: host = localhost-dbname = haio', "haio", "haio") - $ con-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION ) - // obtener más información solicitada héroe $ héroe = "niño binario" - $ query = lt; lt;
consulta ($ consulta) - $ result-> setFetchMode (PDO :: FETCH_ASSOC) -foreach ($ resultado como $ fila) {foreach ($ fila como $ campo => $ valor) {print lt; lt;
$ campo
$ valor
AQUÍ-} // fin foreach campo} // fin fila foreachprint "
poderes
n "-print"
n "- // crear otra consulta para agarrar el poder $ query = lt; lt;consulta ($ consulta) -print "
    n "-foreach ($ resultado como $ fila) {foreach ($ fila como $ campo => $ valor) {print"
  • $ valor
  • n "-} // foreach end} // fin mientras loopprint"
n "-print"
n "-print"
n "-} catch (PDOException $ e) {echo" ERROR: '. $ e-> getMessage () -} // fin intente>?



» » » » ¿Cómo manejar muchos-a-muchos se une en sql para la programación css3 html5and