Veritabanları, modern uygulamaların ve işletmelerin kalbinde yer alır; tüm verilerin düzenli ve erişilebilir bir şekilde saklanmasını sağlar. SQL, bu veritabanlarını ve içindeki tabloları oluşturmanın temel dilidir. Bu makalede, bir veritabanının yapısını oluşturan ilk adımlar olan CREATE DATABASE ve CREATE TABLE komutlarını ayrıntılı olarak inceleyeceğiz. Doğru yapılandırma, verimlilik ve veri bütünlüğü için hayati önem taşır.
SQL’de Veritabanı Oluşturma: CREATE DATABASE
Veritabanı, ilgili verilerin bir araya getirildiği ve yönetildiği mantıksal bir konteynerdir. Uygulamanızın tüm verileri (kullanıcılar, ürünler, siparişler vb.) bu veritabanı içinde depolanır. SQL’de yeni bir veritabanı oluşturmak için CREATE DATABASE komutu kullanılır. Bu komut, belirtilen ada sahip boş bir veritabanı yapısı oluşturur.
Sözdizimi ve Örnek
CREATE DATABASE komutunun sözdizimi oldukça basittir:
CREATE DATABASE veritabani_adi;
Örneğin, bir e-ticaret uygulaması için bir veritabanı oluşturmak istediğinizde:
CREATE DATABASE ECommerceDB;
Bu komut, ECommerceDB adında boş bir veritabanı oluşturacaktır. Veritabanı oluşturulduktan sonra, üzerinde tablolar oluşturmak veya veri eklemek gibi işlemler yapabilmek için onu seçmeniz (aktif hale getirmeniz) gerekir. Bu işlem USE komutu ile gerçekleştirilir:
USE ECommerceDB;
Artık tüm SQL komutlarınız (tablo oluşturma, veri ekleme, sorgulama vb.) ECommerceDB veritabanı bağlamında çalışacaktır.
Tabloları Anlamak ve Yapılandırmak
Veritabanları içindeki veriler, satır ve sütunlardan oluşan tablolarda organize edilir. Her tablo belirli bir varlığı (örneğin, “Kullanıcılar” veya “Ürünler”) temsil eder ve sütunlar bu varlığın özelliklerini (örneğin, kullanıcının adı, ürünün fiyatı) tanımlar. Her satır ise o varlığın tek bir kaydını ifade eder. Bir tablonun sütunlarını tanımlarken, her sütun için bir veri tipi ve gerektiğinde kısıtlamalar belirtmek esastır.
Veri Tipleri
Veri tipleri, bir sütunda hangi tür verinin depolanacağını (metin, sayı, tarih vb.) belirler. Doğru veri tipi seçimi, depolama verimliliği ve veri tutarlılığı açısından önemlidir. Yaygın kullanılan bazı veri tipleri şunlardır:
INT: Tam sayılar için kullanılır (örneğin, kullanıcı ID’si, ürün adedi).VARCHAR(boyut): Değişken uzunlukta karakter dizileri için.boyut, saklanabilecek maksimum karakter sayısını belirtir (örneğin, isimler, e-posta adresleri).TEXT: Uzun metin blokları için (örneğin, ürün açıklamaları, yorumlar).DATE: Tarih değerleri için (örneğin, ‘YYYY-MM-DD’).DATETIME/TIMESTAMP: Tarih ve saat değerleri için.DECIMAL(p, s): Ondalıklı sayılar için.ptoplam basamak sayısını,sondalık noktadan sonraki basamak sayısını belirtir (örneğin, fiyatlar, para birimleri).BOOLEAN/TINYINT(1): Doğru/yanlış veya evet/hayır değerleri için.
Tablo Kısıtlamaları (Constraints)
Kısıtlamalar, bir tablodaki verilerin doğruluğunu ve bütünlüğünü sağlamak için kurallar koyar. Bu kurallar, hatalı veya tutarsız veri girişini engeller.
NOT NULL: Bu sütunun boş (NULL) değerler içeremeyeceğini belirtir. Bu, o sütuna her zaman bir değer girilmesi gerektiği anlamına gelir.UNIQUE: Bu sütundaki tüm değerlerin benzersiz olması gerektiğini garanti eder. Yani, hiçbir iki satırın bu sütunda aynı değere sahip olamaz.PRIMARY KEY: Tablodaki her satırı benzersiz bir şekilde tanımlayan bir sütun veya sütun kombinasyonudur.NOT NULLveUNIQUEözelliklerini otomatik olarak içerir. Bir tabloda yalnızca bir tanePRIMARY KEYolabilir ve bu, tablolar arası ilişkilerin kurulmasında temel bir rol oynar.FOREIGN KEY: Başka bir tablodaki birincil anahtara (PRIMARY KEY) referans veren bir sütundur. İki tablo arasındaki bağlantıyı kurarak referans bütünlüğünü sağlar. Örneğin, bir sipariş tablosundakikullanici_id, kullanıcılar tablosundakikullanici_id‘ye birFOREIGN KEYolarak bağlanabilir.DEFAULT değer: Eğer bir sütun için değer belirtilmezse, buDEFAULTdeğerin kullanılacağını belirtir.CHECK koşul: Bir sütuna girilebilecek değerler için belirli bir koşulun sağlanmasını zorunlu kılar (örneğin, yaşın 18’den büyük olması).
SQL’de Tablo Oluşturma: CREATE TABLE
Bir veritabanı içinde tablo oluşturmak için CREATE TABLE komutu kullanılır. Bu komut, tablonun adını, her bir sütunun adını, veri tipini ve herhangi bir kısıtlamayı belirtmenizi gerektirir.
Genel Sözdizimi
CREATE TABLE tablo_adi (
sutun1_adi VERI_TIPI KISITLAMA(LAR),
sutun2_adi VERI_TIPI KISITLAMA(LAR),
...
sutunN_adi VERI_TIPI KISITLAMA(LAR),
PRIMARY KEY (birincil_anahtar_sutunu_veya_sutunlari),
FOREIGN KEY (yabanci_anahtar_sutunu) REFERENCES diger_tablo(referans_sutunu)
);
Örnek: “Kullanıcılar” ve “Siparişler” Tabloları Oluşturma
Öncelikle, daha önce oluşturduğumuz ECommerceDB veritabanını seçelim:
USE ECommerceDB;
Şimdi bir “Kullanıcılar” tablosu oluşturalım:
CREATE TABLE Kullanicilar (
kullanici_id INT PRIMARY KEY AUTO_INCREMENT, -- Otomatik artan birincil anahtar (MySQL)
ad VARCHAR(50) NOT NULL,
soyad VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
sifre_hash VARCHAR(255) NOT NULL,
kayit_tarihi DATE DEFAULT CURRENT_DATE
);
Bu örnekte:
kullanici_id: Her kullanıcıyı benzersiz bir şekilde tanımlayan birincil anahtar.AUTO_INCREMENT, yeni kayıt eklendikçe ID’nin otomatik olarak artmasını sağlar (MySQL için; diğer RDBMS’lerdeIDENTITYveyaSERIALgibi karşılıkları vardır).ad,soyad,email,sifre_hash:NOT NULLkısıtlaması ile bu alanların boş bırakılamayacağını belirtir.email:UNIQUEkısıtlaması sayesinde her kullanıcının farklı bir e-posta adresine sahip olması sağlanır.kayit_tarihi: Eğer bir tarih belirtilmezse,DEFAULT CURRENT_DATEsayesinde otomatik olarak geçerli tarihi alır.
Şimdi de “Siparişler” tablosunu oluşturalım ve “Kullanıcılar” tablosu ile ilişkilendirelim:
CREATE TABLE Siparisler (
siparis_id INT PRIMARY KEY AUTO_INCREMENT,
kullanici_id INT NOT NULL,
siparis_tarihi DATETIME DEFAULT CURRENT_TIMESTAMP,
toplam_tutar DECIMAL(10, 2) NOT NULL CHECK (toplam_tutar > 0),
FOREIGN KEY (kullanici_id) REFERENCES Kullanicilar(kullanici_id)
);
Bu örnekte:
siparis_id: “Siparişler” tablosunun birincil anahtarı.kullanici_id: “Kullanıcılar” tablosundakikullanici_id‘ye referans veren birFOREIGN KEY. Bu kısıtlama, yalnızca mevcut bir kullanıcının sipariş verebilmesini sağlar ve iki tablo arasında güçlü bir referans bütünlüğü bağlantısı kurar.siparis_tarihi: Değer belirtilmezse otomatik olarak geçerli tarih ve saati alır.toplam_tutar:DECIMAL(10, 2)ile ondalıklı sayıları saklar (toplam 10 basamak, ondalık kısmından sonra 2 basamak) veCHECK (toplam_tutar > 0)kısıtlaması ile sipariş tutarının sıfırdan büyük olmasını zorunlu kılar.
Bu örnekler, CREATE TABLE komutunun veri tipleri ve kısıtlamalarla birlikte nasıl kullanıldığını ve tablolar arası ilişkilerin FOREIGN KEY ile nasıl kurulduğunu açıkça göstermektedir. Bu sayede, hem veri depolama yapısı oluşturulur hem de verilerin doğruluğu ve ilişkisel bütünlüğü garanti altına alınır.
SQL’deki CREATE DATABASE ve CREATE TABLE komutları, herhangi bir veri yönetim sisteminin temelini oluşturur. Bu komutlar sayesinde veritabanı yapısını tanımlayabilir, verilerinizi organize edebilir ve bütünlüğünü sağlayabilirsiniz. Doğru veri tipleri ve kısıtlamalar kullanarak güçlü ve güvenilir bir veri mimarisi inşa etmek, uygulamanızın performansını ve gelecekteki ölçeklenebilirliğini doğrudan etkiler. Bu temel adımları atarak, veri tabanınızın üzerine inşa edeceğiniz diğer tüm işlemleri sağlam bir temel üzerine oturtmuş olursunuz.