SQL’de veritabanı tasarımı yapmak, verilerin düzgün bir şekilde düzenlenmesini ve verimli bir şekilde saklanmasını sağlar. Bu süreçte önemli kavramlar arasında tablo oluşturma, normalizasyon, primary key ve foreign key bulunur. Şimdi her birini detaylı bir şekilde açıklayalım:
SQL Tablo Oluşturma
Veritabanında veri saklamak için önce tablolara ihtiyacımız vardır. Bir tablo oluştururken, her bir sütunun veri tipini belirleriz. SQL’de tablo oluşturmak için CREATE TABLE komutu kullanılır.
Örnek:
CREATE TABLE Calisanlar (
CalisanID INT PRIMARY KEY,
Isim VARCHAR(100),
Maas DECIMAL(10, 2),
Departman VARCHAR(50)
);
Bu sorguda, Calisanlar adında bir tablo oluşturuluyor. Tablo, CalisanID, Isim, Maas ve Departman gibi sütunlara sahip. CalisanID sütunu, birincil anahtar (primary key) olarak tanımlanmıştır.
Primary Key (Birincil Anahtar)
Primary Key, bir tablodaki her bir satırı benzersiz şekilde tanımlayan bir veya daha fazla sütundan oluşur. Her tablonun yalnızca bir primary key değeri olabilir. Primary key, null değerleri kabul etmez ve her değeri benzersiz olmalıdır. Bu, her satırın eşsiz bir şekilde tanımlanmasını sağlar.
Örnek:
CREATE TABLE Calisanlar (
CalisanID INT PRIMARY KEY,
Isim VARCHAR(100),
Maas DECIMAL(10, 2)
);
Bu örnekte, CalisanID sütunu primary key olarak belirlenmiştir. Bu sütundaki her değer benzersiz olacak şekilde tasarlanmalıdır.
Foreign Key (Yabancı Anahtar)
Foreign Key, bir tablodaki bir sütunun, başka bir tablodaki birincil anahtara (primary key) referans vermesini sağlar. Bu sayede tablolar arasındaki ilişkiler kurulur. Yabancı anahtar, veri bütünlüğünü sağlar ve ilişkili tablolarda tutarsızlıkların oluşmasını engeller.
foreign key değeri, başka bir tablodaki primary key değerine karşılık gelir.Örnek:
CREATE TABLE Siparisler (
SiparisID INT PRIMARY KEY,
MusteriID INT,
SiparisTarihi DATE,
FOREIGN KEY (MusteriID) REFERENCES Musteriler(MusteriID)
);
Bu örnekte, Siparisler tablosundaki MusteriID sütunu, Musteriler tablosundaki MusteriID sütununu referans alarak foreign key olarak tanımlanmıştır.
Normalizasyon
Normalizasyon, veritabanı tasarımında verilerin tekrarını ve tutarsızlığı önlemek amacıyla, verilerin daha mantıklı bir şekilde düzenlenmesidir. Normalizasyon, veritabanı tablolarını belirli kurallara göre organize eder. Normalizasyonun temel amacı, veri tekrarını azaltmak, veritabanı bütünlüğünü sağlamak ve veritabanı yönetimini kolaylaştırmaktır.
Veritabanı normalizasyonu genellikle 3 ana aşamada yapılır: 1NF (Birinci Normal Form), 2NF (İkinci Normal Form), 3NF (Üçüncü Normal Form).
Birinci Normal Form (1NF)
Bir tablonun 1NF‘ye uygun olması için, her sütunun yalnızca atomik (tekil) değerler içermesi gerekir. Yani, her hücre yalnızca bir değer taşımalıdır, bir hücrede birden fazla değer olmamalıdır.
Örnek (1NF’ye uygun değil):
CREATE TABLE Siparisler (
SiparisID INT PRIMARY KEY,
MusteriID INT,
Urunler VARCHAR(255) -- Aynı hücrede birden fazla ürün ismi yazılabilir.
);
1NF’ye uygun hale getirilmiş:
CREATE TABLE Siparisler (
SiparisID INT PRIMARY KEY,
MusteriID INT,
UrunID INT -- Her sipariş bir ürünle ilişkili olacak.
);
İkinci Normal Form (2NF)
Bir tablonun 2NF‘ye uygun olması için, tablonun zaten 1NF‘ye uygun olması gerekir ve ayrıca her sütun, tablonun birincil anahtarına tamamen bağımlı olmalıdır. Yani, bir sütun, tablonun birincil anahtarı ile doğru bir şekilde ilişkilendirilmelidir.
Örnek (2NF’ye uygun değil):
CREATE TABLE Siparisler (
SiparisID INT PRIMARY KEY,
MusteriID INT,
MusteriIsim VARCHAR(100),
UrunID INT,
UrunIsim VARCHAR(100)
);
Bu örnekte, MusteriIsim ve UrunIsim sütunları, SiparisID‘ye tamamen bağımlı değildir. MusteriIsim sadece MusteriID‘ye, UrunIsim ise sadece UrunID‘ye bağımlıdır.
2NF’ye uygun hale getirilmiş:
CREATE TABLE Musteriler (
MusteriID INT PRIMARY KEY,
MusteriIsim VARCHAR(100)
);CREATE TABLE Urunler (
UrunID INT PRIMARY KEY,
UrunIsim VARCHAR(100)
);
CREATE TABLE Siparisler (
SiparisID INT PRIMARY KEY,
MusteriID INT,
UrunID INT,
FOREIGN KEY (MusteriID) REFERENCES Musteriler(MusteriID),
FOREIGN KEY (UrunID) REFERENCES Urunler(UrunID)
);
Üçüncü Normal Form (3NF)
Bir tablonun 3NF‘ye uygun olması için, tablonun 2NF‘ye uygun olması gerekir ve ayrıca her sütun, yalnızca birincil anahtara bağımlı olmalıdır. Yani, her sütun yalnızca birincil anahtara doğrudan bağımlı olmalı, başka hiçbir sütuna bağımlı olmamalıdır.
Örnek (3NF’ye uygun değil):
CREATE TABLE Siparisler (
SiparisID INT PRIMARY KEY,
MusteriID INT,
MusteriSehir VARCHAR(100),
UrunID INT,
UrunFiyat DECIMAL(10, 2)
);
Burada, MusteriSehir sütunu, MusteriID‘ye bağımlıdır. MusteriSehir‘i Musteriler tablosundan ayırmak gerekir.
3NF’ye uygun hale getirilmiş:
CREATE TABLE Musteriler (
MusteriID INT PRIMARY KEY,
MusteriIsim VARCHAR(100),
MusteriSehir VARCHAR(100)
);CREATE TABLE Urunler (
UrunID INT PRIMARY KEY,
UrunIsim VARCHAR(100),
UrunFiyat DECIMAL(10, 2)
);
CREATE TABLE Siparisler (
SiparisID INT PRIMARY KEY,
MusteriID INT,
UrunID INT,
FOREIGN KEY (MusteriID) REFERENCES Musteriler(MusteriID),
FOREIGN KEY (UrunID) REFERENCES Urunler(UrunID)
);
Bu kavramları doğru bir şekilde kullanmak, veritabanı tasarımının temel taşlarını oluşturur ve veri yönetimini daha verimli hale getirir.