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

problemas con fk, pk y sp

Estas en el tema de problemas con fk, pk y sp en el foro de Mysql en Foros del Web. no entiendo muy bien lo de los store procedures. y tampoco como funciona la pk y la fk tengo dos tablas, una de usuario y ...
  #1 (permalink)  
Antiguo 11/11/2015, 01:35
 
Fecha de Ingreso: julio-2012
Ubicación: en mi casa
Mensajes: 37
Antigüedad: 11 años, 9 meses
Puntos: 0
Exclamación problemas con fk, pk y sp

no entiendo muy bien lo de los store procedures.
y tampoco como funciona la pk y la fk

tengo dos tablas, una de usuario y otra de direcciones.
entonces la pk de direcciones esta vinculada con una fk de usuario para saber su direccion.

quiero que mi pk de direcciones se actualiza sola al momento de llenar la bd de usuario y asi tener bien vinculadas cada usuario con su respectiva direccion.

intente lo siguiente

Código SQL:
Ver original
  1. cerate PROCEDURE insertausuario(direccionp INT, telefonop VARCHAR, nombrep VARCHAR, apellidop VARCHAR)
  2. BEGIN
  3.     INSERT INTO prueba2 (direccion, telefono) VALUES (direccionp, telefonop);
  4.     DECLARE idireccion INT;
  5.     SELECT id INTO idireccion FROM prueba2 WHERE direccion LIKE direccionp AND telefono = telefonop;
  6.     INSERT INTO prueba1 (nombre, apellido, prueba2_id) VALUES (nombrep, apellidop, idireccion);
  7.    
  8. END
[/CODE]

pero creo q no se puede insertar el resultado de una tabla de una variable de una consulta.

o como puedo hacer para que cuando se registre un usuario automaticamente el fk de usuario se vincule con la direccion exacta?

saludos y gracias por su ayuda



[tabla1] [tabla2]
[idusuario] [iddireccion] <-------------------------------
[nombre] [direccion] |
[apellido] [telefono] |
[FK_iddireccion] <-------quiero que esta sea igual a esta|

Última edición por gnzsoloyo; 11/11/2015 a las 06:30
  #2 (permalink)  
Antiguo 11/11/2015, 04:21
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: problemas con fk, pk y sp

Las FK no se completan automágicamente. Su meta es proteger la integridad referencial de los errores de ingreso y mantener la información consistente.
Eres tu él que tiene que definir correctamente la secuencia de inserciones y poner en LA FK el valor que debe tener. La base no adivinará telepáticamente que un registro A esta relacionado con otro de la tabla B.
¿Has estudiado bien el tema de las FK?¿Qué es lo que no comprendes?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/11/2015, 05:07
 
Fecha de Ingreso: julio-2012
Ubicación: en mi casa
Mensajes: 37
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: problemas con fk, pk y sp

ok con eso ya me reposdiste muchas dudas que tenia...
ahora.. si tengo 2 tablas diferentes debo de por ejemplo insertar primero en la base de datos de direcciones y despues en la de usuario, para que tenga la referencia de la pk de direccion...

pero eso como lo haria en un sp??

osea en un solo sp poder agregar a direccion, despues sacar esa id de direccion y insertarla ahora en mi tabla usuario
  #4 (permalink)  
Antiguo 11/11/2015, 06:28
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: problemas con fk, pk y sp

Empecemos por un detalle muy importante: ¿Cuál es la lógica de esa relación ¿El usuario pertenece a la dirección, o la dirección pertenece al usuario?
ESO es lo que define donde va la FK, y también define el orden de inserciones.

En tu descripción se entiende que un mismo usuario puede tener una o más direcciones. SI es así, la FK del usuario va en la tabla direcciones, y no al revés, como estás diciendo.
Estarías diseñando incorrectamente las tablas.

Por otro lado, otra cosa que debes definir es como está constituida la PK del usuario.
¿Es un dato propio del usuario (sería lo lógico), como le username o un numero de documento, o lo harás parchando con un ID autoincremental?
Dependiendo de cual sea el dato usado como PK, será la forma de recuperar la FK a usar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 11/11/2015, 12:00
 
Fecha de Ingreso: julio-2012
Ubicación: en mi casa
Mensajes: 37
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: problemas con fk, pk y sp

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Empecemos por un detalle muy importante: ¿Cuál es la lógica de esa relación ¿El usuario pertenece a la dirección, o la dirección pertenece al usuario?
ESO es lo que define donde va la FK, y también define el orden de inserciones.

En tu descripción se entiende que un mismo usuario puede tener una o más direcciones. SI es así, la FK del usuario va en la tabla direcciones, y no al revés, como estás diciendo.
Estarías diseñando incorrectamente las tablas.
una direccion puede tener una o mas usuarios... asi seria la relacion.
Cita:
Por otro lado, otra cosa que debes definir es como está constituida la PK del usuario.
¿Es un dato propio del usuario (sería lo lógico), como le username o un numero de documento, o lo harás parchando con un ID autoincremental?
Dependiendo de cual sea el dato usado como PK, será la forma de recuperar la FK a usar.
efectivamente el id es del usuario y no es AI... entonces en este caso primero se registra la direccion y luego al usuario que es el q tiene la fk no?

Última edición por atom182; 11/11/2015 a las 12:21
  #6 (permalink)  
Antiguo 11/11/2015, 12:28
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: problemas con fk, pk y sp

Cita:
efectivamente el id es del usuario y no es AI... entonces en este caso primero se registra la direccion y luego al usuario que es el q tiene la fk no?
No... ¿Acaso las direcciones existen sin usuarios? ¿No son las direcciones atributos propios de los usuarios, mas alla de si la misma dirección es compartida por multiples de ellos?

No estás comprendiendo el tema desde el punto de vista del análisis de sistemas.

Un usuario es en definitiva una entidad física, un individuo real o jurídico, pero es una entidad concreta. Una dirección no lo es.
Analíticamente la dirección es siempre un atributo o dato dentro del objeto que se representa: El Usuario.
Una dirección NUNCA puede ser una entidad independiente del usuario. Ergo, lo primero que se crea es el Usuario, y luego la dirección, y luego se las vincula, porque están relacionadas.
Una relación donde la misma dirección puede estar asociada a múltiples usuarios es una relación con cardinalidad N:M, y eso crea una tabla física relacional que vincula a cada usuario con cada dirección asociada.

Ahora bien, para mayor claridad mía: ¿qué se supone que es esa "dirección" que mencionas?
¿Es una dirección dentro de una ciudad?
¿Es una dirección electrónica (e-Mail)?
¿Es una IP o MAC?
¿Qué?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 11/11/2015 a las 12:38
  #7 (permalink)  
Antiguo 11/11/2015, 13:40
 
Fecha de Ingreso: julio-2012
Ubicación: en mi casa
Mensajes: 37
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: problemas con fk, pk y sp

haaa ok ya entendi
es direccion de ciudad...
entonces la direccion debe ser al reves... ok ya lo cambie...
ahora... primero se insertan dattos en el usuario y luego en la direccion para que mantengan el mismo id de referencia...
pero como hago todo eso dentro de un procedure?
  #8 (permalink)  
Antiguo 11/11/2015, 13:44
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: problemas con fk, pk y sp

Pues es razonando:
1) Insertas en la tabla Usuarios.
2) Insertas en la tabla Direcciones.
3) Insertas en la tabla que relaciona Usuarios con Direcciones. Esta es OBLIGATORIA si un mismo usuario puede tener N direcciones y cada direccion corresponder a N usuarios.

Si es como dijiste, la tercera tabla no se puede evitar. Es parte de los fundamentos de las bases de datos relacionales.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 11/11/2015, 14:06
 
Fecha de Ingreso: julio-2012
Ubicación: en mi casa
Mensajes: 37
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: problemas con fk, pk y sp

ammm...
seria algo asi ql sp?

Código:
CREATE PROCEDURE ptr(direccionp varchar(45), nombrep varchar(45), apellidop varchar(45), telefono int)
BEGIN
INSERT INTO prueba2 (direccion, telefono) values(direccionp, tel);
INSERT INTO	prueba1 (nombre, apellido) VALUES (nombrep, apellidop);

DECLARE id1p INT;
DECLARE id2p INT;

SELECT id INTO id1p FROM prueba1 WHERE nombre LIKE nombrep AND apellido like apellidop;

SELECT id INTO id2p FROM prueba2 where direccion LIKE direccionp AND telefono = tel;

INSERT INTO prueba1_prueba2 (idPorueba1, idPrueba2) VALUES (id1p,id2p);

END

Etiquetas: select, 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 20:51.