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

cascada on delate?

Estas en el tema de cascada on delate? en el foro de Mysql en Foros del Web. Amigos antes que nada saludos atodo. io tengo el mismo problema pero io si tengo mi diseño de bd en innodb aun no creo el ...
  #1 (permalink)  
Antiguo 06/07/2010, 14:35
 
Fecha de Ingreso: junio-2010
Mensajes: 61
Antigüedad: 13 años, 10 meses
Puntos: 0
cascada on delate?

Amigos antes que nada saludos atodo.


io tengo el mismo problema pero io si tengo mi diseño de bd en innodb aun no creo el codigo lo tengo en el pro grama e E/R STUDIO y necesito que cuando elimina algun registro en una tabla que se eliminen todos los dependientes y que no me quede un registro de tipo guerfano bueno segun esto es lo que me digieron.

y me dieron la opcion de acer un cascada on delete pero no se como se ace eso me podrian decir como.


ojo.

no tengo mucha experiencia en esto de base de datos soy un super novato
  #2 (permalink)  
Antiguo 06/07/2010, 15:31
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, 4 meses
Puntos: 2658
Respuesta: cascada on delate?

ON DELETE CASCADE ON UPDATE CASCADE es una cláusula de la creación de FOREIGN KEYs cuando creas una tabla dependiente por clave foránea de otra.
Sólo se puede indica cuando creas la tabla o agregar a la tabla después, pero no es una operación que se pueda indicar en una sentencia. Es una condición fija de las tablas de una base.
Para que puedas indicarla debes poner la condición en la tabla que lleve las FK.
Algo como:

Código MySQL:
Ver original
  1. CREATE TABLE  `combustible` (
  2.   `IDCONSUMO` int(10) unsigned NOT NULL auto_increment,
  3.   `ID_DIARIO` int(10) unsigned NOT NULL,
  4.   `COD_EVENTO` smallint(5) unsigned NOT NULL,
  5.   `PATENTE` char(12) NOT NULL,
  6.   PRIMARY KEY  (`IDCONSUMO`),
  7.   KEY `ID_DIARIO` (`ID_DIARIO`),
  8.   CONSTRAINT `combustible_ibfk_diario` FOREIGN KEY (`ID_DIARIO`) REFERENCES `diario` (`ID_DIARIO`) ON DELETE CASCADE
En esta tabla, ID_DIARIO apunta a la PK de una tabla llamada "diario", e indica que si en "diario" se elimina un registro relacionado con esta, en esta se borre también.

¿Se entiende?
__________________
¿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 08/07/2010, 09:39
 
Fecha de Ingreso: junio-2010
Mensajes: 61
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: cascada on delate?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
ON DELETE CASCADE ON UPDATE CASCADE es una cláusula de la creación de FOREIGN KEYs cuando creas una tabla dependiente por clave foránea de otra.
Sólo se puede indica cuando creas la tabla o agregar a la tabla después, pero no es una operación que se pueda indicar en una sentencia. Es una condición fija de las tablas de una base.
Para que puedas indicarla debes poner la condición en la tabla que lleve las FK.
Algo como:

Código MySQL:
Ver original
  1. CREATE TABLE  `combustible` (
  2.   `IDCONSUMO` int(10) unsigned NOT NULL auto_increment,
  3.   `ID_DIARIO` int(10) unsigned NOT NULL,
  4.   `COD_EVENTO` smallint(5) unsigned NOT NULL,
  5.   `PATENTE` char(12) NOT NULL,
  6.   PRIMARY KEY  (`IDCONSUMO`),
  7.   KEY `ID_DIARIO` (`ID_DIARIO`),
  8.   CONSTRAINT `combustible_ibfk_diario` FOREIGN KEY (`ID_DIARIO`) REFERENCES `diario` (`ID_DIARIO`) ON DELETE CASCADE
En esta tabla, ID_DIARIO apunta a la PK de una tabla llamada "diario", e indica que si en "diario" se elimina un registro relacionado con esta, en esta se borre también.

¿Se entiende?

Última edición por RENELOPEZ; 08/07/2010 a las 14:56 Razón: re
  #4 (permalink)  
Antiguo 08/07/2010, 09:46
 
Fecha de Ingreso: junio-2010
Mensajes: 61
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: cascada on delate?

Pues creo que si segun el este codigo estas usuando 2 tablas:

1:COMBUSTIBLE
2:DIARIO

la de combustible tiene como FK la de diario .

entonces estas creando una condicion que cuando elimines un registro en la tabla diario se elimine en la tabla de COMBUSTIBLE.

Este seria el pedaso de codigo que necesitaria saver manejar? o hay algo mas.

#
KEY `ID_DIARIO` (`ID_DIARIO`),
#
CONSTRAINT `combustible_ibfk_diario` FOREIGN KEY (`ID_DIARIO`) REFERENCES `diario` (`ID_DIARIO`) ON DELETE CASCADE


Si me estoy equivocando en la forma en que entendi espero y me corrijas por favor .
  #5 (permalink)  
Antiguo 08/07/2010, 09:52
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, 4 meses
Puntos: 2658
Respuesta: cascada on delate?

Más que conocer un "pedazo" de código, tienes que aprender a crear tablas relacionales. Eso es lo importante, porque el poder definir o no una FK implica entender bien la creación de tablas, sus tipos de datos y las relaciones. No simples pedazos de código...
__________________
¿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 08/07/2010, 14:49
 
Fecha de Ingreso: junio-2010
Mensajes: 61
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: cascada on delate?

OK gnzsoloyo.


muchas gracias a un no lo he probado ya que es una duda que se me presento, lo estudiare un poko mas a fondo y io creo que para el lunes ya estara en practica te lo agradesco tu ayuda gracias y espero que me puedas ayudar cualquier otra duda..
  #7 (permalink)  
Antiguo 08/07/2010, 14: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, 4 meses
Puntos: 2658
Respuesta: cascada on delate?

No problem.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 08/07/2010, 15:13
 
Fecha de Ingreso: junio-2010
Mensajes: 61
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: cascada on delate?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No problem.


amigo tengo una duda asi rapido espeor y me conteste ahorita.

se supone que un usuario podra pertencer al grupo cliente o proveedor o alos dos.
y ese usuario tendra un perfil para cada grupo seri asi mas omenos.

usuario1 es de grupo cliente y el usuario1 tiene perfil 1que pertenece al grupo cliente .

asi seria.

pero tambien el usuario 1 puede pertenecer al grupo de proveedor con otro perfil qe pertenece algrupo de proveedor.


el problema que tengo es que el mismo perfil puede ser de los 2 grupos y no debe de ser asi.. es 1 perfil para cada grupo .
se arregla con relaciones o es por php o javascript


espero y no te haya echo bolas.


perdona mi ignorancia pero no se que hacer..
  #9 (permalink)  
Antiguo 08/07/2010, 15:54
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, 4 meses
Puntos: 2658
Respuesta: cascada on delate?

Si como Cliente puede tener un perfil, como Proveedor otro: Son dos tablas diferentes: PerflProveedor y PerfilCliente, cada una dependiente de Cliente o Proveedor.

Si puede tener el mismo perfil, o diferentes, Perfil es una Jerarquía de la que dependen PerfilCliente y PerfilProveedor. Estas últimas se relacionan con Usuario, que a su vez debería tener un campo que permita discriminar el tipo de perfil usado (Unico, Proveedor, Cliente).

Esta es una posibilidad, pero hay más diseños aplicables.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 09/07/2010, 09:28
 
Fecha de Ingreso: junio-2010
Mensajes: 61
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: cascada on delate?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Si como Cliente puede tener un perfil, como Proveedor otro: Son dos tablas diferentes: PerflProveedor y PerfilCliente, cada una dependiente de Cliente o Proveedor.

Si puede tener el mismo perfil, o diferentes, Perfil es una Jerarquía de la que dependen PerfilCliente y PerfilProveedor. Estas últimas se relacionan con Usuario, que a su vez debería tener un campo que permita discriminar el tipo de perfil usado (Unico, Proveedor, Cliente).

Esta es una posibilidad, pero hay más diseños aplicables.



SI mira io lo puse asi. A la tabla de registro le puse la fk de empresa pero como opcional tratando de decir que si tiene empresa la ponga o si no no, ademas creo que a futoro me pediran que cada que un usuario se registre como proveedor que primero se deba de comunicar conosotros asi que cuando se registre ponerles unos cheksbox para que elija que tipo de registro desea y si elije la de proveedor que le envie una bentana donde le diga que primero se comunique conosotros.

por otro lado tengo otra tabla de grupos ahi es donde almaceno los tipos de grupos. Cliente o Proveedor Y la relacion con la tabla de registro es M-M y ya ahi es donde elijo que tipo de registro es.


tambien la tabla de grupo esta relacionada con la tabla de perfiles, su relacion es M-M y ya elijo que perfil es para cada grupo pero se supone que solo 1 perfil es para 1 solo grupo pero no se como hacer eso. o ya lo restringiria con codigo?.

la tabla de perfil tien la fk de usuario para saber que perfi le pertenece al usuario.
de la misma forma se supone que un usuario puede tener hasta dos perfiles a los que puede tener acceso con una sola cuenta esta cuenta el la crea en la tabla de registro por que tengo en otra tabla los datos personales del usuario.


Tanto blabla que como soy novato hasta io me ago bolas hehehhe.


encerio espero y me puedas ayudar amigo y muchas gracias

Etiquetas: cascada
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 10:31.