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. p toplam basamak sayısını, s ondalı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 NULL ve UNIQUE özelliklerini otomatik olarak içerir. Bir tabloda yalnızca bir tane PRIMARY KEY olabilir 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ş tablosundaki kullanici_id, kullanıcılar tablosundaki kullanici_id‘ye bir FOREIGN KEY olarak bağlanabilir.
  • DEFAULT değer: Eğer bir sütun için değer belirtilmezse, bu DEFAULT değ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’lerde IDENTITY veya SERIAL gibi karşılıkları vardır).
  • ad, soyad, email, sifre_hash: NOT NULL kısıtlaması ile bu alanların boş bırakılamayacağını belirtir.
  • email: UNIQUE kı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_DATE sayesinde 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” tablosundaki kullanici_id‘ye referans veren bir FOREIGN 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) ve CHECK (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.