Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

Estas en el tema de [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla? en el foro de Mysql en Foros del Web. Hola estoy usando mysql,y queria saber como se hace por ejemplo tengo la tabla profesor y la tabla comision y dentro de comision hay un ...
  #1 (permalink)  
Antiguo 12/11/2014, 21:06
 
Fecha de Ingreso: noviembre-2014
Mensajes: 50
Antigüedad: 9 años, 5 meses
Puntos: 0
[Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

Hola estoy usando mysql,y queria saber como se hace por ejemplo tengo la tabla profesor y la tabla comision y dentro de comision hay un atributo llamado profesor(el atributo profeseor quiero que tenga todos los atributos de la tabla profesor).
Como realizo esta consulta en mysql?
Gracias y soy nuevo en el foro.
  #2 (permalink)  
Antiguo 13/11/2014, 01:45
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

Eso que pides en un buen esquema relacional no se hace. Pero interpretando tus intensiones:

Los profesores pueden ser de mas de una comisión y las comisiones tendrán mas de un profesor luego la relación es N:M (muchos a muchos). Eso se soluciona con una tercera tabla auxiliar donde se guardan los identificadores respectivos de las entidades relacionadas (comisiones y profesores).


TablaProfesor
idProfesor
Nombre
Apellido
....

TablaComision
idComision
NombreComision
....

TablaRelacionComisionProfesor
idRelCP
idProfesor
idComision
...otros por ejemplo cargo.

Para mostrar los datos de los profesores de una comisión debes construir una query como la que sigue

Código MySQL:
Ver original
  1. FROM (TablaComision C INNER JOIN TablaRelacionComisionProfesor R
  2.                                              ON C.idComision=R.idComision)
  3.             INNER JOIN TablaProfesor P
  4.                      ON R.idProfesor=P.idProfesor
  5. WHERE C.idComision=X;

Eso listará los datos de la comisión X junto a los de los profesores integrantes de esa comisión.


Código MySQL:
Ver original
  1. FROM TablaRelacionComisionProfesor R INNER JOIN TablaProfesor P
  2.                      ON R.idProfesor=P.idProfesor
  3. WHERE R.idComision=X;

Solo los profes.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 13/11/2014, 16:33
 
Fecha de Ingreso: noviembre-2014
Mensajes: 50
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

ah muchas gracias por tu tiempo,fuiste el unico que me ayudo n.n
tengo una duda la tabla TablaRelacionComisionProfesor
va a tener solo un id digamos"idRelCP" y los otros 2 id de las otras tablas van a ser atributos de la relacion para unirlos.
Ah creo que me respondi solo jajaja
gracias
  #4 (permalink)  
Antiguo 13/11/2014, 16:34
 
Fecha de Ingreso: noviembre-2014
Mensajes: 50
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

como haces para la insertar codigo??como se llama esa etiqueta?
  #5 (permalink)  
Antiguo 13/11/2014, 16:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

Son los Higlight...

¿Nunca exploras las herramientas disponibles en las ventanas de edición?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 13/11/2014, 18:51
 
Fecha de Ingreso: noviembre-2014
Mensajes: 50
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

ah mira ahora los vi,gracias.
Siempre que busco alguna duda mia en google,salta este foro y decidi registrarme,y vos siempre te veo que respondiste muchos temas de sql jaja
Un gusto gonza n.n
  #7 (permalink)  
Antiguo 18/11/2014, 21:03
 
Fecha de Ingreso: noviembre-2014
Mensajes: 50
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

me podrias ayudar por favor,como crear esa tabla relacion?
osea la sintaxis en mysql,porque yo encuentro que en las mismas tabla "profesor" y "comision" hacen la relacio,pero yo quiero hacer como haces vos por favor ayuda
  #8 (permalink)  
Antiguo 19/11/2014, 02:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

TablaProfesor
idProfesor PK
Nombre
Apellido
....

TablaComision
idComision PK
NombreComision
....

TablaRelacionComisionProfesor

idRelCP PK
idProfesor FK referenciando a TablaProfesor.idProfesor
idComision FK referenciando a TablaComision.idComision
...otros por ejemplo cargo.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 19/11/2014, 12:33
 
Fecha de Ingreso: noviembre-2014
Mensajes: 50
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

pero mi problema es la sintaxis de sql para la tabla TablaRelacionComisionProfesor
como se hace eso de referencia ?
Porque yo encontre que en vez de hacer una tabla que las relacione,hacen directamente la fk dentro las tablas con cosntraint algo asi,me podrías hacer la sintaxis por favor de esa talba en mysql
  #10 (permalink)  
Antiguo 19/11/2014, 13:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

Cita:
Iniciado por tapiadiego335 Ver Mensaje
pero mi problema es la sintaxis de sql para la tabla TablaRelacionComisionProfesor
como se hace eso de referencia ?
Porque yo encontre que en vez de hacer una tabla que las relacione,hacen directamente la fk dentro las tablas con cosntraint algo asi,me podrías hacer la sintaxis por favor de esa talba en mysql
Vamos a los fundamentos:
Si tienes una relación N:M entre dos tablas cualesquiera, eso obligatoriamente crea una tercera tabla que administre la relación, en la cual cada PK de cada tabla es FK y PK de la tabla relacional.
Esto no es un invento ni una creación. Es una definición del modelo E-R.

Es decir que:
1) Deben existir físicamente las tablas que se relacionan.
2) Se debe crear una tercera tabla, que tendrán como PK iguales campos a cada una de las PK a las que se haga referencia.
3) Ese par o conjunto de campos se define como PK en su tabla (PK compuesta).
4) Cada campo que refiera a la PK de otra tabla se define como FK de esa tabla.
5) Para hacer un alta de la relación en la tabla relaciona se requiere un INSERT específico. No exiten operaciones automágicas en este tema.
6) Para hacer un insert exitoso en es tabla relacioanl, los valores que se insertan en la PK deben existir previamente en sus tablas referidas.

Esto último es crítico. Significa que para dar de alta un registro en la tabla profesor_comision, el valor a insertar en el idComision ya debe existir en la tabla COmisión, y el idProfesor debe existir en la tabla Profesor. Esto es mandatorio.


En cuanto a un ID propio de la tabla relacional, no es necesario y es contraproducente. Sólo se debe agregar un discriminante si y sólo si un mismo profesor pueda estar relacionado con la misma comisión más de una vez.
Obviamente no es el caso, pero puede darse n otros escenarios.

Nota de consejos:
1) No le pongas prefijos innecesarios a las tablas. Generan confusion. Una tabla no necesita llamarse "TablaProfesor", o TablaRelacionProfesorComision", Con sólo usar "Profesor", "Comision" y Profesor_comision", es suficiente.
2) Usa los mismos nombres en las PK que en las FK que hacen referencia (eso está bien en los ejemplos), evitan confusiones y permiten escribir codigo más limpio.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 21/11/2014, 20:25
 
Fecha de Ingreso: noviembre-2014
Mensajes: 50
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

Código SQL:
Ver original
  1. CREATE TABLE  Profesor_Comision,
  2. id_profesor INT,
  3. id_comision INT,
  4. PRIMARY KEY (id_profesor,id_comision)

Asi estaria bien hecha la tabla esa de relacion?mi duda es esa la sintaxis de la tabla relacion
  #12 (permalink)  
Antiguo 21/11/2014, 21:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

Te faltaría solamente agregar la definición de las dos FK.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 23/11/2014, 11:43
 
Fecha de Ingreso: noviembre-2014
Mensajes: 50
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

Código MySQL:
Ver original
  1. CREATE TABLE Profesor_Comision,
  2. id_profesor INT,
  3. id_comision INT,
  4. PRIMARY KEY (id_profesor,id_comision),
  5. FOREIGN KEY (id_profesor,id_comision);
Así estaría bien resuelto en mysql?
  #14 (permalink)  
Antiguo 23/11/2014, 11:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

No exactamente...
La PK esta bien, pero la FK no.
Primero, no estás poniendo a qué tabla se referencia, y los DBMS no adivinan las cosas, ni aún cuando los nombres de los campos sean únicos en toda la base en todas las tablas.
Segundo, cada campo en realidad referencia a una tabla distinta, por lo que so dos FK en la misma tabla apuntando a tablas distintas.

Código SQL:
Ver original
  1. CREATE TABLE Profesor_Comision(
  2. id_profesor INT,
  3. id_comision INT,
  4. PRIMARY KEY (id_profesor,id_comision),
  5. FOREIGN KEY (id_profesor) REFERENCES profesor(id_profesor),
  6. FOREIGN KEY (id_comision) REFERENCES comision(id_comision),
  7. );
Esto está claramente ejemplificado en el manual de referencia...

http://dev.mysql.com/doc/refman/5.6/...eign-keys.html

Te conviene acudir a él para estos detalles menores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 23/11/2014, 12:43
 
Fecha de Ingreso: noviembre-2014
Mensajes: 50
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

muchisimas gracias,si eso de la documentacion lo vi,pero lo de index no me quedo claro ja
muchas gracias :)
  #16 (permalink)  
Antiguo 23/11/2014, 13:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

No se a que index te refieres... no me queda claro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 23/11/2014, 15:18
 
Fecha de Ingreso: noviembre-2014
Mensajes: 50
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

tengo un problema,tengo 3 tablas
alumno
prestamos
libros

Como hago para saber que libro tiene un alumno?porque lei que las fk tienen que ser del mismo tipo digamos entero o varchar,como hago para relacionar las 3?
osea si con inner join pero mi duda es como hago el modelado de saber que libro tienen cada alumno?
  #18 (permalink)  
Antiguo 23/11/2014, 16:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

Cita:
como hago el modelado de saber que libro tienen cada alumno?
A estas alturas de las explicaciones tu duda resulta un poco extraña... porque es el mismo caso de Profesor - Comision - Profesor_comision, sólo que con algunas extensiones adicionales.
A nivel de consulta, si cada registro contiene un único ID de alumno y un único ID de un libro, es un INNER JOIN múltiple, ¿no te parece?
Respeta este esquema, que aplica a cualquier cantidad de tablas:
Código SQL:
Ver original
  1. SELECT ... (campos a mostrar)
  2. FROM tabla1
  3. INNER JOIN tabla2 ON tabla1.id=tabla2.id
  4. INNER JOIN tabla3 ON tabla2.id2=tabla3.id2
  5. ...
  6. WHERE where_conditions;

Ahora bien, hay todavía algunos detalles a afinar para que tu modelo se acerque a algo útil.

Veamos: tienes dos entidades denominadas Alumnos y Libros, que se relacionan por una regla de negocio que expresa: "Un alumno puede tomar en préstamo N libros por un tiempo", y su inversa "N libros pueden ser prestados a N alumnos durante X tiempo".
Hay una tercera regla que expresa "Un mismo libro sólo puede prestarse a un único alumno en el mismo período". Esta última es una regla funcional, no de estructura de datos.
De estas simples reglas surgen dos tablas y una relación:
- Alumno (entidad)
- Libro (entidad)
- Alumno - Libro (relacion N:N).

Ahora bien, como una relación N:N genera obligatoriamente una tabla relacional, surge de ella una tercera tabla: Prestamo.

Esta tercera tabla sabemos que tiene un identificador doble para cada registro: un ID de alumno y un ID de libro. Pero el modelado correcto nos indica que un mismo libro puede ser prestado al mismo alumno N veces en distintos tiempos, entonces necesitamos algo que nos discrimine de qué prestamos estamos hablando, y hasta cuando, lo que puede hacerse con un campo DATETIME para el inicio del préstamo y que forme parte de la PK, y otro para el fin (devolución) del préstamo, que sea nulable.

En este contexto, ¿como identificas qué libros tiene hoy en préstamo un alumno?.
Simple: Realizas un INNER JOIN entre las tres tablas, con la condicion que el campo de devolución sea NULL, ya que aun no se ha devuelto.
¿Se va entendiendo?

Ahora bien, a diferencia del caso anterior, la tabla relacionar queda algo diferente:
Código SQL:
Ver original
  1. CREATE TABLE Prestamo(
  2. id_alumno INT NOT NULL,
  3. id_libro INT NOT NULL,
  4. fechaDesde DATETIME NOT NULL,
  5. fechaHasta DATETIME NULL,
  6. PRIMARY KEY (id_alumno,id_libro, fechaDesde),
  7. FOREIGN KEY (id_alumno) REFERENCES alumno(id_alumno),
  8. FOREIGN KEY (id_comision) REFERENCES libro(id_libro),
  9. );

Ahora bien, como en este caso tenemos un discriminante de fecha y hora, y podría ser que se produzcan inserciones de registros inconsistentes, se debe realizar validaciones previas antes de cualquier INSERT a la tabla, para asegurar que no se esté insertando el mismo libro y alumno con diferente hora, sin que previamente haya sido devuelto el ejemplar previamente.
Eso es un detalle de desarrollo que hay que tener en cuenta.

Espero que se entienda la idea.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 23/11/2014, 17:27
 
Fecha de Ingreso: noviembre-2014
Mensajes: 50
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

muchas gracias por explicacion quedo claro,pero ahora en las consultas como hago para saber que libro tiene un alumno,osea que atributos de las tablas tengo que comparar con iner join para saber que libro tiene cada alumno?
disculpa que moleste tanto
  #20 (permalink)  
Antiguo 23/11/2014, 18:08
 
Fecha de Ingreso: noviembre-2014
Mensajes: 50
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: [Ayuda]Como insertar una tabla entera dentro de un atributo de otra tabla?

[URL="http://bto43.files.wordpress.com/2013/04/biblioteca-en-mysql.pdf"]http://bto43.files.wordpress.com/2013/04/biblioteca-en-mysql.pdf[/URL]
lo entendi con ese ejemplo

Etiquetas: sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:14.