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

[SOLUCIONADO] creacion de vista

Estas en el tema de creacion de vista en el foro de SQL Server en Foros del Web. a ver si me pueden ayudar con el código para crear una vista. En una tabla 1 tengo una columna llamada "Elemento" En una tabla ...
  #1 (permalink)  
Antiguo 23/12/2014, 22:49
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 8 meses
Puntos: 31
creacion de vista

a ver si me pueden ayudar con el código para crear una vista.

En una tabla 1 tengo una columna llamada "Elemento"
En una tabla 2 tengo dos columnas, una llamada "Tipo" y otra "Codigo1" (en el que asigno un código a cada tipo de elemento.
En una tabla 3 tengo también dos columnas, llamadas "Subtipo" y otra "Codigo2"
En una tabla 4 tengo también dos columnas, llamadas "SubSubtipo" y otra "Codigo3"
En otra tabla 5 tengo también dos columnas, llamadas "SubSubSubtipo" y otra "Codigo4"

Las tablas 2,3,4 y 5 son de solo lectura y ya tienen los datos necesarios (los diferentes tipos, subtipos, subsubtipos, etc.)

Ahora me he creado una vista (Vista1) para introducir datos, o más bien para introducir datos en Tabla 1 "Elementos" y relacionarlos con los de tabla 2,3,4 y 5. En dicha vista incluyo:
Columna1: De Tabla 1: Elemento
Columna2: De Tabla 2: Tipo
Columna3: De Tabla 3: Subtipo
Columna4: De Tabla 4: SubSubtipo
Columna5: De Tabla 5: SubSubSubtipo.

Y ahora lo que quiero es crear otra vista (Vista2) para consultas, la cual incluya:
Columna1 "Elemento": De vista1: columna1 (Que viene a ser Columna Elemento de tabla1)
Columna2 "Código": Codigo1+Codigo2+Codigo3+Codigo4 (Concatenación del texto de esas columnas de sus respectivas tablas según la asociación establecida en vista1)

Alguien sabría como hacer esto? Con el código exacto para hacerlo?

PD: Todas las tablas tienen una columna a parte de las mencionadas llamada Id con un int autonumérico (Un índice)
PD2: Quiero que un elemento pueda estar asociado a uno o varios tipos, subtipos, etc.
PD3: Es aconsejable guardar el código (la concatenación de codigo1,codigo2, etc) en la misma tabla de elementos? Si es así... como se podría hacer eso? (Si es necesario se pueden hacer nuevas columnas en Tabla1 para los distintos posibles códigos)

Última edición por Kritik; 23/12/2014 a las 22:57
  #2 (permalink)  
Antiguo 26/12/2014, 07:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: creacion de vista

que entiendes por vista??? dices que una vista par insertar, ese es un concepto desconocido para mi jejejejeje, y puedes poner un poco de los datos que tienes y lo que quieres obtener para poder darte una respuesta con "codigo exacto" como tu mencionas???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 26/12/2014, 18:06
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 8 meses
Puntos: 31
Respuesta: creacion de vista

Cita:
Iniciado por Libras Ver Mensaje
que entiendes por vista??? dices que una vista par insertar, ese es un concepto desconocido para mi jejejejeje, y puedes poner un poco de los datos que tienes y lo que quieres obtener para poder darte una respuesta con "codigo exacto" como tu mencionas???
Columna1: De Tabla 1: Elemento
Columna2: De Tabla 2: Tipo
Columna3: De Tabla 3: Subtipo
Columna4: De Tabla 4: SubSubtipo
Columna5: De Tabla 5: SubSubSubtipo.

Tabla 1.- Elementos
Columna Id Columna Elemento
1 Tornillos
2 Tuercas

Tabla 2.- Tipos
Columna Id Columna Tipo
1 Ferreteria
2 Fontanería
3 Electrónica

Tabla 3.- Subtipo
Columna Id Columna SubTipo
1 Tornillería
2 Herramientas
3 Pegamentos
4 Juntas
5 Boyas cisternas

Tabla 4.- SubSubtipo
Columna Id Columna SubSubTipo
1 Maderas
2 Aceros
3 Destornilladores
4 Martillos
5 Siliconas frias
6 Siliconas calientes



Cada vez que vamos a una tabla inferior (con un sub más) tenemos todas las divisiones de todos los tipos de la tabla superior. Por ejemplo, en tabla 3 (subtipos) tenemos todos los subtipos del registro 1, ferretería. Pero también tenemos todos los subtipos del registro 2, Fontanería.

Tienen que estar organizados así porque el mismo elemento puede ser catalogado de, por ejemplo, ferretería y fontanería. Por ejemplo, una misma tuerca puede servir para fijar una llave de gas... pero también para fijar una llave de agua. Además, hay subtipos que pertenecen a 2 tipos a la vez.

En cuanto a lo que es la vista... en SQL Server 2008 hay un tipo de tabla llamada "vista". Según me han dicho estas tablas son consultas pre-hechas que guardan sus resultados en memoria, por lo que consultarlas es mucho más rápido.

Estoy un poco perdido a la hora de hacer las relaciones. No se si he hecho bien haciendo una de estas vistas. Lo que quiero es poder dar de alta un elemento, por ejemplo, un tornillo... y que se genere un nuevo registro en mi tabla de elementos, y luego guardar la relación de los tipo/s, subtipo/s y subsubtipos a los cuales pertenece.

He hecho distintas tablas para tipos, subtipos, subsubtipos porque son datos que siempre van a estar muy repetidos... y me dijeron que en una BBDD cuanto menos se repitan los datos mejor.

Por último comentar que, como los tipos, subtipos, etc son siempre los mismos... pues tienen un número de registros fijos. Esos no van a cambiar. (Y ya he puesto esas tablas como solo lectura para el usuario que va a acceder a la BBDD)

Y como mencioné antes... todas las tablas, salvo la de elementos lleva un campo "Codigo1" (para tabla 2), "Código2" (para tabla 3) etc.

Y lo que quiero obtener en última instancia es un listado completo de todos los elementos con sus códigos asociados y ordenados primero numéricamente por el código y después alfabéticamente por el nombre del elemento, por ejemplo:

Elemento - Codigo

Martillo - 01010002
Tornillo - 01010002
Tuerca - 01010002
Tuerca - 01010003
Tornillo - 01020101
Tuerca - 01020102
Tuerca - 01020103


(Y dichos códigos finales son la concatenación de los códigos de los distintos tipos, subtipos, etc. De forma que solo viendo el código final se puede saber qué tipo de elemento es... pues los 2 primeros dígitos son el tipo, los 2 siguientes el subtipo, los 2 siguientes el subsubtipo y los 2 últimos el subsubsubtipo)

Si tengo que cambiar cualquier cosa de lo que ya tengo hecho coméntamelo y lo cambio.

Última edición por Kritik; 26/12/2014 a las 18:51
  #4 (permalink)  
Antiguo 29/12/2014, 09:03
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: creacion de vista

Primero, las vistas no son para inserciones, lo que quieres lograr ahi se lograria con un trigger en dado caso, segundo, creo que te estas complicando tu solo, a lo que veo de tu problema este se podria solucionar con menos tablas o con las tablas acomodadas de una diferente manera.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 05/01/2015, 21:09
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 8 meses
Puntos: 31
Respuesta: creacion de vista

Cita:
Iniciado por Libras Ver Mensaje
Primero, las vistas no son para inserciones, lo que quieres lograr ahi se lograria con un trigger en dado caso, segundo, creo que te estas complicando tu solo, a lo que veo de tu problema este se podria solucionar con menos tablas o con las tablas acomodadas de una diferente manera.....
He organizado las tablas de otra manera. Ahora inserto datos únicamente en una tabla. La vista analiza datos que coincidan entre tablas para mostrar los resultados que busco, y me genera una tabla con dichos resultados... de la cual extraigo yo la información deseada.

Etiquetas: tabla, vista
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 12:00.