Problemas con Relaciones entre tablas y Reconocimiento de FK (Clave Foranea)

Iniciado por Megan, 12 Agosto 2009, 07:34 AM

0 Miembros y 1 Visitante están viendo este tema.

Megan

Buenos Dias, aqui otra vez  :-[  :-[ , estoy siguiendo el manual de Microsoft Exprees Edtidion Buil a Program Now 2008, en la parte de base de datos, eh creado las tablas tal cual lo dice alli en el manual, pero cuando creo las relaciones asi


Y para comprobar que funciona la clave foranea eliminando filas de algunas de las tablas, me las termina eliminando, que es lo que no tendria que hacer, me tendria que dar error debido a la clave foranea (FK), pero no, me las borra, ya cree las tablas de nuevo, la relaciones de nuevo y lo mismo, no se donde estara el error. Me ayudan por favor. Muchisimas Gracias

Hadess_inf


Pablo Videla

Tienes la creacion de tus tablas en codigo SQL? quizas no estan registrada como foranea realmente , creaste las constraint?

Megan

Gracias chicos, por responder siempre y ayudarme. La base de datos es Basada en Servicios, entonces fui creando las tablas y despues agregue el contenido. Ahora lo que sucede chicos me fijo en las Reglas de Actualizacion y Eliminacion, estan Sin Accion. No se por que no me dispara el error que me tendria que salir. Muchas gracias

Pablo Videla

Puede ser por las siguientes razones
1.- Lo que dijo hades_inf , puedes que tengas las constraint delete on cascade o algo asi , lo que significa es que elimina en cascada , osea , elimina segun la primary key y las foraneas de las otras tablas ...

2.- Puede que no hayas colocado las constraint como deberias , osea que no hayas creado realmente las foreign key y por eso te elimina el contenido sin error , te propongo que hagas las tablas en codigo sql CREATE TABLE.... y asi nosotros analizamos lo que hiciste , saludos.

Megan

Cita de: BadDevil en 13 Agosto 2009, 14:23 PM
Puede ser por las siguientes razones
1.- Lo que dijo hades_inf , puedes que tengas las constraint delete on cascade o algo asi , lo que significa es que elimina en cascada , osea , elimina segun la primary key y las foraneas de las otras tablas ...

2.- Puede que no hayas colocado las constraint como deberias , osea que no hayas creado realmente las foreign key y por eso te elimina el contenido sin error , te propongo que hagas las tablas en codigo sql CREATE TABLE.... y asi nosotros analizamos lo que hiciste , saludos.

Buenas Tardes no lo logro entender bien lo de Constraint

Por otro lado me es dificil crear las tablas mediante codigo ya que recien me estoy iniciando en ADO. Muchas Gracias

Hadess_inf

Código (sql) [Seleccionar]
create table categoria
(
codcat int primary key,
categoria varchar(30)
)
go

Create table producto
(
codpro int primary key,
codcat int foreign key references categoria(codcat),
nombre varchar(30)
)
go

insert into categoria values (1,'Lacteos')
insert into categoria values (2,'Bebidas')
insert into categoria values (3,'Comestibles')

insert into producto values (1,1,'Gloria')
insert into producto values (2,2,'Pepsi')
insert into producto values (3,2,'Coca Cola')
insert into producto values (4,3,'Arroz')
insert into producto values (5,3,'Azucar')


codcat int foreign key references categoria(codcat) (Constraint)

En la tabla producto a la hora de ingresar uno nuevo necesitas especificar un codigo que exista en la tabla categoria, de esa forma podras decir que dicho producto pertenece a dicha categoria.

Código (sql) [Seleccionar]
insert into producto values (4,3,'Arroz')

El producto Arroz cuyo codigo es 4, pertenece a la categoria cuyo codigo sea 3 (en este caso comestibles).

¿Es necesario que al crear mis tablas defina los Constraint?

No es una obligacion, si no las defines y efectuas consultas ya sean insert, update, delete no te mostrara ningun error.

¿Es recomendable usar Constraint?

El hecho que no sea obligatorio usarlas no significa que no se deban usar, es mas, es muy recomendable usarlas (casi una regla cuando trabajaras con una BD bien formada).


Te recomienda des una lectura sobre el tema.
Enlace 1

Saludos