SQL Veri Tabanı Oluşturma ve Yönetme

SQL veri tabanı oluşturma ve yönetme, verilerin belirli bir mantıksal düzende depolanması, hızlı bir şekilde sorgulanması ve güvenle saklanması sürecini ifade eder. Günümüzde web sitelerinden mobil uygulamalara, e-ticaret platformlarından bankacılık yazılımlarına kadar hemen her dijital sistemin temelinde veri tabanı yönetim sistemleri (VTYS) yer alır. Veriyi doğru bir mimariyle kurgulamak, bir yazılım projesinin hem mevcut performansını hem de gelecekteki ölçeklenebilirliğini doğrudan belirler.
- SQL ve İlişkisel Veri Tabanı (RDBMS) kavramlarının çalışma mantığını kavrama
- Sıfırdan veri tabanı ve ilişkisel tablolar tanımlama komutlarını uygulama
- Doğru veri tiplerini seçerek veri bütünlüğünü sağlama yöntemleri
- Temel SQL sorguları (CRUD işlemleri) ile etkin veri yönetimi sağlama
- Veri tabanı performansını ve güvenliğini artırmaya yönelik stratejiler
- SQL Bir Programlama Dili Değildir: SQL (Structured Query Language), veri tabanları ile iletişim kurmayı sağlayan yapılandırılmış bir sorgulama dilidir.
- Veri Bütünlüğü Esastır: Hatalı veri tipi seçimleri veya eksik kısıtlamalar (constraints), veri tabanında bozulmalara yol açar.
- İlişkisel Mimari (RDBMS): Veriler tek bir devasa tabloda toplamak yerine, birbiriyle mantıksal olarak bağlı düzenli tablolarda saklanır.
- Komut Türleri: SQL komutları DDL (Tanımlama), DML (İşleme) ve DCL (Denetleme) olmak üzere temel gruplara ayrılır.
SQL ve Veri Tabanı Yönetim Sistemi (VTYS) Nedir?
Veri tabanı, birbiriyle ilişkili verilerin düzenli biçimde saklandığı dijital bir arşivdir. Bilgisayar ortamındaki basit bir metin dosyasından farklı olarak veri tabanları; binlerce kullanıcının eş zamanlı erişimine imkan tanır ve milyonlarca kayıt arasından milisaniyeler içinde arama yapabilmeyi mümkün kılar. Bu düzeni sağlayan ve veri akışını kontrol eden yazılımlara ise Veri Tabanı Yönetim Sistemi (VTYS veya RDBMS) adı verilir.
SQL (Structured Query Language – Yapılandırılmış Sorgu Dili), söz konusu veri tabanı yönetim sistemleriyle iletişim kurmak için kullanılan evrensel standarttır. MySQL, PostgreSQL, Microsoft SQL Server (MSSQL), Oracle ve SQLite gibi yaygın sistemlerin tamamı SQL mimarisini temel alır. SQL aracılığıyla veri tabanına yeni bilgiler ekleyebilir, mevcut verileri güncelleyebilir veya kapsamlı raporlar oluşturabilirsiniz.
Veri tabanı yönetiminin özünde, ham veriyi ‘anlamlı bilgiye’ dönüştürmek yatar. Örneğin bir okul yönetim sisteminde öğrencilerin adı, soyadı, okul numarası, aldığı dersler ve sınav notları ayrı tablolarda tutulur. SQL sorguları sayesinde ‘Matematik dersinden 80 üzeri alan öğrencilerin listesi’ tek bir satırla saniyeler içinde elde edilir. Konu ilerledikçe Veri Tabanı Nedir? Veri Tabanı Yönetimi Konu Anlatımı ile bağlantılı noktalar da karşımıza çıkar.
Sıfırdan SQL Veri Tabanı Oluşturma: CREATE DATABASE Komutu
Yeni bir proje geliştirirken atılacak ilk adım, verilerin depolanacağı ana veri tabanını (database) tanımlamaktır. SQL dilinde bu işlem, oldukça sade bir komut yapısıyla gerçekleştirilir.
CREATE DATABASE OkulYonetimi;
Bu komut çalıştırıldığında sunucuda ‘OkulYonetimi’ adında boş bir veri tabanı alanı ayrılır. Ancak komutu yürütmeden önce dikkat edilmesi gereken bazı kritik detaylar vardır. Sistem uyumluluğunu korumak adına veri tabanı isimlerinde Türkçe karakter (ı, ş, ğ, ü, ö, ç) ve boşluk kullanmaktan kaçınmalısınız.
Oluşturulan veri tabanı üzerinde çalışmaya başlamak için sistemin hangi veri tabanına odaklanacağını belirtmeniz gerekir. Birçok SQL sisteminde bu komut şu şekilde uygulanır:
USE OkulYonetimi;
CREATE DATABASE IF NOT EXISTS OkulYonetimi; kalıbını kullanabilirsiniz. Bu komut, veri tabanı yoksa yenisini oluşturur, varsa mevcut olana dokunmadan işlemi tamamlar.Tablo Yapısı Tasarlama ve Tablo Oluşturma (CREATE TABLE)
Veri tabanı alanını hazırladıktan sonra, verilerin asıl saklanacağı ‘Tablo’ (Table) yapılarını inşa etme aşamasına geçilir. Tablolar, satır (row) ve sütunlardan (column) meydana gelir. Sütunlar verinin niteliğini ve türünü, satırlar ise kaydedilen her bir veri girdisini temsil eder.
Bir tablo tasarlarken her sütun için doğru **Veri Tipi** seçimi yapmak hayati önem taşır. Yaygın olarak kullanılan temel veri tipleri şunlardır:
- INT / INTEGER: Tam sayı değerlerini tutar (Örn: Öğrenci No, Yaş).
- VARCHAR(uzunluk): Değişken uzunluktaki metin ifadelerini saklar (Örn: Ad, Soyad, E-posta).
- DATE / DATETIME: Tarih ve saat bilgilerini tutar (Örn: Doğum Tarihi, Kayıt Zamanı).
- DECIMAL / FLOAT: Ondalıklı sayısal değerleri saklar (Örn: Ürün Fiyatı, Not Ortalaması).
- BOOLEAN: Doğru/Yanlış (1 veya 0) mantıksal durumlarını tutar (Örn: Aktif mi?).
CREATE TABLE Ogrenciler (
OgrenciID INT PRIMARY KEY AUTO_INCREMENT,
Ad VARCHAR(50) NOT NULL,
Soyad VARCHAR(50) NOT NULL,
Eposta VARCHAR(100) UNIQUE,
KayitTarihi DATE DEFAULT CURRENT_DATE
);
Yukarıdaki örnekte yer alan anahtar kavramlar veri bütünlüğü açısından hayati önem taşır: MySQL Veri Tabanı Kurulumu ve Kullanımı, bu açıdan bakıldığında konuyu tamamlayan güzel bir örnektir.
- PRIMARY KEY (Birincil Anahtar): Her satırı benzersiz biçimde tanımlayan sütundur. İki farklı kaydın birincil anahtarı aynı olamaz.
- NOT NULL: İlgili sütunun boş bırakılamayacağını ifade eder.
- UNIQUE: Sütundaki tüm değerlerin benzersiz olmasını zorunlu kılar (Aynı e-posta adresi ikinci kez kaydedilemez).
- AUTO_INCREMENT: Yeni kayıt eklendikçe otomatik olarak artan sayısal bir kimlik üretir.
Veri Ekleme, Okuma ve Güncelleme (INSERT, SELECT, UPDATE)
Tablo mimarisi tamamlandıktan sonra dinamik veri yönetimi sürecine adım atılır. Yazılım dünyasında bu aşama, **CRUD** (Create, Read, Update, Delete) olarak adlandırılan temel veri operasyonlarını kapsar.
1. Veri Ekleme (INSERT INTO)
Tabloya yeni bir veri kaydı dahil etmek için `INSERT INTO` komutundan yararlanılır. Hedef sütun isimleri sıralandıktan sonra eklenecek değerler `VALUES` parantezi içine yazılır.
INSERT INTO Ogrenciler (Ad, Soyad, Eposta)
VALUES ('Ahmet', 'Yılmaz', 'ahmet.yilmaz@email.com');
2. Veri Okuma ve Sorgulama (SELECT)
Veri tabanında kayıtlı verileri listelemek ve filtrelere göre çekmek için `SELECT` komutu kullanılır. Tablodaki tüm sütunları getirmek istediğinizde yıldız (`*`) sembolüne başvurulur.
SELECT * FROM Ogrenciler;
Sadece belirli kriterleri sağlayan verileri çekmek için sorguya `WHERE` koşulu eklenir:
SELECT Ad, Soyad FROM Ogrenciler WHERE Ad = 'Ahmet';
3. Veri Güncelleme (UPDATE)
Mevcut bir kaydın verilerini değiştirmek gerektiğinde `UPDATE` komutundan faydalanılır. Güncellenecek yeni değerler `SET` ifadesiyle belirtilir.
UPDATE Ogrenciler
SET Eposta = 'ahmet.yenieposta@email.com'
WHERE OgrenciID = 1;
Veri Silme ve Tablo Düzenleme (DELETE, TRUNCATE, ALTER TABLE)
Veri tabanı yönetimi sürecinde zaman zaman gereksiz verilerin temizlenmesi veya mevcut tablo yapısının güncellenmesi gerekebilir.
Veri Silme İşlemleri: DELETE ve TRUNCATE
Tablodan belirli bir kaydı çıkarmak için `DELETE FROM` yapısı tercih edilir:
DELETE FROM Ogrenciler WHERE OgrenciID = 1;
Tablonun şemasını bozmadan içerisindeki tüm verileri tek seferde ve son derece hızlı biçimde temizlemek isterseniz `TRUNCATE TABLE` komutuna başvurabilirsiniz. `TRUNCATE`, standart `DELETE` işlemine kıyasla çok daha performanslı çalışır ve otomatik artan kimlik sayaçlarını sıfırlar.
Tablo Yapısını Değiştirme (ALTER TABLE)
Projenin gereksinimleri değiştikçe mevcut bir tabloya yeni sütun eklemek, sütun tipini değiştirmek ya da bir sütunu kaldırmak gerekebilir. Bu gibi durumlarda `ALTER TABLE` komutu devreye girer.
-- Tabloya Telefon sütunu ekleme
ALTER TABLE Ogrenciler ADD Telefon VARCHAR(15);
-- Tablodan Telefon sütununu silme
ALTER TABLE Ogrenciler DROP COLUMN Telefon;
Veri Tabanı İlişkileri ve Normalizasyon Temelleri
İlişkisel veri tabanlarının sunduğu en büyük avantaj, farklı tablolar arasında mantıksal bağlar kurabilmesidir. Veri tekrarını önlemek ve veri bütünlüğünü korumak amacıyla uygulanan bu tasarım ilkelerine **Normalizasyon** denir.
Tablolar arasındaki bağlantılar **FOREIGN KEY (Yabancı Anahtar)** aracılığıyla kurulur. Sık karşılaşılan 3 temel ilişki türü bulunmaktadır:
- Bire-Bir (1:1) İlişki: Bir tablodaki tek bir kayıt, karşı tablodaki yalnızca tek bir kayıtla eşleşir (Örn: Vatandaş – T.C. Kimlik Kartı).
- Bire-Çok (1:N) İlişki: En yaygın kullanılan ilişki modelidir. Bir tablodaki bir kayıt, diğer tablodaki birden fazla kayıtla ilişkilenebilir (Örn: Bir Sınıf – Çok Sayıda Öğrenci).
- Çoka-Çok (N:M) İlişki: Her iki tablodaki kayıtlar birbiriyle birden fazla eşleşme gösterebilir. Bu yapı intermediate (köprü) bir tablo aracılığıyla çözümlenir (Örn: Öğrenciler – Alınan Dersler).
SQL Veri Tabanı Yönetimi ve Güvenlik İpuçları
Bir veri tabanını sıfırdan kurmak kadar onu güvenli ve performanslı tutmak da kritik önem taşır. Veri tabanı yöneticilerinin (DBA) öncelikle dikkat etmesi gereken stratejik adımlar şunlardır:
1. Düzenli Yedekleme (Backup & Restore)
Sistem çökmeleri, donanım arızaları ya da olası siber güvenlik tehditlerine karşı veri tabanının düzenli periyotlarla yedeği (backup) alınmalıdır. Yaşanabilecek aksaklıklarda veri tabanı bu yedeklerle eski haline dönüştürülür (restore).
2. Kullanıcı Yetkilendirmesi (DCL)
Sistemdeki tüm kullanıcıların tam yetkiyle çalışması büyük bir güvenlik açığı yaratır. `GRANT` komutuyla kullanıcılara yalnızca görev alanlarına uygun yetkiler tanınmalı, yetki ihtiyacı bittiğinde ise `REVOKE` komutuyla izinler derhal geri alınmalıdır.
3. İndeks Kullanımı (Indexing)
Milyonlarca satırdan oluşan devasa tablolarda arama hızını artırmak için sık sorgulanan sütunlara (Örn: T.C. Kimlik No, E-posta) indeks eklenmelidir. İndeks yapısı, bir kitabın fihristi gibi çalışarak aranan veriye erişim süresini belirgin biçimde kısaltır.
SQL Komut Türleri Karşılaştırma Tablosu
SQL dilindeki komutlar üstlendikleri işlevlere göre farklı kategorilere ayrılır. Aşağıdaki tabloda bu gruplar ve örnek komutları özetlenmiştir: Veri Tabanı Güvenliği: SQL Injection’dan Korunma Yolları da bu konunun pratikteki bir başka yansımasını gösterir.
| Kategori | Açıklama | Örnek Komutlar |
|---|---|---|
| DDL (Data Definition Language) | Veri tabanı ve tablo yapılarını tanımlar, günceller veya siler. | CREATE, ALTER, DROP, TRUNCATE |
| DML (Data Manipulation Language) | Tablo içindeki verileri ekler, günceller, sorgular veya siler. | SELECT, INSERT, UPDATE, DELETE |
| DCL (Data Control Language) | Kullanıcı erişim izinlerini ve sistem güvenliğini yönetir. | GRANT, REVOKE |
Pratik Yapma Zamanı: Örnek Bir SQL Senaryosu
Edindiğimiz teorik bilgileri pekiştirmek adına basit bir kütüphane yönetim sistemi senaryosunu adım adım kodlayalım.
-- 1. Veri Tabanını Oluşturma
CREATE DATABASE KutuphaneDB;
USE KutuphaneDB;
-- 2. Kitaplar Tablosunu Oluşturma
CREATE TABLE Kitaplar (
KitapID INT PRIMARY KEY AUTO_INCREMENT,
KitapAdi VARCHAR(100) NOT NULL,
Yazar VARCHAR(100),
Fiyat DECIMAL(6,2),
StokMiktari INT DEFAULT 0
);
-- 3. Tabloya Örnek Veri Ekleme
INSERT INTO Kitaplar (KitapAdi, Yazar, Fiyat, StokMiktari)
VALUES ('Nutuk', 'Mustafa Kemal Atatürk', 150.00, 50),
('Sefiller', 'Victor Hugo', 120.50, 20);
-- 4. Fiyatı 130 TL'den Büyük Kitapları Listeleme
SELECT KitapAdi, Fiyat FROM Kitaplar WHERE Fiyat > 130;
Öğrendiklerinizi Pekiştirin
SQL ile veri tabanı oluşturma ve yönetimi, yazılım geliştirme ve veri analitiği alanlarında atılacak en sağlam adımlardan biridir. Doğru veri tiplerini seçmek, birincil ve yabancı anahtar ilişkilerini eksiksiz kurgulamak ve sorgu güvenliğini üst düzeyde tutmak yetkin bir veri tabanı mimarisinin temel taşlarıdır. Öğrendiklerinizi pekiştirmek için kendi ortamınıza MySQL veya MSSQL kurarak pratik sorgular yazmaya hemen başlayabilirsiniz.
- `PRIMARY KEY` ile `UNIQUE` kısıtlaması arasındaki temel fark nedir?
- Bir tablodaki tüm verileri en hızlı şekilde temizleyip tablo yapısını korumak için hangi komut tercih edilmelidir?
- `UPDATE` sorgusunda `WHERE` koşulu yazılmazsa nasıl bir sonuç ortaya çıkar?
- İlişkisel veri tabanı (RDBMS) yapısında iki tabloyu birbiriyle bağlamak adına hangi anahtar türünden yararlanılır?
- Veri tabanı, bilgilerin düzenli ve hızlı biçimde depolandığı sistemdir; SQL ise bu sistemle iletişim kurma dilidir.
- `CREATE DATABASE` komutuyla veri tabanı, `CREATE TABLE` komutuyla da veri tabanı içindeki tablolar inşa edilir.
- Tablo oluşturulurken her sütuna uygun veri tipi (`INT`, `VARCHAR`, `DATE` vb.) atanmalıdır.
- Veri eklemek için `INSERT`, okumak için `SELECT`, güncellemek için `UPDATE`, silmek için `DELETE` komutlarına başvurulur.
- Filtreleme yapan `WHERE` ifadesinin eksik kullanımı telafisi güç veri kayıplarına yol açabilir.
- Normalizasyon ilkeleri ve `FOREIGN KEY` kullanımı, veri tekrarını önleyerek sistem bütünlüğünü güvenceye alır.
Sıkça Sorulan Sorular
- BTK Akademi — Veri Tabanı Yönetim Sistemleri ve SQL Eğitimi Müfredatı
- TÜBİTAK BİLGEM — Veri Yönetimi ve Yazılım Teknolojileri Standartları


