LLaves Foraneas y Primarias Constraints

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

--

the hour is...
 
music
 


MusicPlaylist
Music Playlist at MixPod.com