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

Integridad referencial en mysql

Estas en el tema de Integridad referencial en mysql en el foro de Bases de Datos General en Foros del Web. Hola a todos..... Estoy trabajando con mysql y java pero necesito incorporar reglas de integridad referencia para poder trabajar como se debe.... No se como ...
  #1 (permalink)  
Antiguo 26/04/2004, 13:38
 
Fecha de Ingreso: abril-2004
Ubicación: Morelos, México
Mensajes: 124
Antigüedad: 20 años
Puntos: 0
Integridad referencial en mysql

Hola a todos.....
Estoy trabajando con mysql y java pero necesito incorporar reglas de integridad referencia para poder trabajar como se debe....

No se como utilizar MySQL con java implementando integridad referencia.

Tengo que realizar algunas tablas de forma autoreferenciadas para hacer una estructura tipo arbol (jtree), en donde dos campos o mas son padres e hijos de la misma tabla.


Necesto su ayuda.
Gracias......
  #2 (permalink)  
Antiguo 27/04/2004, 08:53
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
1. usa la version mas reciente de mysql, creo que es la 4.0.18
2. crea tablas de tipo innodb
3. en la tabla hija crea un indice usando el campo que es clave foranea
4. crea la relacion de integridad
5. trata de ayudarte con un administrador grafico para mysql, tal como sqlyog.
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #3 (permalink)  
Antiguo 27/04/2004, 21:01
 
Fecha de Ingreso: abril-2004
Ubicación: Morelos, México
Mensajes: 124
Antigüedad: 20 años
Puntos: 0
Cita:
Mensaje Original por claudiovega
1. usa la version mas reciente de mysql, creo que es la 4.0.18
2. crea tablas de tipo innodb
3. en la tabla hija crea un indice usando el campo que es clave foranea
4. crea la relacion de integridad
5. trata de ayudarte con un administrador grafico para mysql, tal como sqlyog.

Gracias, lo que pasa es que algunos amigos han aplicado las reglas de integridad referencial en mysql pero me comentan que se pasa por alto muchas cosas que supuestamente debe cumplir mysql. Es por eso que tengo esa inquietud, en estos dias voy a bajar e instalar la version mas reciente.
gracias por el momento.
  #4 (permalink)  
Antiguo 28/04/2004, 03:31
 
Fecha de Ingreso: enero-2004
Mensajes: 396
Antigüedad: 20 años, 3 meses
Puntos: 0
No, la ultima version de mysql es la 5, o eso creo
  #5 (permalink)  
Antiguo 28/04/2004, 07:26
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
4.0.18 es la ultima version que se recomienda para un entorno de produccion, la version 5 aun no es beta.
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #6 (permalink)  
Antiguo 28/04/2004, 13:51
 
Fecha de Ingreso: enero-2004
Ubicación: Colombia
Mensajes: 80
Antigüedad: 20 años, 3 meses
Puntos: 0
¿como se crea la relación de integridad?
  #7 (permalink)  
Antiguo 28/04/2004, 19:49
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
te refieres al codigo sql para realizar eso?
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #8 (permalink)  
Antiguo 29/04/2004, 09:26
 
Fecha de Ingreso: abril-2004
Ubicación: Morelos, México
Mensajes: 124
Antigüedad: 20 años
Puntos: 0
Espero que te sirva esta informacion:

A partir de la versión 3.23.43b, se pueden definir restricciones de claves foráneas con el uso de tablas InnoDB. InnoDB es el primer tipo de tabla que permite definir estas restricciones para garantizar la integridad de los datos.

Para trabajar con claves foráneas, necesitamos hacer lo siguiente:

Crear ambas tablas del tipo InnoDB.
Usar la sintaxis FOREIGN KEY(campo_fk) REFERENCES nombre_tabla (nombre_campo)

Crear un índice en el campo que ha sido declarado clave foránea.
InnoDB no crea de manera automática índices en las claves foráneas o en las claves referenciadas, así que debemos crearlos de manera explícita. Los índices son necesarios para que la verificación de las claves foráneas sea más rápida. A continuación se muestra como definir las dos tablas de ejemplo con una clave foránea.

CREATE TABLE cliente
(
id_cliente INT NOT NULL,
nombre VARCHAR(30),
PRIMARY KEY (id_cliente)
) TYPE = INNODB;

CREATE TABLE venta
(
id_factura INT NOT NULL,
id_cliente INT NOT NULL,
cantidad INT,
PRIMARY KEY(id_factura),
INDEX (id_cliente),
FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente)
) TYPE = INNODB;
La sintaxis completa de una restricción de clave foránea es la siguiente:

[CONSTRAINT símbolo] FOREIGN KEY (nombre_columna, ...)
REFERENCES nombre_tabla (nombre_columna, ...)
[ON DELETE {CASCADE | SET NULL | NO ACTION
| RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION
| RESTRICT}]

Las columnas correspondientes en la clave foránea y en la clave referenciada deben tener tipos de datos similares para que puedan ser comparadas sin la necesidad de hacer una conversión de tipos. El tamaño y el signo de los tipos enteros debe ser el mismo. En las columnas de tipo caracter, el tamaño no tiene que ser el mismo necesariamente.

Si MySQL da un error cuyo número es el 1005 al momento de ejecutar una sentencia CREATE TABLE, y el mensaje de error se refiere al número 150, la creación de la tabla falló porque la restricción de la clave foránea no se hizo de la manera adecuada. De la misma manera, si falla una sentencia ALTER TABLE y se hace referencia al error número 150, esto significa que la definición de la restricción de la clave foránea no se hizo adecuadamente. A partir de la versión 4.0.13 de MySQL, se puede usar la sentencia SHOW INNODB STATUS para ver una explicación detallada del último error que se generó en relación a la definición de una clave foránea.

Si en una tabla, un registro contiene una clave foránea con un valor NULO, significa que no existe niguna relación con otra tabla.

A partir de la versión 3.23.50, se pueden agregar restricciones de clave foránea a una tabla con el uso de la sentencia ALTER TABLE. La sintaxis es:

ALTER TABLE nombre_tabla ADD [CONSTRAINT símbolo] FOREIGN KEY(...)
REFERENCES otra_tabla(...) [acciones_ON_DELETE][acciones_ON_UPDATE]
Por ejemplo, la creación de la clave foránea en la tabla venta que se mostró anteriormente pudo haberse hecho de la siguiente manera con el uso de una sentencia ALTER TABLE:

CREATE TABLE venta
(
id_factura INT NOT NULL,
id_cliente INT NOT NULL,
cantidad INT,
PRIMARY KEY(id_factura),
INDEX (id_cliente)
) TYPE = INNODB;

ALTER TABLE venta ADD FOREIGN KEY(id_cliente) REFERENCES cliente(id_cliente);
En las versiones 3.23.50 y menores no deben usarse las sentencias ALTER TABLE o CREATE INDEX en tablas que ya tienen definidas restricciones de claves foráneas o bien, que son referenciadas en restricciones de claves foráneas: cualquier sentencia ALTER TABLE elimina todas las restricciones de claves foráneas definidas para la tabla.

No debe usarse una sentencia ALTER TABLE en una tabla que está siendo referenciada, si se quiere modificar el esquema de la tabla, se recomienda eliminar la tabla y volverla a crear con el nuevo esquema. Cuando MySQL hace un ALTER TABLE, puede que use de manera interna un RENAME TABLE, y por lo tanto, se confundan las restricciones de clave foránea que se refieren a la tabla. Esta restricción aplica también en el caso de la sentencia CREATE INDEX, ya que MySQL la procesa como un ALTER TABLE.

Cuando se ejecute un script para cargar registros en una base de datos, es recomendable agregar las restricciones de claves foráneas vía un ALTER TABLE. De esta manera no se tiene el problema de cargar los registros en las tablas de acuerdo a un orden lógico (las tablas referenciadas deberían ir primero).


Checa esta informacion talvez te sirva, hay mas en esta direccion:
http://www.programacion.com/bbdd/tut...referencial/4/

Tambien hay tutoriales muy interesantes en la pagina propia de mysql (www.mysql.com)
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 22:02.