SQL : cheie străină

Lucrăm cu Microsoft SQL Server 2014 Enterprise (thanks, MSDNAA).

Utilizarea cheii străine.

Descărcaţi codulPentru vizualizare, folosiţi scrollbar-ul din josul blocului de cod.
USE [tempdb];

--daca exista deja aceste tabele, le stergem
--ordinea: cel-care-depinde-de-cineva primul, cel-de-care-cineva-depinde al doilea
IF OBJECT_ID( 'dbo.tabelul_care_face_referinta','U' ) IS NOT NULL
DROP TABLE dbo.tabelul_care_face_referinta;
GO

IF OBJECT_ID( 'dbo.tabelul_referinta','U' ) IS NOT NULL
DROP TABLE dbo.tabelul_referinta;
GO

--crearea tabelelor: cel-de-care-depinde-altcineva
CREATE TABLE dbo.tabelul_referinta
(
    cheia INT NOT NULL,
	restul VARCHAR (10) NOT NULL
	CONSTRAINT PK_tabelul_referinta PRIMARY KEY (cheia)
);
GO
--crearea tabelelor: cel-care-depinde-de-altcineva
CREATE TABLE dbo.tabelul_care_face_referinta
(
    cheia2 INT NOT NULL,
	restul2 VARCHAR(20) NOT NULL
	CONSTRAINT FK_tabelul_care_face_referinta_tabelul_referinta FOREIGN KEY (cheia2)
	REFERENCES dbo.tabelul_referinta(cheia)
	ON DELETE CASCADE -- stergem din acest tabel automat cand se sterge din tabelul referentiat
);
GO

--popularea tabelelor
USE [tempdb];

INSERT INTO dbo.tabelul_referinta(cheia,restul)
VALUES(2,'acum'),
(6,'acum'),
(-12,'acum'),
(77,'acum');
GO

INSERT INTO dbo.tabelul_care_face_referinta(cheia2,restul2)
VALUES(2,'apoi'),
(6,'apoi'),
(-12,'apoi');
GO

--testarea cheii straine
USE [tempdb];

INSERT INTO dbo.tabelul_care_face_referinta(cheia2,restul2)
VALUES(9,'apoi'); -- nu pot insera "9" caci el nu se gaseste printre datele "2", "6", "-12", "77".
GO

--introducerea valorilor multiple
USE [tempdb];
INSERT INTO dbo.tabelul_care_face_referinta(cheia2,restul2)
VALUES(-12,'apoi'),
(-12,'apoi');
GO

--testarea introducerii datelor
SELECT * FROM dbo.tabelul_care_face_referinta;
GO

--stergerea din tabelul referentiat
DELETE FROM dbo.tabelul_referinta
WHERE cheia = -12;
GO

--vizualizarea rezultatului
SELECT * FROM dbo.tabelul_referinta;
GO

SELECT * FROM dbo.tabelul_care_face_referinta;
GO