SQL FOREIGN KEY Kullanımı
Temel olrak FOREIGN KEY yardımcı index oluşturmak için kullanılır. Bir tabloda "id" alanına PRIMARY KEY uygulayabiliriz.
Ancak aynı tablodaki başka bir alan farklı bir tablodaki kayda bağlı çalışabilir. MS Access veritabanlarında bu duruma "İlişkili Veritabanı" deniliyor.
İşte bu iki tablo arasında bir bağ kurmak gerektiği durumlarda FOREIGN KEY devreye giriyor. Böylece tablolar arası veri akışı daha hızlı olduğu gibi
ileride artan kayıt sayısı sonucu veri bozulmalarının önüne geçilmiş olunur.
Olayı tablolar üzerinden anlatmak gerekirse, aşağıdaki gibi bir Personel tablomuz olsun.
p_id |
Adi_soyadi |
1 |
Salih
ESKİOĞLU |
2 |
Ayhan
ÇETİNKAYA |
3 |
Serkan
ÖZGÜREL |
4 |
İlhan
ÖZLÜ |
Bu tabloyla beraber çalışan Satışlar tablomuz da aşağıdaki gibi olsun.
s_id |
Urun |
Satis_fiyati |
satan_id |
1 |
LCD Tv |
1300 |
1 |
2 |
Ses
sistemi |
750 |
1 |
3 |
Buzdolabı |
1100 |
4 |
4 |
Çamaşır
Makinesi |
950 |
3 |
Burada Personel tablomuzdaki "p_id" alanı ve Satışlar tablomuzdaki "s_id"
alanları Primary Key ile indexlenmiştir. Ancak Satışlar tablosunda, ilgili satış
işleminin hangi personel tarafından yapıldığı bilgisini tutan "satan_id" isimli
alan vardır. Yazacağınız programda veritabanından bilgileri çekip ekrana
aktaracağınız için iki tablo arasında bir ilişki vardır. Bu ilişkiyi ise
Personel tablosundaki "p_id" ile Satışlar tablosundaki "satan_id" alanları
belirler. Dolayısı ile "satan_id" alanına FOREIGN KEY yani ikincil index
tanınlayarak aradaki veri bütünlüğünün sağlanmasını sağlarken aynı zamanda da
veri akışının da hızlanmasını sağlamış oluruz.
.
- Tablo Oluştururken FOREIGN KEY Tanımlama Örneği
SQL Server / Oracle / MS Acess ortamlarında kullanım biçimine
örnek:
CREATE TABLE Satislar
(
id int NOT NULL PRIMARY KEY,
Urun varchar(20)
,
Satis_fiyati varchar(20),
satan_id int CONSTRAINT fk_satici
FOREIGN KEY References Personel(id)
) |
FOREIGN KEY tanımlaması yapılırken hangi tablodaki hangi alanla ilişkili
oldğunu REFERENCES ifadesinden sonra yazmak gerekir.
MySQL ortamında kullanım biçimine örnek:
CREATE TABLE Satislar
(
id int NOT NULL,
Urun varchar(20) ,
Satis_fiyati varchar(20),
Satan_id int,
PRIMARY KEY (id),
CONSTRAINT fk_satici
FOREIGN KEY (satan_id) REFERENCES Personel(id)
) |
Burada göreceğiniz üzere FOREIGN KEY tanımlanırken CONSTRAINT ile ona bir isim
veriliyor. Böylece daha sonra bu FOREIGN KEY yapısını kaldırmak istersek bu
verdiğimiz ismi kullanmamız gerekecektir.
ALTER TABLE Satislar
ADD CONSTRAIN fk_satici
FOREIGN KEY (satan_id)
REFERENCES Personel(id) |
- FOREIGN KEY Kaldırma Örneği
MySQL ortamlarında FOREIGN KEY yapısını kaldırmak:
ALTER TABLE Satislar
DROP FOREIGN KEY fk_satici |
SQL Server / Oracle / MS Access ortamlarında FOREIGN KEY yapısını kaldırmak:
ALTER TABLE Satislar
DROP CONSTRAINT fk_satici |
Görüldüğü üzere MySQL veritabanından kaldırma işlemi sırasında FOREIGN KEY
ifadesi kullanılırken, diğer veritabanlarında CONSTRAINT ifadesi kullanılıyor.
Ama her iki biçimdede sonuna, oluştururken verdiğimiz ismi yazmamız gerekiyor.