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 de SQL-uno a muchos para la programación HTML5 y CSS3. Si nos fijamos en los diagramas ER, que suelen aparecer muchos-a-muchos, también. Por supuesto, también es necesario para modelarlos. Aquí está el secreto: Realmente no se puede hacerlo. El modelo de datos relacional no tiene realmente una buena manera de hacer muchos-a-muchos uniones. En su lugar, es falso. No es difícil, pero es un poco furtivos.

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

La combinación interna fue fácil, ya que sólo hay que poner una referencia clave externa a un lado de la relación de los muchos mesa. En una relación muchos-a-muchos se unen, no hay ningún lado “uno”, así que donde poner la referencia? Deja a los informáticos para llegar a una solución furtivo.

Tenga en cuenta que esta tabla no contiene ninguna referencia a los poderes. Se ven muchos de los poderes, pero no se hace referencia a los héroes.

Aquí está la parte difícil.

Los resultados de esta consulta pueden sorprender. La nueva tabla no contiene más que las claves externas. No tiene mucho sentido por sí misma, 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, y es cierto que un poco bicho raro:

  • No contiene los datos propios. Parece muy poco dentro de la tabla.

    Video: Relacion de tablas en access muchos a muchos

  • No se trata de una entidad. La mayoría de las mesas son acerca de las 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 enlace entre el héroe y el poder.

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

  • Tiene una relación muchos-a-uno unen con cada una de las otras dos mesas. Esta tabla tiene una relación muchos-a-uno 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 de la energía.

    Video: Parte08 - MVC: Relación uno a muchos

  • El que muchos-a-dos se une a crear una relación muchos-a-muchos se unen. Aquí está la parte mágica: Mediante la creación de una mesa con dos 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 tabla de enlace. mesas de enlace se utilizan para crear muchos-a-muchos relaciones entre las entidades.

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

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

mesas de enlace 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:

Video: Access 2007: relacion 1 a varios - ofimaticaparatorpes.com

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 tablas. Parece que la complejidad de miedo al principio, pero es muy fina. El punto de esta consulta es el uso de la 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 se vincula la poder mesa con otra combinación interna.

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

Ahora usted tiene los resultados que se pueden utilizar.

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, no se va a hacer sus resultados exactamente igual que este punto de vista. En su lugar, mostrar información para, por ejemplo, Binary Boy, 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 el héroe = `binario poder boy`-SELECT heroPowerView donde el héroe =` boy`- binaria

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

El código de acceso a datos es PHP estándar, excepto que realiza dos pasadas a la base de datos:

showDetails.php? Lt;? Php // connecttry {$ con = nueva DOP ( `mysql: host = localhost-nombredb = haio`, "haio", "haio") - $ con-gt; setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION) - // obtener más información solicitada para el héroe héroe $ = "niño binaria"- $ consulta = lt; lt;
consulta ($ consulta) - $ resultado-gt; setFetchMode (PDO :: FETCH_ASSOC) -foreach ($ resultado como $ fila) {foreach ($ fila como $ campo = gt; $ value) {print lt; lt;
$ ámbito
valor $
EL PRESENTE DOCUMENTO} // fin del campo foreach} // fila foreachprint final "
potestades
norte"-impresión "
norte"- // crear otra consulta para agarrar los poderes $ consulta = lt; lt;consulta ($ consulta) -print "
    norte"-foreach ($ resultado como $ fila) {foreach ($ fila como $ campo = gt; valor $) {print "
  • valor $
  • norte"-} // fin foreach} // fin mientras loopprint "
norte"-impresión "
norte"-impresión "
norte"-} catch (PDOException $ e) { `ERROR:` eco. $ E-gt; getMessage () -} // fin de tratar gt;
Artículos Relacionados