SQL FOREIGN KEY Kullanımı
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.
- Var olan Tabloya FOREIGN KEY Tanımlama Örneği
MySQL / SQL Server / Oracle / MS Access ortamlarında kullanım biçimine örnek:
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.