none
Consulta para crear DB y Relaciones RRS feed

  • Pregunta

  • Hola gente, el problema es el siguiente, no tengo mucha experiencia en el tema estoy aprendiendo de a poco y resulta que tengo que hacer un programa q me pidieron y estoy bastante confundido sobre como seria la mejor manera de hacer las relaciones. El programa consiste en varios clientes (solo razón social no hace falta otra cosa), cada cliente puede tener varias lista de precios (deben poseer la fecha en la que se creo para después consultarlas), en definitiva todas las listas y clientes comparten los mismos productos, y cada producto puede o no llevar diversos materiales con su correspondiente costo y cantidad, osea de 10 productos tal vez 2 lleven materiales para hacerlos y otros no.

    Para que se hagan una idea la cosa era poner un combobox q se cargue con los clientes (se elige el q se desea) y la grilla carga la ultima lista, la mas actual. alado otro combo box con las fechas de todas las listas de ese cliente para seleccionar alguna en caso de que quiera ver alguna anterior.

    Espero haberme echo entender y q puedan ayudarme. Gracias.


    domingo, 12 de marzo de 2017 4:39

Respuestas

  • pablo1251,

    Como recomendación, primero concéntrate en las especificaciones funcionales de negocio y en base a ello ensaya un modelo de datos, olvídate por el momento de la forma. La creación de objetos que te he proporcionado es un punto de inicio para lo que deseas realizar, no es para que lo tomes a "raja-tabla", de seguro habrá columnas, tablas, restricciones, etc. que quitar, agregar o modificar, eres tú quien conoce de los requerimientos.

    Te sugiero hagas un primer bosquejo de un modelo de datos y sobre eso podemos discutir hasta lograr el modelo adecuado según tus requerimientos.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 12 de marzo de 2017 22:54

Todas las respuestas

  • pablo1251,

    Creo que podrías iniciar con el siguiente modelo de tablas y relaciones:

    CREATE TABLE Cliente(
        idCliente int PRIMARY KEY, 
        RazonSocial nvarchar(100)
    )
    GO
    CREATE TABLE Producto(
        idProducto int PRIMARY KEY, 
        Codigo varchar(20),
        Producto varchar(100)
    )
    GO
    CREATE TABLE Material(
        idMaterial int PRIMARY KEY, 
        idProducto int REFERENCES dbo.Producto(idProducto), 
        Descripcion varchar(100)
    )
    GO
    CREATE TABLE ListaPrecios(
        idLista int PRIMARY KEY, 
        CodigoLista varchar(20)
    )
    GO
    CREATE TABLE CabLista(
        idCabLista int PRIMARY KEY,
        idLista int REFERENCES dbo.ListaPrecios(idLista),
        Fecha date
    )
    GO
    CREATE TABLE Precios(
        idPrecio int PRIMARY KEY,
        idCabLista int REFERENCES dbo.CabLista(idCabLista),
        Precio decimal(9,2)
    )
    GO
    CREATE TABLE Cliente_ListaPrecios(
        idCliente int,
        idLista int,
        CONSTRAINT PK_NombrePK PRIMARY KEY CLUSTERED (idCliente,idLista),
        CONSTRAINT FK_NombreFK1 FOREIGN KEY (idCliente) REFERENCES dbo.Cliente (idCliente),
        CONSTRAINT FK_NombreFK2 FOREIGN KEY (idLista) REFERENCES dbo.ListaPrecios (idLista)
    )
    GO

    Respecto a como muestras las listas de precio por cliente, veo innecesario que tengas un desplegable para la lista actual y otra para las listas no vigentes, ¿es posible tener un sólo desplegable donde la primera opción seleccionada sea la lista vigente?, por ejemplo las últimas 10 listas ordenadas por fecha de lanzamiento teniendo prioridad la lista vigente.

    SELECT TOP(10)
        CONCAT(lp.Descripcion, ' - ', cl.Fecha)
    FROM
        ListaPrecios lp
        INNER JOIN CabLista cl ON (lp.idLista = cl.idLista)
        INNER JOIN Cliente_ListaPrecios clp ON (lp.idLista = clp.idLista)
    	   AND (clp.idCliente = @idCliente)
    ORDER BY
        cl.Fecha DESC;
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 12 de marzo de 2017 14:52
  • Hola muchas gracias por tu respuesta, lo que dijiste es correcto, yo digo que haya un combo con los clientes y otro combo con las fechas de las listas, y yo elijo la q quiero para verla en la grilla, como decís puedo hacer para q cuando se cargue el combo se ponga sola la fecha mas actual, hasta ahí bien. Por otro lado no se en q momento usarías el campo CodigoLista de Lista de Precios, hay tanto id q me estoy mareando jaja pero hay algo que no especifique que no logro entender. te pongo un ejemplo 2 Clientes, 3 Listas c/u con sus fechas distintas, 10 productos en total y 2 de ellos llevan 5 materiales c/u. La tabla materiales ademas de llevar los nombres de los materiales q pueden ser mas de uno tienen su costo y cantidad, puede ser tornillos, 5$ y cantidad 100.

    En la grilla yo quería ver algo así:

    Código del producto, descripción, mano de obra (que seria el precio), costo total (que seria el total del costo de los materiales que lleve ese producto, sino lleva seria 0 y sino seria el que corresponda) y ganancia (teniendo que restar la mano de obra menos el costo total que llevo hacer ese producto). 

    A la hora de crear una nueva lista en un textbox o algo pongo el porcentaje de recargo que quiero hacerle y los precios se cambian y luego apreto un botón para crearla con los precios nuevos de mano de obra y su respectiva fecha de creación, pero en esa lista no solo se debería guardar el precio nuevo que seria el campo mano de obra sino tmb el de los costos de los materiales que lleven los productos que tmb pueden aumentar obviamente. Creo que debería haber algún tipo de relación, me estoy volviendo loco.





    • Editado pablo1251 domingo, 12 de marzo de 2017 19:17
    domingo, 12 de marzo de 2017 19:05
  • pablo1251,

    Como recomendación, primero concéntrate en las especificaciones funcionales de negocio y en base a ello ensaya un modelo de datos, olvídate por el momento de la forma. La creación de objetos que te he proporcionado es un punto de inicio para lo que deseas realizar, no es para que lo tomes a "raja-tabla", de seguro habrá columnas, tablas, restricciones, etc. que quitar, agregar o modificar, eres tú quien conoce de los requerimientos.

    Te sugiero hagas un primer bosquejo de un modelo de datos y sobre eso podemos discutir hasta lograr el modelo adecuado según tus requerimientos.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 12 de marzo de 2017 22:54
  • Si, entiendo lo que me decís pero a veces no puedo evitar pensar en la forma ya que cambia la estructura de la base de datos o eso creo. Al final los productos se van a separar por cliente. Mira...


    Hasta ahí esta bien, hay varios clientes, con distintas listas, donde cada lista va a tener su fecha para consultar. mi problema viene con los productos, materiales y los precios. Los productos con sus respectivos materiales van a ser por cada cliente. Los datos de los productos serian (código, descripción y precio) y de los materiales (descripción, cantidad y costo). Como se ve en la imagen faltan lo que serian los precios, no se de que manera unirlos a todo esto, porq en definitiva cuando yo consulte las listas lo único q cambiaría son los precios y cuando cree una lista nueva tmb estaria insertando solo precios nuevos, no todos los productos devuelta, por eso creo q los precios deben estar en tablas distintas no se si se entiende.

    La tabla de los precios de productos y materiales deberían estar relacionadas porq cada producto puede tener varios materiales, tmb deberían estar relacionadas con la tabla de productos y materiales para saber de q producto es cada precio, y por ultimo tmb debería estar relacionada de alguna manera con la tabla de listas para q sepa de q lista son esos precios, pero no tengo idea como unir todo.

    Perdon por el quilombo pero si no hago bien las tablas no puedo hacer nada.



    • Editado pablo1251 sábado, 18 de marzo de 2017 5:59
    sábado, 18 de marzo de 2017 5:56