Tablas – Claves Foráneas y Campos Calculados

Creación de Tablas relacionadas usando Foreign Keys

Las tablas en la base de datos están relacionadas entre sí a través de la clave primaria de una tabla y esta se convierte en clave foránea en la tabla con la que se relaciona.

Los campos calculados en las tablas permiten almacenar los datos que se calculan en base a los campos de la misma tabla, es recomendable en casos donde las consultas pueden resultar muy pesadas.

Al insertar los registros, los campos calculados no se debe incluir en la instrucción, estos se calculan de manera automática.

Diagrama para el ejercicio a desarrollar

 

Tablas Facturas, Productos, Detalle de Facturas, Clientes

Campos calculados

En este ejercicio se crean las tablas relacionadas usando Clave Foránea (Foreign Key), note primero que se crea la tabla Clientes que tiene como clave primaria el campo ClientesCodigo, además de la tabla Productos con su clave ProductosCodigo.

Create table Clientes
(ClientesCodigo nchar(15),
ClientesNombre nvarchar(100),
ClientesDireccion nvarchar(200),
constraint ClientesPK Primary key (ClientesCodigo) )
go

Create table Productos
(ProductosCodigo nchar(10),
ProductosDescripcion nvarchar(100) not null,
ProductosPrecio Numeric(9,2),
ProductosStock Numeric(9,2),
ProductosValorDelStock As (ProductosPrecio * ProductosStock)
constraint ProductosPK Primary key (ProductosCodigo) )
go



Al crear la tabla de Facturas se han incluido para el cálculo del Monto del impuesto y para el cálculo del monto total de la factura dos campos calculados. Estos campos no se especifican al insertar el registro.(Ver Insert)

Create table Facturas
(FacturasNumeroSerie nchar(5), FacturasNumeroFactura nchar(7),
FacturasFecha DateTime, FacturasMontoSinIGV Numeric(9,2),
FacturasPorcentajeDeIGV Numeric(8,5),
ClientesCodigo nchar(15),
FacturasMontoIGV As (FacturasMontoSinIGV * FacturasPorcentajeDeIGV),
FacturasMontoTotal As (FacturasMontoSinIGV + FacturasMontoSinIGV * FacturasPorcentajeDeIGV )
constraint FacturasPK primary key (FacturasNumeroSerie, FacturasNumeroFactura),
constraint FacturasClienteFK Foreign key (ClientesCodigo)
references Clientes (ClientesCodigo)
)
go

— Tabla Detalle de Factura

Create table DetalleFactura
(FacturasNumeroSerie nchar(5), FacturasNumeroFactura nchar(7),
ProductosCodigo nchar(10),ProductosDescripcion nvarchar(100),
DetalleCantidadVendida Numeric(9,2), DetallePrecioVenta Numeric(9,2),
DetalleOImporte As (DetalleCantidadVendida * DetallePrecioVenta)
constraint DetalleFacturaPK
Primary key (FacturasNumeroSerie,FacturasNumeroFactura,ProductosCodigo),
constraint DetalleFacturaFacturasFK
Foreign key (FacturasNumeroSerie,FacturasNumeroFactura)
references Facturas (FacturasNumeroSerie,FacturasNumeroFactura),
constraint DetalleFacturaProductosFK Foreign key (ProductosCodigo)
references Productos (ProductosCodigo)
)
go

Note en negrita los campos calculados.