Clau forànea
En el context de bases de senyes relacionals, una clau forànea o clau forànea o clau aliena (o Foreign Key FK) és una llimitació referencial entre dos taules. La clau forànea identifica una columna o grup de columnes en una taula (taula filla o referend) que es referix a una columna o grup de columnes en una atra taula (taula mestra o referenciada). Les columnes en la taula referend deuen ser la clau primària o una atra clau candidata en la taula referenciada.
Els valors en una fila de les columnes referend deuen existir solament en una fila en la taula referenciada. Aixina, una fila en la taula referend no pot contindre valors que no existixen en la taula referenciada. D'esta forma, les referències poden ser creades per a vincular o relacionar informació. Açò és un pilin essencial de la normalisació de base de senyes. Múltiples files en la taula referend poden fer referència, vincular-se o relacionar-se a la mateixa fila en la taula referenciada. Majorment açò es veu reflectit en una relació un (taula mestra o referenciada) a molts (taula filla o referend).
La taula referend i la taula referenciada poden ser la mateixa, açò és, la clau forànea remet o fa referència a la mateixa taula. Esta clau externa és coneguda en SQL:2003 com autorreferencia o clau forànea recursiva. Una taula pot tindre múltiples claus forànees i cada una pot tindre diferents taules referenciadas. Cada clau forànea és forçada independentment pel sistema de base de senyes. Per tant, les relacions en cascada entre taules poden realisar-se usant claus forànees. Configuracions impròpies de les claus forànees o primàries o no forçar eixes relacions són freqüentment la font de molts problemes per a la base de senyes o per al modelamiento dels mateixos.
Per eixemple, digam que hi ha dos taules, una taula CONSUMIDOR que inclou totes les senyes dels consumidors, i una atra que és la taula de ÓRDENES. L'intenció és que totes les órdens estiguen associades a l'informació del consumidor i que viuen en la seua pròpia taula. Per a conseguir açò devem colocar una clau forànea en la taula ÓRDENES con relación a la clau primària de la taula CONSUMIDOR.
La clau forànea identifica una columna(s) en una TABLA REFERENCIANTE a una columna(s) en la TABLA REFERENCIADA.
Definint claus forànees
[editar | editar còdic]ALTER TABLE <nomene taula>
ADD [ CONSTRAINT <nomene restricció> ]
FOREIGN KEY ( <expressió columna> [, <expressió columna>]... )
REFERENCES <nomene taula> [ ( <expressió columna> [, <expressió columna>]... ) ]
[ ON UPDATE <acció> ]
[ ON DELETE <acció> ];Eixemple en Oracle SQL
[editar | editar còdic]L'eixemple següent crea i afig les claus forànees (FK_*) a una columna ya definida en la taula. Adicionalment s'inclou el còdic per a l'eliminació final d'abdós taules relacionades.
--- script creació de taules: Client i Producte
CREATE TABLE Client
(
IDClient INTEGER primary key not null,
IDProducte INTEGER not null, -- Definit el camp en anterioritat per a la clau forànea (clau primària en Producte)
Data_subscripció char(8),
Demanat CHAR(100)
);
CREATE TABLE Producte
(
IDProducte INTEGER primary key not null,
IDClient INTEGER not null, -- Definit el camp en anterioritat per a la clau forànea (clau primària en Client)
Nomene varchar(10),
Descripció varchar(100)
);
-- script: Adicionar les claus forànees
-- sintaxis: ALTER TABLE tablaB ADD CONSTRAINT FK_nom_qualsevol_únic FOREIGN KEY (camp_tablaB)
--- REFERENCES tablaA(camp_nomene_tablaA);
-- Clau forànea per a Client
ALTER TABLE client ADD CONSTRAINT FK_IDproducto_clt FOREIGN KEY (IDproducto)
REFERENCES producte(IDproducto);
-- Clau forànea per a Producte
ALTER TABLE producte ADD CONSTRAINT FK_IDClient_pro FOREIGN KEY (IDClient)
REFERENCES Client(IDClient);
-- Script eliminació de taules**
-- *es recomana borrar en orde invers a aquell en que varen ser creades.
DROP TABLE Producte CASCADE CONSTRAINTS;
DROP TABLE Client CASCADE CONSTRAINTS;Accions referencials
[editar | editar còdic]Degut a que el sistema de gestió de base de senyes fa complir les restriccions de referència, es deu garantisar l'integritat de les senyes si les files de la taula mestra es van a eliminar (o van a ser actualisades). Si encara existixen files depenents en taules referend, eixes referències tenen que ser considerades. SQL:2003 especifica 5 accions referencials diferents que s'eixecutaran en estos casos:
CASCADE
[editar | editar còdic]Cada volta que s'eliminen o s'actualisen les files de la taula mestra, s'eliminaran o actualisaran les respectives files de la taula filla. Açò es coneix eliminació o actualisació en cascade.
RESTRICT
[editar | editar còdic]El valor d'una columna de la taula mestra no pot ser actualisat o borrat quan existix una fila en una taula filla que fa referència al valor de la columna de la taula mestra.
De la mateixa manera, una fila no es pot eliminar, sempre que hi haja una referència a la mateixa a partir d'una taula filla.
NO ACTION
[editar | editar còdic]NO ACTION i RESTRICT són molt pareguts. La principal diferència entre el NO ACTION i RESTRICT és que NO ACTION realisa la comprovació d'integritat referencial despuix de tractar de modificar la taula mentres que RESTRICT fa la comprovació abans d'intentar eixecutar la sentència UPDATE o DELETE. Abdós accions referencials actuen de la mateixa forma si la comprovació d'integritat referencial falla: la sentència UPDATE o DELETE donarà lloc a un error.
SET DEFAULT, SET NULL
[editar | editar còdic]En general, l'acció presa per el DBMS per a SET NULL o SET DEFAULT és el mateix per a abdós ON DELETE o ON UPDATE: El valor de la referència afectada es canvia a NULL per a SET NULL, i en el valor predeterminat especificat per SET DEFAULT .gla
En SET NULL, cada volta que s'elimina o actualisa el registre en la taula pare, establix a NULL les columnes de la FK en la taula filla, per a això les columnes de la taula filla NO han d'haver segut definides com NOT NULL.
Referències
[editar | editar còdic]- Este artícul conté una traducció derivada de «Clave foránea» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.