MICROSOFT SQL SERVER

Ders Notları

 

Sql' de Veri Bütünlüğü

 

Veri bütünlüğü, bir tabloda veri güncelleme, silme veya ekleme gibi işlemler yapılırken diğer tablo ya da tablolardaki verilerin birbirleriyle uyum içinde olması, dolayısıyla veri tutarlılığının kaybolmamasının garanti altına alınması demektir.

Veri bütünlüğünü sağlamak iki yöntemle olabilir:
Tanımlanabilir veri bütünlüğü: Tanımlanan nesnelerin kendi özellikleri sayesinde sağlanabilen veri bütünlüğüdür.
Prosedürel (Programsal) veri bütünlüğü: Bir programlama mantığıyla bütünlüğün tasarlanması gerekir. SQL’de bu yaklaşım ise Trigger(tetikleyiciler), Stored Procedure (saklı yordamlar) veya programcı kodlarıyla yapılır.

 

A.Tanımlanabilir Veri Bütünlüğü

 

Nesnelerin kendi tanımları dolayısıyla elde edilen veri bütünlüğüne tanımlanabilir veri bütünlüğü denir. Bu veri bütünlüğünün; Constraint’ler (kısıtlayıcılar), Rule’lar (kurallar) ve Default’lar (varsayılanlar) olmak üzere üç çeşidi vardır.

 

Tanımlanabilir Veri Bütünlüğü Esasları
Tanımlanabilir veri bütünlüğü esaslarını dört başlık altında toplayabiliriz.
1. Satır Bütünlüğü (Entity): Tabloya girilen kayıtlardan her bir kaydın diğer kayıtlardan farklı bir değer olmasını sağlayan bütünlüktür.
2. Sütun Bütünlüğü (Domain): Tablodaki herhangi bir sütunun hangi gruptan verileri alabileceğini veya NULL bir değer alıp alamayacağını sağlayan bütünlüktür.
3. Başvuru Bütünlüğü: Bir birincil anahtarlı ve bir yabancıl anahtarlı birbiriyle ilişkili iki tablo olduğunu düşününüz. Yabancıl anahtarlı tablodan bir kaydın silinemediği durumda, birincil anahtarlı tablodan birincil anahtarı aynı olan kayıtların silinemeyeceğini sağlayan bütünlüktür.
4. Kullanıcı Tanımlı Bütünlük: Diğer bütünlüklere uymayan ve kod yazılarak oluşturulan bütünlüktür.

 

Constraint (Kısıtlayıcı)
Veri üzerindeki mantıksal sınırlamalara kısıt adı verilir. Kısıtların genel olması tercih edilen bir durumdur. Kısıtlar, veri modellerinde bütünlük sağlamak için kullanılır. Kısıtlamalar, tabloların tanımlanmasıyla beraber oluşan öğelerdir. Kısıtlamalar ile Rule (kural) ve Default’ların (varsayılan) yapabileceği işler yapılabilir.

 

Constraint Türleri
1. Primary Key Constraint
Birincil anahtar kısıtlayıcı anlamındadır. Aynı olmayan değerler girilmesini sağlar. Bu da her kaydın farklı olması demektir. Her tablonun en fazla 1 adet Primary Key Constraint’i olabilir.
2. Unique Constraint
Tekil alan kısıtlayıcı anlamındadır. Birincil anahtar olan ve tablodaki diğer alanlar içinde aynı içeriğe sahip verilerin olmaması için Unique Constraint tanımlanır. T.C.Kimlik Nu. primary key ve Okul Nu. Unique şeklinde bir tanımlama Unique Constraint’e bir örnektir.
3. Foreign Key Constraint
Yabancıl anahtar kısıtlayıcı anlamındadır. Bir tablodaki bir sütuna ait verilerin başka bir tablonun belirli bir sütunundan gelmesini denetler.
4. Default Constraint
Varsayılan kısıtlayıcı anlamındadır. Tablodaki herhangi bir alan için girilmesi gereken bir değerin atanmasıdır. INSERT komutu için geçerlidir. Örneğin, kişi bilgilerinin alındığı bir tabloda kişinin uyruğunun girilmesi işleminde varsayılan değer olarak “T.C.” atanabilir.
1.5.5. Check Constraint
Kontrol kısıtlayıcı anlamındadır. Belirtilen formata göre verilerin girilmesini sağlar. Örneğin, T.C.Kimlik Nu. alanına 11 karakterin girilmesi Check Constraint ile sağlanabilir.

 

Constraint Oluşturma:

1.NULL Constraint Oluşturmak

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

NOT NULL contraint NULL değer girilmesini kabul etmez ve bilgi girişine sütun zorlar.Yukarıda SQL 'p_id " ve Soyadı "sütunlarına NULL değer girilmesini kabul etmez ve bilgi girişine sütun zorlar.

 

2.SQL PRIMARY KEY Constraint Oluşturmak:

CREATE TABLE OKUL(
ogrno int not null,
adi varchar(20),
soyadi varchar(20),
sinifi varchar(10),
tckimlik varchar(11),
CONTRAINT pkc_ogrno primary key(ogrno)) --primary key contraint bu şekilde oluşturulur

ogrno alanı constraint primary key olarak tanımlanmış oldu.

Bir tabloda birden fazla primary key tanımlanabilir.Fakat sadece 1 tane constraint primary key tanımlanabilir.

CREATE TABLE OKUL(
ogrno int not null,
adi varchar(20),
soyadi varchar(20),
sinifi varchar(10),
tckimlik varchar(11),
CONTRAINT pkc_ogrno primary key(ogrno,tckimlik)) --Tablomuzda iki tame primary key oluşturmuş olduk.

Data önceden oluşturulmuş tablolarda ise;

ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)

yada

ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

silmek için:

ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID

 

3.SQL UNIQUE Constraint Oluşturmak:

NIQUE ve PRIMARY KEY sınırlaması o kolondaki yada birden çok seçilmiş kolonlardaki tüm kayıtların kendi aralarında eşsiz yani her biri birbirinden farklı değer girme sınırlaması getirmektedir.Primary keyden farkı Unique Key Constraint şeklinde tanımlanmış bir alan NULL değerler alabilir. Eğer, bu alan NULL olmayacak yani değer alacaksa daha önce girilmiş olan bilgilerden mutlaka
farklı değer olmalıdır.

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)

Data önceden oluşturulmuş tablolarda ise;

ALTER TABLE Persons
ADD UNIQUE (P_Id)

yada

ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

silmek için:

ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID

 

4.SQL FOREIGN KEY Constraint Oluşturmak:

Bir tablodaki bir sütuna ait değerlerin, başka bir tablonun belli sütunundan gelmesini denetler. Bir tabloya girilebilecek değerleri başka bir tablonun bir belli alanında yer alabilecek veri grubu ile sınırlandırmaya ve en önemlisi de ilişkilendirmeye yarar.

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)

yada

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

Data önceden oluşturulmuş tablolarda ise;

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

yada

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

silmek için:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

 

5.SQL CHECK Constraint Oluşturmak:

Tabloda belirtilen bir sütuna istenilen şartlara göre değer girilebilmesini ve bunların kontrolünü sağlayan kısıtlayıcıdır. Aynı sütun için birden fazla Check Constraint kullanılabilir.

CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

 

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
)

 

tabloya sonradan ekleme yaparsak:

ALTER TABLE Persons
ADD CHECK (P_Id>0)
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')

silme

ALTER TABLE Persons
DROP CONSTRAINT chk_Person

 

6.SQL DEFAULT Constraint Oluşturmak:

 

Bir tabloya veri girişi esnasında o alanın alacağı varsayılan bir değerin tanımlanması için kullanılan kısıtlayıcıdır. Tabloda bulunan tarih alanına bir değer girilmemesi durumunda bulunulan günün tarihini o alana aktarma işlemi en güzel örnektir. SQL’de bu işlem GETDATE() fonksiyonu kullanılarak yapılır.

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
OrderDate date DEFAULT GETDATE()
)
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'SANDNES'
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT

 

 

ÖNCEKİ KONU   SONRAKİ KONU

 

Web hosting by Somee.com