Çoklamayı Engelleme: MS SQL’de Veri Bütünlüğünü Koruma
Çoklamayı engelleme, bir veritabanında aynı verinin birden fazla kez kaydedilmesini önleyen bir mekanizmadır. Bu, veri bütünlüğünü korumak ve veritabanının tutarlılığını sağlamak için önemlidir. MS SQL Server’da çoklamayı engelleme, çeşitli yöntemlerle uygulanabilir.
1. Benzersiz Anahtarlar
Benzersiz anahtarlar, bir tabloda her satırın benzersiz bir şekilde tanımlanmasını sağlayan sütun veya sütun kümeleridir. Benzersiz anahtarlar, bir tabloda aynı verinin birden fazla kez kaydedilmesini önler. Benzersiz anahtarlar, UNIQUE
anahtar sözcüğü kullanılarak oluşturulur. Örneğin:
sql
CREATE TABLE Musteriler (
MusteriID int NOT NULL,
MusteriAdi varchar(50) NOT NULL,
MusteriSoyadi varchar(50) NOT NULL,
MusteriEposta varchar(100) NOT NULL,
PRIMARY KEY (MusteriID),
UNIQUE (MusteriEposta)
);
Yukarıdaki örnekte, Musteriler
tablosunda MusteriID
sütunu birincil anahtar olarak tanımlanmıştır. Bu, MusteriID
sütunundaki her değerin benzersiz olması gerektiği anlamına gelir. Ayrıca, MusteriEposta
sütunu benzersiz anahtar olarak tanımlanmıştır. Bu, MusteriEposta
sütunundaki her değerin benzersiz olması gerektiği anlamına gelir.
2. Birincil Anahtarlar
Birincil anahtarlar, bir tabloda her satırın benzersiz bir şekilde tanımlanmasını sağlayan sütun veya sütun kümeleridir. Birincil anahtarlar, benzersiz anahtarlardan farklı olarak, bir tabloda yalnızca bir tane olabilir. Birincil anahtarlar, PRIMARY KEY
anahtar sözcüğü kullanılarak oluşturulur. Örneğin:
sql
CREATE TABLE Musteriler (
MusteriID int NOT NULL,
MusteriAdi varchar(50) NOT NULL,
MusteriSoyadi varchar(50) NOT NULL,
MusteriEposta varchar(100) NOT NULL,
PRIMARY KEY (MusteriID)
);
Yukarıdaki örnekte, Musteriler
tablosunda MusteriID
sütunu birincil anahtar olarak tanımlanmıştır. Bu, MusteriID
sütunundaki her değerin benzersiz olması gerektiği anlamına gelir.
3. Yabancı Anahtarlar
Yabancı anahtarlar, bir tabloda bir satırın başka bir tabloda bulunan bir satıra bağlı olduğunu gösteren sütun veya sütun kümeleridir. Yabancı anahtarlar, veri bütünlüğünü korumak ve veritabanının tutarlılığını sağlamak için kullanılır. Yabancı anahtarlar, FOREIGN KEY
anahtar sözcüğü kullanılarak oluşturulur. Örneğin:
sql
CREATE TABLE Siparisler (
SiparisID int NOT NULL,
MusteriID int NOT NULL,
UrunID int NOT NULL,
SiparisTarihi datetime NOT NULL,
PRIMARY KEY (SiparisID),
FOREIGN KEY (MusteriID) REFERENCES Musteriler(MusteriID),
FOREIGN KEY (UrunID) REFERENCES Urunler(UrunID)
);
Yukarıdaki örnekte, Siparisler
tablosunda MusteriID
sütunu bir yabancı anahtardır. Bu, Siparisler
tablosundaki her satırın Musteriler
tablosunda bulunan bir satıra bağlı olduğu anlamına gelir. Ayrıca, UrunID
sütunu bir yabancı anahtardır. Bu, Siparisler
tablosundaki her satırın Urunler
tablosunda bulunan bir satıra bağlı olduğu anlamına gelir.
4. Kontrol Kısıtlamaları
Kontrol kısıtlamaları, bir tabloda bulunan verilerin belirli kurallara uymasını sağlayan kısıtlamalardır. Kontrol kısıtlamaları, CHECK
anahtar sözcüğü kullanılarak oluşturulur. Örneğin:
sql
CREATE TABLE Urunler (
UrunID int NOT NULL,
UrunAdi varchar(50) NOT NULL,
UrunFiyati decimal(18, 2) NOT NULL,
PRIMARY KEY (UrunID),
CHECK (UrunFiyati > 0)
);
Yukarıdaki örnekte, Urunler
tablosunda UrunFiyati
sütunu için bir kontrol kısıtlaması oluşturulmuştur. Bu kontrol kısıtlaması, UrunFiyati
sütunundaki her değerin 0’dan büyük olması gerektiğini belirtir.
5. Tetikleyiciler
Tetikleyiciler, belirli olaylar gerçekleştiğinde otomatik olarak çalıştırılan veritabanı nesneleridir. Tetikleyiciler, veri bütünlüğünü korumak ve veritabanının tutarlılığını sağlamak için kullanılır. Tetikleyiciler, CREATE TRIGGER
anahtar sözcüğü kullanılarak oluşturulur. Örneğin:
sql
CREATE TRIGGER MusteriEpostaKontrolü
ON Musteriler
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (SELECT 1 FROM Musteriler WHERE MusteriEposta = NEW.MusteriEposta)
BEGIN
RAISERROR('Bu e-posta adresi zaten kullanılıyor.', 16, 1);
ROLLBACK TRANSACTION;
END;
END;
Yukarıdaki örnekte, Musteriler
tablosunda MusteriEposta
sütununa yeni bir değer eklendiğinde veya güncellendiğinde çalışacak bir tetikleyici oluşturulmuştur. Bu tetikleyici, MusteriEposta
sütunundaki yeni değerin daha önce kullanılıp kullanılmadığını kontrol eder. Eğer yeni değer daha önce kullanılmışsa, bir hata mesajı görüntülenir ve işlem geri alınır.
Faydalı Siteler
- MS SQL Server Çoklamayı Engelleme
- MS SQL Server Birincil Anahtarlar
- MS SQL Server Yabancı Anahtarlar
- MS SQL Server Kontrol Kısıtlamaları
- MS SQL Server Tetikleyiciler