none
Ejemplo para una consulta sencilla en SQL

    Question

  • Hola,

    Por favor me pueden colaborar con un ejemplo en SQL, es algo sencillo.

    Supongamos que tengo una BD con las siguientes tablas:

     

    TablaA                TablaB                     TablaC

    ID                        ID                            ID_TablaA

    Detalles                Descripcion               ID_TablaB

                                                               ID

    Si TablaC es una tabla maestra que contiene los ID de las otras tablas detalle, ¿Como hago para insertar un nuevo registro en esta tabla? ¿Cual tabla se debe actualizar primero, la maestra ó las de detalle?

    Muchas gracias.


    H. Alexander Restrepo Jimenez Microsoft Certified Professional(MCP)
    Thursday, January 20, 2011 1:59 AM

Answers

  • Hola, cuando utilizas este tipo de relacion, por lo general usaas Foreign Keys, donde el Id que se encuentra en la tabla c, referencia a cada id en las tablas relacionadas. Entiendase que debe existir primero en la tabla detalle o en las de relacion y luego en la tabla maestro.

    Esto que estas usando es mas conocido como Dimensiones, y haces referencia del Id para traer su descripcion o detalles peculiares.

    En respuesta final, si, primero debes insertar en la tabla detalle (si no existe), en caso de existir entonces ya vas directamente a la tabla maestra.

    Espero que te sirva.

    Willy Taveras.-

    IT Learn - Learning Together

    Thursday, January 20, 2011 3:56 AM
  • Hola,


    No veo la necesidad de porque utilizar la tabla tEquipoSoftware, no tiene cierta utilidad. En el caso que pudieras usar una tabla donde almacenar estos Id_tEquipos y ID_tSofware es en una tabla de compras, inventario o algo por el estilo, por ejemplo:


    Tengo las dos tablas:

    tEquipos y tSoftware, y tengo otra tabla Compras, en la tabla compra yo tendria un campo que sea Producto, que seria utilizado generico, pondría en la aplicación un DropDownList donde seleccionarian el tipo de producto, ya sea un Software o un Equipo y cuando  envie a Base de datos inserto el ID de dicho producto en la tabla de Compras, campo Producto, pero se agregaria un campo a la tabla Compras, donde se defina que tipo de producto es para obtener los detalles del mismo.

    Pero, para seguir con tu caso, si por ejemplo quisieras insertar en la tabla tEquipoSoftware  cada vez que se inserte en la tabla tEquipos  o tSoftware esto tendria que ser practicamente simultaneo, entiendase que insertes en ambas tablas al mismo tiempo porque sino alguno de los dos campos de ID quedaria nulo y eso te daria error.

    Lo que yo te recomiendo es que si vas a utilizar una tabla como tEquipoSoftware, tengas en cuenta que al tener un campo independiente para cada tipo de articulo (Software, Equipos), entonces debes insertar ambos registros, de no querer insertar ambos registros entonces debes quitar la referencia por Foreign Key, porque no te permitira un Null.


    Willy Taveras.-

    IT Learn - Learning Together

    Thursday, January 20, 2011 7:05 PM
  • Hola,

    He analizado lo que quieres lograr y no entiendo del todo, pero voy a presentarte un escenario:

    Imaginemos que tengo una tienda donde vendo Equipos (Desktops, Laptops, Mouse, etc...), y Sofwares (Windows, Office, etc...), al momento de generar la factura, yo seleccionaria el Equipo a comprar, dependiendo de esto se sabe si tiene Software o no, entonces ya vemos que no necesariamente un equipo puede traer Software. De igual forma yo podria comprar un equipo solo o un Software solo.

    En cierta forma trabajariamos ambos tipos de productos como Articulos, que en su categoria definen lo que son. Entiendase que tendriamos algo como:

    IdVenta      IdArticulo      IdCategoria


    Cuando seleccionamos las opciones de la aplicación para generar la factura de venta, entonces vamos definiendo lo que vamos a insertar en base de datos. Supongamos que tenemos dos categorias de articulos (Equipos y Software) y cada categoria la definimos como 1 y 2 en una tabla de Categorias:

    IdCategoria      Descripcion
    1                       Equipos

    2                       Software


    Luego tenemos el Software o Equipo que vamos a facturar, estos datos salen de la tabla que se vaya a usar, lo que depende del tipo de articulo seleccionado, entonces si por ejemplo seleccionamos Software, insertamos algo como esto:

    IdVenta  IdArticulo      IdCategoria
    01           1                  2

    Si realizamos otro ingreso a esta factura, pero en este caso elegimos Equipos, entonces ya tendriamos dos registros para dicha factura:

    IdVenta  IdArticulo      IdCategoria
    01           1                  2
    01           1                  1

    (El IdArticulo es cualquier articulo alojado en la tabla de Equipos o Sofware (Windows XP, Windows 7, en caso de Sofware, Servidor, Desktop, Laptop, Mouse, en caso de Equipos)

    Si en un futuro quisieramos seleccionar detalles de esta factura, entonces hacemos una consulta que relaciona la tabla de Ventas, Categorias, tSotfware y tEquipos, por ejemplo:


    Declare @tSoftware table(idSoftware int, Nombre varchar(10), sVersion varchar(10))
    Declare @tEquipos table(idEquipo int, Nombre varchar(10), Serial varchar(10))
    Declare @Ventas table (idVenta int, idArticulo int, idCategoria int, Monto money)
    Declare @Categorias table(idCategoria int, Descripcion varchar(20))
    
    Insert @tSoftware values(1, 'Windows', '7')
    Insert @tSoftware values(2, 'Windows', 'XP')
    Insert @tSoftware values(3, 'Office', '2010')
    
    Insert @tEquipos values(1, 'Desktop', 'S900100')
    Insert @tEquipos values(2, 'Teclado', 'S11100')
    Insert @tEquipos values(3, 'Laptop', 'S87111')
    
    Insert @Categorias values(1, 'Software')
    Insert @Categorias values(2, 'Equipos')
    
    Insert @Ventas values(1, 1, 2, 900)
    Insert @Ventas values(2, 2, 1, 850)
    
    Select V.idVenta, S.Nombre, '-' As Serial, S.sVersion, V.Monto
    From @Ventas V
    Inner Join @tSoftware S
    On V.idArticulo = S.idSoftware
    Inner Join @Categorias C
    On V.idCategoria = C.idCategoria
    Where V.idCategoria = 1
    Union all
    Select V.idVenta, E.Nombre, E.Serial, '-', V.Monto
    From @Ventas V
    Inner Join @tEquipos E
    On V.idArticulo = E.idEquipo
    Inner Join @Categorias C
    On V.idCategoria = C.idCategoria
    Where V.idCategoria = 2
    

    Si alguna de las respuestas anteriores aclara tu duda favor marcala para cerrar el hilo, si existe alguna duda alterna que sea diferente, favor abrir un nuevo hilo, asi cualquier persona que quiera consultar pueda ir directo por tema.

    Willy Taveras.-

    IT Learn - Learning Together

    • Marked as answer by alexrestrej Thursday, January 20, 2011 8:37 PM
    Thursday, January 20, 2011 8:18 PM

All replies

  • Hola, cuando utilizas este tipo de relacion, por lo general usaas Foreign Keys, donde el Id que se encuentra en la tabla c, referencia a cada id en las tablas relacionadas. Entiendase que debe existir primero en la tabla detalle o en las de relacion y luego en la tabla maestro.

    Esto que estas usando es mas conocido como Dimensiones, y haces referencia del Id para traer su descripcion o detalles peculiares.

    En respuesta final, si, primero debes insertar en la tabla detalle (si no existe), en caso de existir entonces ya vas directamente a la tabla maestra.

    Espero que te sirva.

    Willy Taveras.-

    IT Learn - Learning Together

    Thursday, January 20, 2011 3:56 AM
  • Hola, cuando utilizas este tipo de relacion, por lo general usaas Foreign Keys, donde el Id que se encuentra en la tabla c, referencia a cada id en las tablas relacionadas. Entiendase que debe existir primero en la tabla detalle o en las de relacion y luego en la tabla maestro.

    Esto que estas usando es mas conocido como Dimensiones, y haces referencia del Id para traer su descripcion o detalles peculiares.

    En respuesta final, si, primero debes insertar en la tabla detalle (si no existe), en caso de existir entonces ya vas directamente a la tabla maestra.

    Espero que te sirva.

    Willy Taveras.-

    IT Learn - Learning Together

    ¿Entonces al insertar en la tabla detalle también se inserta en la tabla maestra?

    Hector Alexander Restrepo Jimenez www.wix.com/alexrestrej/alexrestrej
    Thursday, January 20, 2011 6:04 PM
  • No entiendo.

    Voy a mostrar lo que estoy haciendo, que sugerencias me puedes dar. Estoy creando una BD que contenga el inventario de software que tiene el siguiente diseño(resumido):

     

    tEquipos         tEquipoSoftware    tSoftware

    ID                     ID                          ID

    Nombre             ID_tEquipos             Nombre

    Serial                ID_tSoftware           Versión

     

    Donde tEquipos y tSoftware son las tablas detalle, y tEquipoSoftware es la tabla maestra que tiene la relación de los equipos con el software. Revisé que los campos ID_tEquipos y ID_tSoftware de tEquipoSoftware estén como Foreign Keys.

    En las tablas tEquipos y tSoftware actualizan e ingresan registros bien pero no se como insertar en la de tEquipoSoftware.

     

     

     

     

     

     


    Hector Alexander Restrepo Jimenez www.wix.com/alexrestrej/alexrestrej
    Thursday, January 20, 2011 6:40 PM
  • Hola,


    No veo la necesidad de porque utilizar la tabla tEquipoSoftware, no tiene cierta utilidad. En el caso que pudieras usar una tabla donde almacenar estos Id_tEquipos y ID_tSofware es en una tabla de compras, inventario o algo por el estilo, por ejemplo:


    Tengo las dos tablas:

    tEquipos y tSoftware, y tengo otra tabla Compras, en la tabla compra yo tendria un campo que sea Producto, que seria utilizado generico, pondría en la aplicación un DropDownList donde seleccionarian el tipo de producto, ya sea un Software o un Equipo y cuando  envie a Base de datos inserto el ID de dicho producto en la tabla de Compras, campo Producto, pero se agregaria un campo a la tabla Compras, donde se defina que tipo de producto es para obtener los detalles del mismo.

    Pero, para seguir con tu caso, si por ejemplo quisieras insertar en la tabla tEquipoSoftware  cada vez que se inserte en la tabla tEquipos  o tSoftware esto tendria que ser practicamente simultaneo, entiendase que insertes en ambas tablas al mismo tiempo porque sino alguno de los dos campos de ID quedaria nulo y eso te daria error.

    Lo que yo te recomiendo es que si vas a utilizar una tabla como tEquipoSoftware, tengas en cuenta que al tener un campo independiente para cada tipo de articulo (Software, Equipos), entonces debes insertar ambos registros, de no querer insertar ambos registros entonces debes quitar la referencia por Foreign Key, porque no te permitira un Null.


    Willy Taveras.-

    IT Learn - Learning Together

    Thursday, January 20, 2011 7:05 PM
  • Utilizando sólo dos tablas, ¿Entonces como hago para tener una relación entre software y equipo?

    Por ejemplo,

    Si en la aplicacion consulto un equipo me muestre el software asociado ó viceversa.

     


    Hector Alexander Restrepo Jimenez www.wix.com/alexrestrej/alexrestrej
    Thursday, January 20, 2011 7:22 PM

  • Hola,


    No veo la necesidad de porque utilizar la tabla tEquipoSoftware, no tiene cierta utilidad. En el caso que pudieras usar una tabla donde almacenar estos Id_tEquipos y ID_tSofware es en una tabla de compras, inventario o algo por el estilo, por ejemplo:


    Tengo las dos tablas:

    tEquipos y tSoftware, y tengo otra tabla Compras, en la tabla compra yo tendria un campo que sea Producto, que seria utilizado generico, pondría en la aplicación un DropDownList donde seleccionarian el tipo de producto, ya sea un Software o un Equipo y cuando  envie a Base de datos inserto el ID de dicho producto en la tabla de Compras, campo Producto, pero se agregaria un campo a la tabla Compras, donde se defina que tipo de producto es para obtener los detalles del mismo.

    Pero, para seguir con tu caso, si por ejemplo quisieras insertar en la tabla tEquipoSoftware  cada vez que se inserte en la tabla tEquipos  o tSoftware esto tendria que ser practicamente simultaneo, entiendase que insertes en ambas tablas al mismo tiempo porque sino alguno de los dos campos de ID quedaria nulo y eso te daria error.

    Lo que yo te recomiendo es que si vas a utilizar una tabla como tEquipoSoftware, tengas en cuenta que al tener un campo independiente para cada tipo de articulo (Software, Equipos), entonces debes insertar ambos registros, de no querer insertar ambos registros entonces debes quitar la referencia por Foreign Key, porque no te permitira un Null.


    Willy Taveras.-

    IT Learn - Learning Together

    Como puedo diseñar mejor esta base de datos?

    Es que como mencionas "Lo que yo te recomiendo es que si vas a utilizar una tabla como tEquipoSoftware, tengas en cuenta que al tener un campo independiente para cada tipo de articulo (Software, Equipos), entonces debes insertar ambos registros" asi lo he estado trabajando y como no tengo conocimientos claros sobre procedimientos almacenados entonces en el momento solo tengo un montón de consultas simples de inserción.

     


    Hector Alexander Restrepo Jimenez www.wix.com/alexrestrej/alexrestrej
    Thursday, January 20, 2011 8:07 PM
  • Hola,

    He analizado lo que quieres lograr y no entiendo del todo, pero voy a presentarte un escenario:

    Imaginemos que tengo una tienda donde vendo Equipos (Desktops, Laptops, Mouse, etc...), y Sofwares (Windows, Office, etc...), al momento de generar la factura, yo seleccionaria el Equipo a comprar, dependiendo de esto se sabe si tiene Software o no, entonces ya vemos que no necesariamente un equipo puede traer Software. De igual forma yo podria comprar un equipo solo o un Software solo.

    En cierta forma trabajariamos ambos tipos de productos como Articulos, que en su categoria definen lo que son. Entiendase que tendriamos algo como:

    IdVenta      IdArticulo      IdCategoria


    Cuando seleccionamos las opciones de la aplicación para generar la factura de venta, entonces vamos definiendo lo que vamos a insertar en base de datos. Supongamos que tenemos dos categorias de articulos (Equipos y Software) y cada categoria la definimos como 1 y 2 en una tabla de Categorias:

    IdCategoria      Descripcion
    1                       Equipos

    2                       Software


    Luego tenemos el Software o Equipo que vamos a facturar, estos datos salen de la tabla que se vaya a usar, lo que depende del tipo de articulo seleccionado, entonces si por ejemplo seleccionamos Software, insertamos algo como esto:

    IdVenta  IdArticulo      IdCategoria
    01           1                  2

    Si realizamos otro ingreso a esta factura, pero en este caso elegimos Equipos, entonces ya tendriamos dos registros para dicha factura:

    IdVenta  IdArticulo      IdCategoria
    01           1                  2
    01           1                  1

    (El IdArticulo es cualquier articulo alojado en la tabla de Equipos o Sofware (Windows XP, Windows 7, en caso de Sofware, Servidor, Desktop, Laptop, Mouse, en caso de Equipos)

    Si en un futuro quisieramos seleccionar detalles de esta factura, entonces hacemos una consulta que relaciona la tabla de Ventas, Categorias, tSotfware y tEquipos, por ejemplo:


    Declare @tSoftware table(idSoftware int, Nombre varchar(10), sVersion varchar(10))
    Declare @tEquipos table(idEquipo int, Nombre varchar(10), Serial varchar(10))
    Declare @Ventas table (idVenta int, idArticulo int, idCategoria int, Monto money)
    Declare @Categorias table(idCategoria int, Descripcion varchar(20))
    
    Insert @tSoftware values(1, 'Windows', '7')
    Insert @tSoftware values(2, 'Windows', 'XP')
    Insert @tSoftware values(3, 'Office', '2010')
    
    Insert @tEquipos values(1, 'Desktop', 'S900100')
    Insert @tEquipos values(2, 'Teclado', 'S11100')
    Insert @tEquipos values(3, 'Laptop', 'S87111')
    
    Insert @Categorias values(1, 'Software')
    Insert @Categorias values(2, 'Equipos')
    
    Insert @Ventas values(1, 1, 2, 900)
    Insert @Ventas values(2, 2, 1, 850)
    
    Select V.idVenta, S.Nombre, '-' As Serial, S.sVersion, V.Monto
    From @Ventas V
    Inner Join @tSoftware S
    On V.idArticulo = S.idSoftware
    Inner Join @Categorias C
    On V.idCategoria = C.idCategoria
    Where V.idCategoria = 1
    Union all
    Select V.idVenta, E.Nombre, E.Serial, '-', V.Monto
    From @Ventas V
    Inner Join @tEquipos E
    On V.idArticulo = E.idEquipo
    Inner Join @Categorias C
    On V.idCategoria = C.idCategoria
    Where V.idCategoria = 2
    

    Si alguna de las respuestas anteriores aclara tu duda favor marcala para cerrar el hilo, si existe alguna duda alterna que sea diferente, favor abrir un nuevo hilo, asi cualquier persona que quiera consultar pueda ir directo por tema.

    Willy Taveras.-

    IT Learn - Learning Together

    • Marked as answer by alexrestrej Thursday, January 20, 2011 8:37 PM
    Thursday, January 20, 2011 8:18 PM