-- SQL Server, T-SQL

SQL Server’da T-SQL ile Nesne Oluşturma ve Değiştirme İşlemleri

Veritabanı yazılım geliştiricilerinin çok sık kullanmamakla birlikte, bilmeleri gereken detaylara sahip olan önemli bir konu, veritabanı ve tablo gibi nesneleri oluşturmak ve bunların daha sonradan düzenlenerek geliştirilmesidir.

Bu makalemde, veritabanı ve tablo nesneleri üzerinde duracağım.

Öncelikle, T-SQL ile yeni bir veritabanı oluşturarak başlayalım.

SQL Server’da en basit haliyle bir veritabanı aşağıdaki gibi oluşturulabilir.

CREATE DATABASE veritabaniAd

Yukarıdaki SQL komutlarıyla yeni bir veritabanı oluşturulabilir. Ancak bu veritabanı varsayılan ayarlara sahip olarak oluşturulur. Biz, kendi parametrelerimizle yeni bir veritabanı oluşturmak için aşağıdaki yapıyı kullanmalıyız.

Sadece veri dosyası(data file) belirterek yeni bir veritabanı oluşturmak;

CREATE DATABASE DIJIBIL
ON  PRIMARY 
( 
	NAME = N'DIJIBIL_Data', 
	FILENAME = N'C:\Databases\DIJIBIL_Data.mdf',
	SIZE = 21632KB, 
	MAXSIZE = UNLIMITED, 
	FILEGROWTH = 16384KB 
)

Yukarıdaki veritabanı oluşturma kodlarımızdaki parametreleri şu şekilde açıklayabiliriz;

NAME          : Veritabanının mantıksal adını belirtir.
FILENAME : Veritabanının fiziksel dosya adını belirtir.
SIZE             : Veritabanının boyutunu belirtir.
MAXSIZE    : Veritabanının erişebileceği maksimum dosya boyutunu belirtir. KB, MB, GB gibi değerler alabilir.
UNLIMITED ise veritabanının disk boyutuyla sınırlıdır.
FILEGROWTH : Veritabanı dosya boyutunu aştığında ne kadarlık bir kapasite artışı yapılacağını belirtir.

Not : Bu sorgularda C:\ dizini içerisinde Databases klasörü olması gerekmektedir.

Bu yöntemle oluşturacağımız veritabanı başarıyla çalışacaktır, ancak görüldüğü gibi log dosyasını oluşturmadık. Log dosyasını da kendimiz tasarlayabiliriz. Şöyleki;

CREATE DATABASE DIJIBIL 
ON  PRIMARY 
( 
	NAME = N'DIJIBIL_Data', 
	FILENAME = N'C:\Databases\DIJIBIL_Data.mdf',
	SIZE = 21632KB, 
	MAXSIZE = UNLIMITED, 
	FILEGROWTH = 16384KB 
)
LOG ON 
( 
	NAME = N'DIJIBIL_Log', 
	FILENAME = N'C:\Databases\DIJIBIL_Log.ldf',
	SIZE = 2048KB, 
	MAXSIZE = 2048GB, 
	FILEGROWTH = 16384KB 
)
GO

İlk oluşturduğumuz komutlara ek olarak LOG ON bloğu eklenmiştir. Burada, veri dosyasıyla birlikte yeni bir log dosyası oluşturmak istediğimizi belirtip, bu log dosyasının teknik bilgilerini tanımlıyoruz.

Data ve Log dosyalarıyla birlikte yeni bir veritabanı oluşturduktan sonra aşağıdaki komutu çalıştıralım.

EXEC sp_helpdb 'DIJIBIL';

Ekran Alıntısı

Evet, yeni oluşturduğumuz veritabanının teknik bilgilerini bu şekilde elde etmiş olduk. Artık tablo oluşturma ve tabloların düzenlenmesiyle ilgili çalışmalara geçebiliriz.

USE DIJIBIL
GO
CREATE TABLE Kullanicilar(
	kul_ID		INT	     NOT NULL,
	kul_ad		VARCHAR(20)  NOT NULL,
	kul_soyad	VARCHAR(20)  NOT NULL,
	kul_telefon	VARCHAR(11)  NULL,
	kul_email	VARCHAR(320) NOT NULL
);

Tablo oluşturma komutlarını çalıştırdıktan sonra Object Explorer’daki tablo görünümü aşağıdaki gibi olacaktır.

Ekran Alıntısı

Yeni tablomuzla ilgili de bilgi alabiliriz. Bunun için aşağıdaki sorguyu çalıştıralım.

EXECUTE sp_help 'Kullanicilar';

Sorgu sonucu aşağıdaki gibidir;

Ekran Alıntısı

Yavaş yavaş kendi yapımızı kurmaya başladık.  Ancak, aklıma geldi de, bu veritabanının veri dosyasının boyutunu küçük yapmışız. Bir ALTER işlemi yaparak veri dosya kapasitesini artıralım.

ALTER DATABASE DIJIBIL
MODIFY FILE
(
	NAME = DIJIBIL_Data,
	SIZE = 300MB
);

Veritabanı ALTER işleminden önce ve sonra, aşağıdaki sorguyu çalıştırarak değişen değerleri gözlemleyin.

EXEC sp_helpdb DIJIBIL;

Düşündüm de, Kullanicilar isimli tablomuza iki sütun daha eklemem gerekiyor. Onu da T-SQL ile şöyle yapabiliriz;

ALTER TABLE Kullanicilar
ADD
kul_adres	    VARCHAR(150) NULL,
kul_kayitTarih  DATETIME     NOT NULL DEFAULT GETDATE();

Ve, dikkat ederseniz Kullanicilar isimli tablomuzun bir Primary Key sütunu yok. Şimdi, kul_ID sütunumuzu Primary Key olarak ALTER edelim.

ALTER TABLE Kullanicilar
ADD PRIMARY KEY (kul_ID)

Bu işlem sonrasında, Object Explorer‘da Kullanicilar tablosunun sütunlarını sağ tıklayıp Refresh ederseniz anahtar simgeli kul_ID sütununu görebilirsiniz.

Şimdi, Departmanlar isimli yeni bir tablo oluşturalım.

CREATE TABLE Departmanlar
(
	DepartmanID	INT PRIMARY KEY,
	DepartmanAd     VARCHAR(20)
);

Dikkat ederseniz, bu sefer Primary Key sütunlu bir tablo oluşturduk.  Ve Departmanlar tablosuyla Kullanicilar tablosu arasında bir Foreign Key ilişkisi kurmak istiyoruz. Ancak hatırlarsanız Kullanicilar tablomuzda kul_departmanID gibi bir ilişki sütunu bulunmuyordu. Öncelikle bu sütunu oluşturalım.

ALTER TABLE Kullanicilar
ADD kul_departmanID INT NOT NULL

Artık, tablolar arası Foreign Key ilişkisi kurabiliriz;

ALTER TABLE Kullanicilar
ADD FOREIGN KEY (kul_departmanID)
REFERENCES Departmanlar(DepartmanID)

Yaptığımız değişikliklerle birlikte tabloların ve diyagramın görünümü aşağıdaki gibi olacaktır.

Tablolar;

12
Diyagram

3

Tabloya sütun ekleme yapalım ve sonrasında bu eklediğimiz sütunu yeni bir sorguyla DROP ederek silelim.

ALTER TABLE Kullanicilar
ADD yeni_sutun INT

Şimdi de, eklediğimiz bu sütunu silelim.

ALTER TABLE Kullanicilar
DROP COLUMN yeni_sutun

Veri bütünlüğünde önemli noktalardan biri de kısıtlamalar(constraint)’ı doğru oluşturmak ve yönetmektir. Mesela, kullanıcının yaşı 18’den küçük ise kayıt yaptırmayacağımız bir uygulamada, kaydın yazılım tarafında filtrelemek haricinde, veritabanında da bir kısıtlama belirterek veri tutarlılığını garanti altına almamız gerekir.

Şimdi, yaş konusunda belirttiğimiz iş kuralını uygulayan bir constraint oluşturalım. Veritabanına sadece 18 yaşında ya da daha büyük olan kullanıcılar kayıt olabilsinler.

ALTER TABLE Kullanicilar
ADD CONSTRAINT chcCons_Yas
CHECK (kul_yas >= 18)

Sonucu test edebilmek için SSMS’de yeni bir kayıt ekleyin ve ekleme sırasında yaş bilgisini 18’den küçük bir değer ile test edin. Sonuç olarak aşağıdaki hata görüntülenecektir.

Ekran Alıntısı

Oluşturduğumuz Constraint nesnesini Object Explorer‘da görmek için Kullanicilar sekmesi dalındaki(altında) Constraint sekmesine göz atın.

Ekran Alıntısı

Oluşturulan herhangi bir Constraint’i silmek için de, standart nesne silme yöntemini takip edin.

ALTER TABLE diji_Kullanicilar
DROP CONSTRAINT chcCons_Yas

İyi çalışmalar.
Cihan

Yorumla

Yorum