Merhaba Webkolog takipçileri!
Bugün sizlerle veri tabanı dünyasının yapı taşlarından biri olan DDL (Data Definition Language) işlemleri hakkında konuşmak istiyorum. Eğer veri tabanı tablolarını oluşturmak, düzenlemek veya silmek gibi konulara meraklıysanız, doğru yerdesiniz. Hadi, veri tabanı yapılarını nasıl şekillendireceğimize bir göz atalım!
DDL Nedir?
DDL, yani Data Definition Language (Veri Tanımlama Dili), veri tabanı objelerini (tablolar, view'ler, indexler, prosedürler vb.) oluşturmak, değiştirmek veya silmek için kullandığımız SQL komutlarını ifade eder. Kısacası, veri tabanının iskeletini inşa etmemizi sağlar.
1. CREATE TABLE: Tablo Oluşturma
Bir veri tabanının en temel yapı taşı tablolardır. CREATE TABLE komutu ile yeni tablolar oluştururuz. Bu komutla birlikte, sütun adlarını, veri tiplerini ve çeşitli kısıtlamaları belirleriz.
İşte basit bir tablo oluşturma örneği:
CREATE TABLE Personel (
id INT PRIMARY KEY IDENTITY(1,1) NOT NULL, -- Benzersiz birincil anahtar, 1'den başla 1 artır
isim NVARCHAR(50) CHECK(isim != 'Anonim'), -- İsim 50 karakter ve 'Anonim' olamaz
soyad NVARCHAR(50) NULL, -- Soyad boş geçilebilir
kilo DECIMAL(5,2) DEFAULT 75.00, -- Kilo ondalıklı, varsayılan 75.00
dogum_tarihi DATE DEFAULT '2000-01-01', -- Varsayılan doğum tarihi
ekleme_tarihi DATETIME DEFAULT GETDATE(), -- Kayıt eklenme tarihi, varsayılan güncel tarih
tc_kimlik NVARCHAR(11) UNIQUE, -- TC Kimlik numarası benzersiz olmalı
--kategori_id INT, -- Yorum satırı: Dış anahtar tanımlaması için
--CONSTRAINT fk_kategori FOREIGN KEY (kategori_id) REFERENCES Kategoriler(kategori_id) -- Dış anahtar
);
Yukarıdaki örnekte gördüğünüz gibi, her sütun için bir veri tipi ve bazı özel ifadeler kullandım:
- PRIMARY KEY: Birincil anahtar. Sütundaki her değerin benzersiz olmasını sağlar ve bu sütunun tablo için ana tanımlayıcı olduğunu belirtir. Genellikle birincil anahtar sütunları clustered index olarak fiziksel sıralama sağlar.
- IDENTITY(1,1): Bu, sütuna otomatik olarak artan bir değer atar. İlk değer 1, artış miktarı 1'dir. Yani her yeni kayıt eklendiğinde ID otomatik olarak 1 artar.
- NOT NULL / NULL: NOT NULL, o sütunun kesinlikle boş geçilemeyeceğini belirtir. NULL ise boş geçilebileceği anlamına gelir.
- CHECK: Belirli bir koşulun sağlanmasını zorunlu kılar. Örnekte isim 'Anonim' olamaz.
- DEFAULT: Eğer bir sütuna değer girilmezse, belirlenen varsayılan değerin otomatik olarak atanmasını sağlar.
- UNIQUE: Bu sütundaki değerlerin benzersiz olmasını zorunlu kılar, tıpkı PRIMARY KEY gibi. Ancak bir tabloda birden fazla UNIQUE kısıtlaması olabilirken, sadece bir tane PRIMARY KEY olabilir.
- FOREIGN KEY (Dış Anahtar): İki tablo arasındaki ilişkiyi kurar. Bir tablodaki sütunun (FOREIGN KEY), başka bir tablonun PRIMARY KEY sütununa referans vermesini sağlar.
Veri Tipleri Hakkında Kısa Bir Not
Sütunlarımızı tanımlarken doğru veri tipini seçmek çok önemlidir. Bu, hem veri depolamada verimliliği artırır hem de sorguların daha hızlı çalışmasına yardımcı olur. İşte MS SQL'de sıkça kullanılan bazı veri tipleri:
- Tam Sayı ve Kesirli Sayı Tipleri: INT (en sık), BIGINT, SMALLINT, TINYINT, BIT (0 veya 1), DECIMAL (ondalıklı sayılar için hassas), MONEY, SMALLMONEY, REAL, FLOAT.
- Tarih Veri Tipleri: DATE (sadece tarih), TIME (sadece saat), DATETIME (tarih ve saat), DATETIME2 (daha geniş aralık ve hassasiyet), SMALLDATETIME, DATETIMEOFFSET (saat dilimi farkını da tutar).
- Unicode Desteği Olmayan Karakter Veri Tipleri: CHAR (sabit uzunluk), VARCHAR (değişken uzunluk), VARCHAR(MAX) (2 GB'a kadar), TEXT.
- Unicode Desteği Olan Karakter Veri Tipleri: NCHAR (sabit uzunluk), NVARCHAR (değişken uzunluk), NVARCHAR(MAX) (2 GB'a kadar), NTEXT. Unicode desteği, farklı dillerdeki karakterleri (Türkçe, Çince vb.) doğru şekilde saklamak için önemlidir.
- Binary Veri Tipleri: Dosyaları (resim, video vb.) depolamak için kullanılır: BINARY, VARBINARY, VARBINARY(MAX) (2 GB'a kadar), IMAGE.
- Diğer Veri Tipleri: SQL_VARIANT (herhangi bir veri tipini tutabilir), XML, HIERARCHYID, GEOMETRY.
2. ALTER TABLE: Tablo Yapısını Değiştirme
Mevcut bir tablonun yapısını değiştirmek istediğimizde ALTER TABLE komutunu kullanırız. Yeni sütun ekleyebilir, mevcut sütunları değiştirebilir veya silebiliriz.
Örnekler:
-- Yeni bir sütun ekleme
ALTER TABLE Personel
ADD Email NVARCHAR(100) NULL;
-- Mevcut bir sütunun veri tipini veya NULL özelliğini değiştirme
ALTER TABLE Personel
ALTER COLUMN isim NVARCHAR(75) NOT NULL;
-- Bir sütunu silme
ALTER TABLE Personel
DROP COLUMN Email;
-- Yeni bir kısıtlama (constraint) ekleme (örneğin benzersizlik)
ALTER TABLE Personel
ADD CONSTRAINT UQ_TCKimlik UNIQUE (tc_kimlik);
-- Birincil anahtar ekleme (tablo oluşturulurken eklenmediyse)
ALTER TABLE Personel
ADD CONSTRAINT PK_PersonelID PRIMARY KEY (id);
-- Dış anahtar ekleme
-- Öncelikle Kategoriler tablosunun var olduğunu varsayalım:
-- CREATE TABLE Kategoriler (kategori_id INT PRIMARY KEY, KategoriAdi NVARCHAR(50));
ALTER TABLE Personel
ADD kategori_id INT;
ALTER TABLE Personel
ADD CONSTRAINT FK_Personel_Kategori FOREIGN KEY (kategori_id) REFERENCES Kategoriler(kategori_id);
3. DROP TABLE: Tablo Silme
Bir tabloyu tamamen veri tabanından kaldırmak istediğimizde DROP TABLE komutunu kullanırız. Bu komut, tabloyu ve içindeki tüm veriyi geri döndürülemez bir şekilde siler.
DROP TABLE Personel;
Dikkat: Bu komutu kullanmadan önce iki kez düşünün, çünkü geri dönüşü yoktur!
4. TRUNCATE TABLE: Tablo İçeriğini Boşaltma
Eğer bir tablonun yapısını korumak, ancak içindeki tüm verileri silmek istiyorsanız TRUNCATE TABLE komutu işinize yarar. Bu komut, DELETE komutuna benzer ancak daha hızlıdır ve otomatik artan (IDENTITY) sütunları sıfırlar.
TRUNCATE TABLE Personel;
TRUNCATE TABLE ile DELETE arasındaki fark:
- TRUNCATE TABLE: Daha hızlıdır, her satırı tek tek silmek yerine veri sayfalarını serbest bırakır. IDENTITY sütununu sıfırlar. İşlem bir transaction içinde geri alınamaz (ancak SSMS'te implicit transaction'lar nedeniyle geri alınabilir gibi görünebilir, ancak gerçekte DDL olduğu için farklıdır). Log kaydı daha azdır.
- DELETE: Her satırı tek tek siler, daha yavaştır. IDENTITY sütununu sıfırlamaz. Transaction içinde geri alınabilir. Log kaydı daha fazladır.
Gördüğünüz gibi, DDL komutları sayesinde veri tabanı yapımızı istediğimiz gibi oluşturabilir, düzenleyebilir ve yönetebiliriz. Bu, veri tabanı yönetiminde elimizdeki en güçlü araçlardan bazılarıdır.
Webkolog'u takipte kalın!
Hepinize bol kodlu ve başarılı veri tabanı tasarımları dilerim!
0 yorum:
Yorum Gönder