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

Creación de vistas pone nombre tabla por delante

Estas en el tema de Creación de vistas pone nombre tabla por delante en el foro de Mysql en Foros del Web. Hola Cuando creo una vista y la guardo al volverlaaha abrir para editar me ha puesto un montón de 'basura' como el nombre de la ...
  #1 (permalink)  
Antiguo 15/05/2011, 11:01
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 0
Creación de vistas pone nombre tabla por delante

Hola

Cuando creo una vista y la guardo al volverlaaha abrir para editar me ha puesto un montón de 'basura' como el nombre de la bbdd por delante y si pongo un * me lo transforma en cada uno de los campos de la tabla et...

Por ejemplo pongo select * from tabla1 y al editarlo me lo transforma en
select campo1, campo2, campo3 from bbdd.tabla1

Hay alguna manera de evitar ponga toda esta basura?

GRacias
  #2 (permalink)  
Antiguo 16/05/2011, 01:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Creación de vistas pone nombre tabla por delante

Basura, basura no es....

Puedes decirme para que quieres una vista como la que dices,

select * from tabla1

obvimente tienes la tabla...

Con que lo estas haciendo?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 16/05/2011, 03:36
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Creación de vistas pone nombre tabla por delante

Si pusieras select * from tabla en la vista y te respetara eso si agregarass un nuevo campo a la tabla no tienes que modificar la vista pq. ya te lo coge al ser *

Sin embargo como te cambia * por cada campo, si agregas campo a tabla has de ir a la vista y agregarle el campo tb... este es un ejemplo, has muchos más... por eso digo que es basura.. pq. entorpece el diseño de las vistas y requiere un mantenimiento innecesario

Esto en SQl Server está muy controlado y pensaba q en Mysql tb...
  #4 (permalink)  
Antiguo 16/05/2011, 04:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Creación de vistas pone nombre tabla por delante

Buen ejemplo, contrario de lo que pretende el motor, preservar la estructura de la vista.

Ten encuenta que Mysql soporta vistas solo desde su versión 5. Con lo que te quiero decir que es posible trabajar con la logica contraria a la actual pero hay razones para mantener la actual...

Las vistas estan pensadas para diseñar una interficie de consulta de los datos distinta a la de las tablas luego si los cambios en las tablas se reflejaran automaticamente te podria traer otros problemas. Por ejemplo si defines una vista para que un tipo de usuarios vean una info y otros no si al modificar la tabla se modificara la vista tendrias que ir a la definicion de usuarios para corregirla en funcion de esos cambios....

Una vista no es mas que un script de creación de una estructura virtual, solo tienes que conservar el script original, con los *, y ejecutarlo cuando agregues cosas a las tablas que quieras que se reflegen en las vistas. Agregale CREATE OR REPLACE VIEW...

El nombre de los campos en una vista igual que en las tablas deben ser unicos, luego una vista creada con *'s y que combinara distintas tablas (razon de ser de cualquier vista) obligaria al motor a controlar el espacio de nombres de todas las tablas implicadas cunado se quiera modificar la estructura de una de ellas...

Para ver por donde se puede desarrollar el tema yo mirari que hace ORACLE antes de comparar con MS Sql Server.

Una pista

Manual de ORACLE

Cita:
If the subquery uses an asterisk (*) to select all columns of a table, and you later add new columns to the table, then the view will not contain those columns until you re-create the view by issuing a CREATE OR REPLACE VIEW statement.

Por otro lado siempre puedes pasar de usar vistas y usar una query....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 16/05/2011 a las 05:29
  #5 (permalink)  
Antiguo 13/07/2011, 09:39
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Creación de vistas pone nombre tabla por delante

Gracias por la respuesta pero no me convences...

Pq si guardo SELECT * ha de cambiar a SELECT capo1, campo2? No señor! Si quisiera SELECT capo1, campo2 ya lo guadaría así... si digo guarda select * es pq. quiero select * y no otra cosa... lo que haga el motor, la filosofía, lo que diga oracle, etc... me parecen excusas

De todas maneras ya te digo, gracias pro responder y eso... no menosprecio tú respuesta, solo digo que la filosofía del motor de MySql para mi aun está bastante verde

Salu2
  #6 (permalink)  
Antiguo 13/07/2011, 09:56
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: Creación de vistas pone nombre tabla por delante

Si quieres, siempre tienes la oportunidad de bajarte el código fuente y modificarlo para que haga lo que tu quieres...

Pero sería buena idea que analizases por qué se implementó de esa forma; probablemente verías que las razones de esa forma tienen mucho que ver con la portabilidad de las bases de datos.
Una de las razones es que la definición de las tablas (y la vista es una tabla materializada en una consulta), se almacena en la base information_schema, en la cual cada componente está desglosado de una forma jerárquica. De allí que haya una tabla TABLES, otra DB, otra COLUMNS, otra TRIGGERS, etc.
Por cada tabla hay una X cantidad de registros de COLUMNS, con indicación de origen del dato y orden en la misma. Esto hace que el sistema deba registrar una a una las columnas y no puede registrar una columna "*", porque eso no representable. Si pretende ubicar esa columna dentro de la tabla origen, simplemente no la encontrará, porque no existe.
El problema es que si intentas hacer un algoritmo tal que sea posible sobre la base de un "*" reconstruir la tabla, según la definición de la vista, puedes meterte en un loop eterno, si la vista tiene JOINs. El sistema no puede permitir eso, y por tanto no le conviene almacenar la vista con una definición de ese tipo.
En otras palabras, lo que a tí te parece absurdo es necesario para darle calidad, eficiencia y precisión al sistema.
Si tu problema es que no quieres andar sacando y poniendo código cuando reeditas, haz lo mismo que yo: Guarda aparte los scripts que generan las vistas. Es la mejor solució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)

Etiquetas: creación, nombre, tabla, vistas
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 11:50.