Tabloları birbirine bağlamak için önceki başlıklarda öğrendiğimiz Yabancı Anahtar tanımlamasını kullanacağız. Yabancı Anahtar, bağladığı tabloların birbirinden habersiz hareket etmesini engelleyerek birbiriyle uyum içinde çalışmasını sağlar.
Aşağıdaki örnekte şirket veritabanı içinde bulunan personel ve bölüm tabloları örneklenmektedir.
Bu iki tablonun oluşturma aşamasında bağımlı olan yani Yabancı Anahtar barındıran personel tablosunun bölüm tablosundan daha sonra oluşturulmasına dikkat edilmelidir. Diğer bir deyişle, öncelikle ilişkisel gösterimde 1 ile ifade edilen tablolar öncelikle oluşturulmalıdır. Yukarıdaki şirket veritabanında bolum.bolum_no ile personel.blm_no alanları bağlantılıdır. Bağlantılı alanların isimleri aynı olabileceği gibi farklı da olabilir.
İlk önce şirket veritabanında çalışacağımız için bu veritabanını oluşturuyor ve sonrasında yazılacak komutların bu veritabanı için kullanılacağını belirtmek için aktif hale getiriyoruz.
Bölüm Tablosunun Oluşturulması
İki farklı biçimde Birincil Anahtar (Primary Key) tanımlanabilir.
1.yol:
1 2 3 4 5 6 | CREATE TABLE bolum ( bolum_no INT IDENTITY(1,1), bolum_adi VARCHAR(15) NOT NULL, CONSTRAINT PK_blm PRIMARY KEY(bolum_no) ); |
2.yol:
1 2 3 4 5 | CREATE TABLE bolum ( bolum_no INT IDENTITY(1,1) PRIMARY KEY, bolum_adi VARCHAR(15) NOT NULL ); |
Personel Tablosunun Oluşturulması
İki farklı biçimde Yabancı Anahtar (Foreign Key) tanımlanabilir.
1.yol:
1 2 3 4 5 6 7 8 9 | CREATE TABLE personel ( personel_no INT IDENTITY(1,1) PRIMARY KEY, personel_ad VARCHAR(20) NOT NULL, personel_soyad VARCHAR(25) NOT NULL, dogum_tarihi DATE, dogum_yeri VARCHAR(15), blm_no INT REFERENCES bolum(bolum_no) ); |
2.yol:
1 2 3 4 5 6 7 8 9 10 | CREATE TABLE personel ( personel_no INT IDENTITY(1,1) PRIMARY KEY, personel_ad VARCHAR(20) NOT NULL, personel_soyad VARCHAR(25) NOT NULL, dogum_tarihi DATE, dogum_yeri VARCHAR(15), blm_no INT, CONSTRAINT FK_blm FOREIGN KEY(blm_no)REFERENCES bolum(bolum_no) ); |
2. yolda FK_blm adında bir kısıtlama oluşturuldu. Mevcut tablo üzerinde blm_no alanı, bolum tablosundaki bolum_no alanı ile ilişkilendirildi.