Recordemos el modelo-entidad-relacion, definiamos sus niveles conceptual,logico y fisico, nos centraremos en el Logico, conociendo ya lo que es una llave primaria, la creacion de tablas,llaves, y la creacion de indices.
En el primer nivel las llave primaria de una tabla es su unico identificador, y se establecen relaciones de M:N lo cual a nivel de base de dato es un error, entonces al llegar al nivel logico, la llave primaria de la primera tabla se convierte en Llave Foranea (Foreign Key) en la segunda tabla que es donde se esta relacionando la primera tabla es decir a nivel de diagrama se inserta la llave primaria de la primera tabla en la segunda tabla y lo contrario de este modo ambas estan relacionadas.
Tomando en cuenta lo anterior es que se llega a las tablas intermedias, las cuales almacenan las llaves primarias (Primary key) de ambas tablas en una nueva tabla a la cual se relacionan ambas tablas y de este modo eliminan las relaciones de M:N.
create table nombretbl1_nombretbl2
(
PrimaryKey_primer_tabla varchar(20) not null,
PrimaryKey_segunda_tabla float not null,
constraint PK_tblArticulo_ExistenciaBodega primary key( PrimaryKey_primer_tabla,PrimaryKey_segunda_tabla)
);
Ambas llaves vienen con su tipo de dato y a esta tabla tambien se le crea una primary key, pero aun aqui no se ha creado la llave foranea, para la creacion de ella lo veremos mas abajo.Usare las tablas creadas en el articulo anterior para que lo vean de una mejor forma:
Create table tblArticulo
(
ArticuloID varchar (20) not null,
DescripcionArticulo varchar (254),
costo float,
lote float,
constraint PK_tblArticulo primary key (ArticuloID)
);
Create table tblBodega
(
BodegaID varchar (15) not null,
Linea char (38),
Nombre_Bodega varchar (255),
Existencia float,
constraint PK_tblBodega primary key (BodegaID)
);
De igual forma la tercera tabla que se creo seria la tabla intermedia:
De igual forma la tercera tabla que se creo seria la tabla intermedia:
Create table tblArticulo_tblBodega
(
ArticuloID varchar (20) not null,
BodegaID varchar (15) not null,
constraint PK_tblBodega primary key (ArticuloID,BodegaID)
);
Llaves Foraneas(Foreign Key)
Como se mencionaba en la tabla intermedia, en el modelo-entidad-relacion, y a nivel logico, se crean las llaves foraneas para evitar las relaciones M:N por medio de la creacion de llaves foraneas, las cuales por medio de ellas establecemos las relaciones que existe entre las tablas, siempre por medio de la tabla que contiene ambas llaves primarias es decir la tabla intermedia.
De este modo la base de datos ya debe esta normalizada, de otro modo no se podria llegar a este punto, en la Herramienta CASE power designer el cambio de un diagrama a otro, exige la correcion y creacion de las relaciones M:N, esta herramienta lo hace al instante creando la tabla intermedia y las llaves foraneas que establecen la relacion.
Para la creacion de esta llave se utilizara la tabla intermedia, para cual se le hara una modificacion a la tabla es decir una alteracion, ya que la llave no ha sido agregada dentro de la estructura, por esa razon la sintaxis es la siguiente:
alter table nombretabla
add constraint FK_tablaenlaqueseingresara_nombrellave_campo foreign key (Campo)
references nombretabla (campo);
-Donde alter table es como le decimos al motor que le haga una modificacion a la estructura de la tabla, en el nombre tabla se ubica el nombre de la tabla intermedia.
-add constraint nos añade una llave, luego de FK, se ubica el nombre de la tabla donde se ingresara la llave, hay que tomar en cuenta que aca no se ubica el nombre de la tabla intermedia sino el nombre de cualquiera de las dos tablas que se relacionan, en nombrellave ubicamos como queremos llamar a la llave foranea se recomienda que sea realcionado a la tabla, campo ubicamos el nombre del campo que sera nuestra llave foranea.
-references ubicamos el nombre de la tabla que contiene la llave primaria que se convertira en foranea y en el parentesis se ubica el nombre de la llave primaria.
De este modo ocuparemos las tablas ya creadas en los ejemplos anteriores para que se comprenda de mejor forma lo antes detallado:
alter table tblArticulo_tblBodega
add constraint FK_tblBodega_ArticuloID_ArticuloID foreign key (ArticuloID)
references tblArticulo (ArticuloID);
alter table tblArticulo_tblBodega
add constraint FK_tblArticulo_ArticuloID_BodegaID foreign key (BodegaID)
references tblBodega (BodegaID);
Notaran que realice dos Alter, esto es porque la llave primaria de la tabla tblArticulo se convierte en llave foranea en la tabla tblBodega y sucede justamente lo mismo con la llave primaria de la tabla tblBodega en la tabla tblArticulo.
Se debe tomar en cuenta que para la creacion de la llave foranea es necesario que ambos campos en la tabla intermedia sean llaves primarias, es decir no puedo crear una llave foranea sino es una llave primaria, como se explicaba en las llaves.
De este modo hemos relacionado ambas tablas y es de este modo que se realizara con cada tabla que se desee realizar.
No hay comentarios:
Publicar un comentario