Bases de Datos - Sistema de Inventario

   
Vista:

Sistema de Inventario

Publicado por Oscar Danilo (7 intervenciones) el 29/10/2015 22:17:22
Hola Muy buenas tardes estimados compañeros, espero puedan ayudarme, estoy desarrollando una Bd de Inventario en SQL 2012 tengo una base de datos con la siguiente estructura:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Create Table MEDIDAS(
 Id_Medida
 Descripcion
 Usuario_Creacion
)
 
Create Table MATERIALES(
Id_Material
Nombre
Medida
Usuario_Creacion )
 
 
Create Table BODEGA(
Id_Bodega
Nombre_Bodega
Usuario_Creacion )
 
Create Table DETBODEGA(
Id
Id_Bodega
Id_Material
No_Documento
Medida
Cantidad
Fecha
Observaciones
Transaccion(Entradas o Salidas)
Usuario_Creacion )

- ¿Qué consejo me darían sobre ésta estructura?
- ¿Es conveniente en la tabla DETBODEGA se guarden todas las transacciones?
-¿Siguiendo ésta estructura, como creo mi consulta sql de inventario(Entradas y Salidas)? de manera no caer en el duplicado de datos.

De antemano agradeciendo su ayuda.
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

Sistema de Inventario

Publicado por Juan R. (39 intervenciones) el 30/10/2015 14:42:17
Buenas Oscar

No controlo SQL Server (imagino que te refieres a éste), pero por los campos que pones creo que te faltaría una tabla usuarios (por lo de Usuario_creacion). Por otra parte, si la única diferencia entre entrada y salida es que ponga "entrada" o "salida" entonces, en mi humilde opinión, yo creo que sí que puede ir en esa tabla; aunque es más útil de cara a por ejemplo eliminar todas las transacciones de un tipo que crees una tabla que se llame "transacciones" de manera que si cambias un tipo de transacción allí, te actualice automáticamente el campo de la tabla DETBODEGA (también es cierto que esto lo puedes hacer con una consulta SQL, así que como prefieras).

De todas formas, en las tablas no tendrías que poner el tipo de datos de cada campo y como se relacionan las tablas? Claves primarias, etc???

Un saludo y espero haberte ayudado algo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Sistema de Inventario

Publicado por Oscar Danilo (7 intervenciones) el 30/10/2015 17:31:10
Hola muy buenos días Juan R.; este es mi Diagrama ER completo.

Diagrama-ER

teniendo en cuenta tu muy útil comentario, tengo consultas para hacer referencia a la suma de cada caso o transacción:

En el Caso de Entradas:

SELECT BG.Nombre_Bodega AS Bodega , M.Nombre AS Producto, SUM(DTBG.CANTIDAD) as Entradas
FROM DETBODEGA DTBG
INNER JOIN BODEGA BG ON BG.Id_Bodega=DTBG.Id_Bodega
INNER JOIN MATERIALES M ON M.Id_Material=DTBG.Id_Material
INNER JOIN MEDIDAS ME ON ME.Id_Medida=DTBG.Medida
WHERE DTBG.Transaccion='E'
GROUP BY BG.Nombre_Bodega, M.Nombre

En el Caso de Salidas:

SELECT BG.Nombre_Bodega AS Bodega , M.Nombre AS Producto, SUM(DTBG.CANTIDAD) as Entradas
FROM DETBODEGA DTBG
INNER JOIN BODEGA BG ON BG.Id_Bodega=DTBG.Id_Bodega
INNER JOIN MATERIALES M ON M.Id_Material=DTBG.Id_Material
INNER JOIN MEDIDAS ME ON ME.Id_Medida=DTBG.Medida
WHERE DTBG.Transaccion='S'
GROUP BY BG.Nombre_Bodega, M.Nombre

Mi pregunta es, como realizar un consulta que me muestre los datos obtenidos de la tabla DETBODEGA de la siguiente manera:

Bodega| Producto| Entradas| Salidas| Saldo|
xxxx xxxx xxxx xxx xxxx

De antemano, saludos
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

Sistema de Inventario

Publicado por Oscar Danilo (7 intervenciones) el 04/11/2015 02:51:42
Hola muy buenas noches estimados todos, luego de leer(Desvelarme) muchas líneas de código en otros foros y consultar a varias libros SQL, encontré gracias a este enlace http://www.lawebdelprogramador.com/foros/SQL/1472042-Sumar-y-Restar-una-misma-columna.html; publicado por Rafael (61 intervenciones) el 28/11/2014 13:45:40 la solución que tanto busqué.

He aquí el código por si le sirvé a alguién más...

SELECT B.Nombre_Bodega , M.Nombre , ME.Descripcion ,
SUM(CASE WHEN TRANSACCION='E' THEN DB.Cantidad ELSE 0 END) Entradas,
SUM(CASE WHEN TRANSACCION='S' THEN DB.Cantidad ELSE 0 END) Salidas,
(SUM(CASE WHEN TRANSACCION='E' THEN DB.Cantidad ELSE 0 END)- SUM(CASE WHEN TRANSACCION='S' THEN DB.Cantidad ELSE 0 END)) Saldo
FROM DETBODEGA DB
INNER JOIN MEDIDAS ME ON ME.Id_Medida=DB.Medida
INNER JOIN MATERIALES M ON M.Id_Material=DB.Id_Material
INNER JOIN BODEGA B ON B.Id_Bodega=DB.Id_Bodega
GROUP BY B.Nombre_Bodega , M.Nombre , ME.Descripcion

Saludos, y gracias nuevamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Sistema de Inventario

Publicado por Juan R. (39 intervenciones) el 04/11/2015 19:43:14
Buenas Oscar

Siento no haberte podido contestar antes, me alegra que encontrarás la solución en el post de Rafael.

Un saludo
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

Sistema de Inventario

Publicado por Oscar Danilo (7 intervenciones) el 07/11/2015 15:13:24
Muy buenos días estimado, ahora lo que me intriga es la optimización de las consultas, que consejos me pueden dar???
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