use master --hacemos esto para cambiar algunos datos de la base de datos previamaente creada
go
drop database BDClaseM3
go
--------------
Create Database BDClaseM3
go
Use BDClaseM3
go
create table Producto
(
cod_prod int not null,
nom_prod varchar(50) not null,
cod_almacen int not null, --fk
can_stock int,
i_anulado char(1)
)
go
--tabla primaria
create table almacen
(
int not null,
nom_almacen varchar(50),
ubi_almacen varchar (50)
)
go
select * from Producto
select * from almacen
create table ventas
(
cod_ventas int identity (1,1) not null,
cod_prod int not null, --fk
can_vendida int not null,
mto_producto money,
total as(can_vendida*mto_producto)
)
select * from ventas
-----3
--creando llave primaria de Producto
alter table Producto
add constraint PK_Producto
Primary key(cod_prod)
--creando llave primaria de almacen
alter table almacen
add constraint PK_almacen
Primary key(cod_almacen)
--revisamos si lo que hemos hecho esta bien
sp_help Producto
sp_help almacen
--creando llave primaria de ventas
--para cambiar la primary key
--alter table ventas add constraint PK_ventas
alter table ventas drop constraint Pk_ventas
alter table ventas
add constraint PK_ventas
Primary key(cod_ventas,cod_prod)
sp_help ventas
---creando llaves foraneas Producto
alter table Producto
add constraint FK_prod_almacen
foreign key(cod_almacen) --el campo foraneo
references almacen(cod_almacen) --tabla de referencia
sp_help Producto
---creando llaves foraneas ventas
alter table ventas
add constraint FK_ventas_prod
foreign key(cod_prod) --el campo foraneo
references Producto(cod_prod) --tabla de referencia
sp_help ventas
--ejercicio crear una tabla a la cual se le ponga PK y FK
create table Movimiento
(
num_mov int identity(1,1) not null, --por ser identity puede ser una llave primaria ya que cumple con todas las condiciones
cod_venta int not null,
cod_prod int not null,
cod_almacen int not null,
total int
)
--llave primaria
alter table Movimiento
add constraint PK_movimiento
Primary key(num_mov,cod_venta,cod_prod,cod_almacen)
--llave foranea de cod_venta y cod_prod
alter table Movimiento
add constraint FK_Movimiento_ventas
foreign key(cod_venta,cod_prod) --el campo foraneo
references ventas(cod_ventas,cod_prod) --tabla de referencia
--llave foranea de cod_almacen
alter table Movimiento
add constraint FK_Movimiento_almacen
foreign key(cod_almacen) --el campo foraneo
references almacen(cod_almacen) --tabla de referencia
sp_help Movimiento
--aplicacion del constraint default
--tabla producto
alter table Producto
add constraint DF_ianulado default 'N' --osea cuando se inserte y no se de valor a ese campo tendra por defecto N
for i_anulado
--aplicando el constraint check
--tabla producto
alter table Producto
add constraint CK_stock_prod --esto significa que el stock no puede ser menor que 50
check (can_stock>=50)
--tabla ventas
alter table ventas
add constraint CK_ventas_cant--esto significa que el stock no puede ser menor que 50
check (can_vendida>0)
--insertar datos
--tabla almacen primero se crea almacen
insert into almacen values(100,'Almacen 01', 'Lima')
--insert into almacen values(100,'Almacen 02', 'tacna') --error de Pk 100 se repite
insert into almacen values(200,'Almacen 02', 'Tacna')
insert into almacen values(300,'Almacen 03', 'Trujillo')
insert into almacen values(400,'Almacen 04', 'Arequipa')
--tabla productos
insert into Producto(cod_prod,nom_prod,cod_almacen,can_stock)
values(1,'Televisores',100,50)
--insert into Producto(cod_prod,nom_prod,cod_almacen,can_stock) **error de chek no se puede tener valores menores a 50
--values(2,'Refrigeradoras',100,30)
insert into Producto(cod_prod,nom_prod,cod_almacen,can_stock)
values(2,'Refrigeradoras',100,150)
insert into Producto(cod_prod,nom_prod,cod_almacen,can_stock)
values(3,'Laptops',200,90)
select * from Producto --i_anulado debe estar en N
--tabla ventas
--para borrar una fila
--delete from ventas where cod_ventas=3
insert into ventas values(1,10,1200)
insert into ventas values(1,2,1200)
insert into ventas values(2,4,900)
insert into ventas values(3,2,1800)
select * from ventas --el total se genera solo
--modificando con el Update - para el check
--Update Producto set can_stock=can_stock -5 where cod_prod=1 **no permite porq al restar 5 interfiere con el check ya que seria menor a 50
Update Producto set can_stock=can_stock -5 where cod_prod=2
select * from Producto
-- |