MySQL - Fk con una vista

   
Vista:

Fk con una vista

Publicado por Diego (3 intervenciones) el 28/04/2008 22:31:25
Buenos días,
tengo una tabla en un esquema supongamos schema1.tabla1
tengo otra tabla en otro esquema, supongamos schema2.tabla2
Yo necesito ver desde el esquema1 la tabla2, por lo cual hice una vista, supongamos
schema1.vistaTabla2.
Hasta acá, todo perfecto.
Lo que yo necesito saber es si MySQL permite crear una FK entre una tabla y una vista.
Porque yo necesito tener una fk entre la tabla1 y la tabla2 ( a través de la vista ).

Desde ya, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Fk con una vista

Publicado por Gonzalo GC (339 intervenciones) el 28/04/2008 23:19:34
Las vistas NO SON TABLAS, son procesos de SELECT precompilados, por tanto jamás puede definirse un PK en una vista, porque representa una tabla virtual, y los índices se definen sobre tablas físicas.
En todo caso lo que puedes hacer es crear una tabla física de enlace a las mismas tablas que lee la vista; pero no es tu caso, porque los índices sólo se pueden definir DENTRO de cada schema y PARA LAS TABLAS PERTENECIENTES al schema.
Tal vez puedas crear en uno de los esquemas una tabla no relacional para almacenar el resultado del SELECT en un momento dado. Pero como la vista se vuelve a generar en memoria al ser llamada, eventualmente te producirá inconsistencias de datos.

No me parece una solución práctica desde ningún punto de vista.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Fk con una vista

Publicado por Diego (3 intervenciones) el 29/04/2008 13:23:37
Gonzalo, te agradezco tu aporte.
Quería comentarte que lo que necesito es una Foreign key, desde una tabla de un esquema hacia otra tabla de otro esquema.
Para no repetir la estructura, hice una vista hacia la tabla del otro esquema.
Vos decís que no existe forma de hacer una restricción entre tablas de distintos esquemas?

Gracias nuevamente.
Nos vemos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Fk con una vista

Publicado por Gonzalo GC (339 intervenciones) el 29/04/2008 14:59:15
Insisto: Una vista, por definición del estadar SQL NO ES UNA TABLA. Es un SELECT precompialado que se vuelve a ejecutar cada vez que lo convocas.
En esencia es una tabla en memoria cuyos valores conservan las propiedades de origen.
De hecho, si haces un DESCRIBE Tabla;, vas a ver que algunos de los campos pueden aparecer como PK o FK. Eso es porque lo son en su tabla de origen, pero no significa que la tabla exista físicamente. Y no se puede definir un índice sobre una tabla virtual. La misma simplemente es una transacción que se lee en memoria.
Si, además, abres el MySQL Administrator, verás que las vistas no aparecen en la lista de tablas.

Respecto a crear una FK originada en otra base de datos, te sugiero que intentes, con el MySQL Administrator, el MySQL Qwery Browser, el MySQL Visual Studio, phpMyAdmin o cualquier interfase, crearle a una tabla cualquiera una FK referida a una tabla de otra base, aunque esté en la misma PC. Simplemente no te las va a mostrar.
Las relaciones entre tablas se almacenan en la definición de los diccionarios de cada base. No son compartidos, ni aunque todos se almacenen en la base /schemas.

La solución que estás buscando la vas a tener que lograr via código en la aplicación. Yo no veo otra solución.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Fk con una vista

Publicado por Diego (3 intervenciones) el 29/04/2008 22:05:26
Gonzalo te agradezco nuevamente tu tiempo.
Te cuento que los tres sistemas corren sobre tres motores ( ORACLE - MySQL - SQL Server ) y, gracias en gran parte de Hibernate, el sistema funcionaba perfecto sin hacer cambios.
Surgió el problema de las tablas compartidas entre esquemas y lo solucionamos con las vistas, pero nos dimos cuenta del pequeño detalle que no ibamos a poder tener claves foráneas.
Hasta ahora las soluciones que encontramos es:
1) la que proponés vos, manteniendo la integridad a nivel de código.
2) dejar el manejo de la integridad a nivel de base de datos mediante triggers, no permitiendo borrar si se está usando ni crear una relación con un id inexistente.

Gracias de nuevo.
Nos vemos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar