Aprende a programar un Sistema de Inventarios con net core y sql server

Resumen: Este es el primer artículo y video para aprender a programar con ASP.NET Core y base de datos SQL Server con un sistema de inventarios, en esta primera entrega aprenderás a diseñar una base de datos SQL Server relacional.
¿Qué es el diseño de una base de datos?
El diseño de bases de datos es un proceso que permite obtener una base de datos a partir de los requisitos iniciales de los usuarios y en este caso para el sistema de inventarios.
El diseño de la base de datos de inventarios incluye las siguientes tablas:
- Usuario: En esta tabla se almacenarán los usuarios del sistema de inventarios.
- Empresas: Almacena las empresas que quieren administrar sus inventarios y las empresas las dan de alta los usuarios anteriormente registrados en el sistema.
- Almacenes: En esta tabla se guardan los almacenes con los que cuenta una empresa y en donde se encuentra el inventario.
- Productos: En esta tabla se guarda la información de productos, cuando se registra por primera ocasión se puede establecer el stock inicial.
- Compras: Aquí se guardan la información general de las compras, como la fecha, el monto de la compra y el proveedor al que se le compro.
- Compra Productos: Almacena la información de los productos que se compraron en una compra determinada y que incrementa el stock o inventario de productos.
- Ventas: Almacena la información general de las ventas, como la fecha, el cliente y el monto total de la venta.
- Venta Productos: Almacena los productos que se vendieron en una venta determinada y decrementa el stock o el inventario de productos.
- Contactos: Almacena la información de los proveedores y los clientes.
Cómo crear la base de datos del sistema de inventarios
Para crear la base de datos debes ejecutar el siguiente código en el SQL Server
CREATE DATABASE [inventarios]
Crear las tablas del sistema de inventarios
Para crear las tablas copia el siguiente script y ejecútalo en tu SQL Server
USE [inventarios]
GO
/****** Object: Table [dbo].[Almacenes] Script Date: 30/06/2022 11:22:11 a. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Almacenes](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](150) NOT NULL,
[Direccion] [varchar](210) NULL,
[EmpresaId] [int] NOT NULL,
[Estatus] [bit] NOT NULL,
[Fecha] [date] NOT NULL,
CONSTRAINT [PK_Almacenes] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Compra_Productos] Script Date: 30/06/2022 11:22:11 a. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Compra_Productos](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ProductoId] [int] NOT NULL,
[Cantidad] [numeric](10, 2) NOT NULL,
[Total] [numeric](10, 2) NOT NULL,
[Fecha] [date] NOT NULL,
[UsuarioId] [int] NOT NULL,
[CompraId] [int] NOT NULL,
CONSTRAINT [PK_Compra_Productos] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Compras] Script Date: 30/06/2022 11:22:11 a. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Compras](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ProveedorId] [int] NOT NULL,
[Fecha] [date] NULL,
[CodigoFactura] [varchar](20) NOT NULL,
[Total] [numeric](10, 2) NOT NULL,
[Estatus] [bit] NOT NULL,
[EmpresaId] [int] NOT NULL,
[UsuarioId] [int] NOT NULL,
CONSTRAINT [PK_Compras] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Contactos] Script Date: 30/06/2022 11:22:11 a. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Contactos](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](150) NOT NULL,
[Direccion] [varchar](210) NOT NULL,
[Telefono] [varchar](50) NULL,
[Extension] [varchar](20) NULL,
[Email] [varchar](120) NULL,
[Fecha] [date] NOT NULL,
[Tipo] [varchar](50) NOT NULL,
[Estatus] [varchar](25) NOT NULL,
[EmpresaId] [int] NOT NULL,
[UsuarioId] [int] NOT NULL,
CONSTRAINT [PK_Contactos] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Empresas] Script Date: 30/06/2022 11:22:11 a. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Empresas](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](250) NOT NULL,
[Estatus] [bit] NOT NULL,
[Fecha] [date] NOT NULL,
[UsuarioId] [int] NOT NULL,
CONSTRAINT [PK_Empresas] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Productos] Script Date: 30/06/2022 11:22:11 a. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Productos](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Codigo] [varchar](50) NOT NULL,
[Nombre] [varchar](150) NOT NULL,
[Descripcion] [varchar](450) NULL,
[Modelo] [varchar](150) NULL,
[Presentacion] [varchar](100) NULL,
[Marca] [varchar](150) NULL,
[Costo] [numeric](6, 2) NOT NULL,
[PrecioVenta] [numeric](6, 2) NOT NULL,
[Stock] [numeric](10, 2) NOT NULL,
[Estatus] [bit] NOT NULL,
[EmpresaId] [int] NOT NULL,
[AlmacenId] [int] NULL,
[UsuarioId] [int] NOT NULL,
CONSTRAINT [PK_Productos] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Usuarios] Script Date: 30/06/2022 11:22:11 a. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Usuarios](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](250) NOT NULL,
[Email] [varchar](110) NOT NULL,
[RolId] [int] NOT NULL,
[Password] [varchar](250) NOT NULL,
[Estatus] [bit] NOT NULL,
CONSTRAINT [PK_Usuarios] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Venta_Productos] Script Date: 30/06/2022 11:22:11 a. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Venta_Productos](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ProductoId] [int] NOT NULL,
[Cantidad] [numeric](10, 2) NOT NULL,
[Total] [numeric](10, 2) NOT NULL,
[Fecha] [date] NOT NULL,
[UsuarioId] [int] NOT NULL,
[VentaId] [int] NOT NULL,
CONSTRAINT [PK_Venta_Productos] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Ventas] Script Date: 30/06/2022 11:22:11 a. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Ventas](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Fecha] [date] NOT NULL,
[ContactoId] [int] NOT NULL,
[CodigoFactura] [varchar](20) NOT NULL,
[Total] [numeric](10, 2) NOT NULL,
[Estatus] [bit] NOT NULL,
[EmpresaId] [int] NOT NULL,
[UsuarioId] [int] NOT NULL,
CONSTRAINT [PK_Ventas] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Almacenes] WITH CHECK ADD CONSTRAINT [FK_Almacenes_Empresas] FOREIGN KEY([EmpresaId])
REFERENCES [dbo].[Empresas] ([Id])
GO
ALTER TABLE [dbo].[Almacenes] CHECK CONSTRAINT [FK_Almacenes_Empresas]
GO
ALTER TABLE [dbo].[Compra_Productos] WITH CHECK ADD CONSTRAINT [FK_Compra_Productos_Compras] FOREIGN KEY([CompraId])
REFERENCES [dbo].[Compras] ([Id])
GO
ALTER TABLE [dbo].[Compra_Productos] CHECK CONSTRAINT [FK_Compra_Productos_Compras]
GO
ALTER TABLE [dbo].[Compra_Productos] WITH CHECK ADD CONSTRAINT [FK_Compra_Productos_Productos] FOREIGN KEY([ProductoId])
REFERENCES [dbo].[Productos] ([Id])
GO
ALTER TABLE [dbo].[Compra_Productos] CHECK CONSTRAINT [FK_Compra_Productos_Productos]
GO
ALTER TABLE [dbo].[Compra_Productos] WITH CHECK ADD CONSTRAINT [FK_Compra_Productos_Usuarios] FOREIGN KEY([UsuarioId])
REFERENCES [dbo].[Usuarios] ([Id])
GO
ALTER TABLE [dbo].[Compra_Productos] CHECK CONSTRAINT [FK_Compra_Productos_Usuarios]
GO
ALTER TABLE [dbo].[Compras] WITH CHECK ADD CONSTRAINT [FK_Compras_Contactos] FOREIGN KEY([ProveedorId])
REFERENCES [dbo].[Contactos] ([Id])
GO
ALTER TABLE [dbo].[Compras] CHECK CONSTRAINT [FK_Compras_Contactos]
GO
ALTER TABLE [dbo].[Compras] WITH CHECK ADD CONSTRAINT [FK_Compras_Empresas] FOREIGN KEY([EmpresaId])
REFERENCES [dbo].[Empresas] ([Id])
GO
ALTER TABLE [dbo].[Compras] CHECK CONSTRAINT [FK_Compras_Empresas]
GO
ALTER TABLE [dbo].[Compras] WITH CHECK ADD CONSTRAINT [FK_Compras_Usuarios] FOREIGN KEY([UsuarioId])
REFERENCES [dbo].[Usuarios] ([Id])
GO
ALTER TABLE [dbo].[Compras] CHECK CONSTRAINT [FK_Compras_Usuarios]
GO
ALTER TABLE [dbo].[Contactos] WITH CHECK ADD CONSTRAINT [FK_Contactos_Empresas] FOREIGN KEY([EmpresaId])
REFERENCES [dbo].[Empresas] ([Id])
GO
ALTER TABLE [dbo].[Contactos] CHECK CONSTRAINT [FK_Contactos_Empresas]
GO
ALTER TABLE [dbo].[Contactos] WITH CHECK ADD CONSTRAINT [FK_Contactos_Usuarios] FOREIGN KEY([UsuarioId])
REFERENCES [dbo].[Usuarios] ([Id])
GO
ALTER TABLE [dbo].[Contactos] CHECK CONSTRAINT [FK_Contactos_Usuarios]
GO
ALTER TABLE [dbo].[Empresas] WITH CHECK ADD CONSTRAINT [FK_Empresas_Usuarios] FOREIGN KEY([UsuarioId])
REFERENCES [dbo].[Usuarios] ([Id])
GO
ALTER TABLE [dbo].[Empresas] CHECK CONSTRAINT [FK_Empresas_Usuarios]
GO
ALTER TABLE [dbo].[Productos] WITH CHECK ADD CONSTRAINT [FK_Productos_Almacenes] FOREIGN KEY([AlmacenId])
REFERENCES [dbo].[Almacenes] ([Id])
GO
ALTER TABLE [dbo].[Productos] CHECK CONSTRAINT [FK_Productos_Almacenes]
GO
ALTER TABLE [dbo].[Productos] WITH CHECK ADD CONSTRAINT [FK_Productos_Empresas] FOREIGN KEY([EmpresaId])
REFERENCES [dbo].[Empresas] ([Id])
GO
ALTER TABLE [dbo].[Productos] CHECK CONSTRAINT [FK_Productos_Empresas]
GO
ALTER TABLE [dbo].[Productos] WITH CHECK ADD CONSTRAINT [FK_Productos_Usuarios] FOREIGN KEY([UsuarioId])
REFERENCES [dbo].[Usuarios] ([Id])
GO
ALTER TABLE [dbo].[Productos] CHECK CONSTRAINT [FK_Productos_Usuarios]
GO
ALTER TABLE [dbo].[Venta_Productos] WITH CHECK ADD CONSTRAINT [FK_Venta_Productos_Productos] FOREIGN KEY([ProductoId])
REFERENCES [dbo].[Productos] ([Id])
GO
ALTER TABLE [dbo].[Venta_Productos] CHECK CONSTRAINT [FK_Venta_Productos_Productos]
GO
ALTER TABLE [dbo].[Venta_Productos] WITH CHECK ADD CONSTRAINT [FK_Venta_Productos_Usuarios] FOREIGN KEY([UsuarioId])
REFERENCES [dbo].[Usuarios] ([Id])
GO
ALTER TABLE [dbo].[Venta_Productos] CHECK CONSTRAINT [FK_Venta_Productos_Usuarios]
GO
ALTER TABLE [dbo].[Venta_Productos] WITH CHECK ADD CONSTRAINT [FK_Venta_Productos_Ventas] FOREIGN KEY([VentaId])
REFERENCES [dbo].[Ventas] ([Id])
GO
ALTER TABLE [dbo].[Venta_Productos] CHECK CONSTRAINT [FK_Venta_Productos_Ventas]
GO
ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [FK_Ventas_Contactos] FOREIGN KEY([ContactoId])
REFERENCES [dbo].[Contactos] ([Id])
GO
ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [FK_Ventas_Contactos]
GO
ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [FK_Ventas_Empresas] FOREIGN KEY([EmpresaId])
REFERENCES [dbo].[Empresas] ([Id])
GO
ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [FK_Ventas_Empresas]
GO
ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [FK_Ventas_Usuarios] FOREIGN KEY([UsuarioId])
REFERENCES [dbo].[Usuarios] ([Id])
GO
ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [FK_Ventas_Usuarios]
GO
USE [master]
GO
ALTER DATABASE [inventarios] SET READ_WRITE
GO