Veritabanı

SQL CREATE TABLE ile Tablo Oluşturma

SQL CREATE TABLE ile Tablo Oluşturma

İlişkisel veritabanı yönetim sistemlerinde (RDBMS) veriler, satır ve sütunlardan oluşan mantıksal yapılar olan tablolarda saklanır. Bir yazılım projesine başlarken veya mevcut bir sistemi genişletirken ilk adım, verilerin hangi formatta ve kurallarla saklanacağını tanımlamaktır. Bu yapılandırma sürecinin temel taşı ise SQL Veri Tanımlama Dili (Data Definition Language – DDL) komutlarından biri olan CREATE TABLE ifadesidir. Doğru kurgulanmış bir tablo şeması, uygulamanın performansını, veri bütünlüğünü ve güvenliğini doğrudan etkiler.

SQL CREATE TABLE Komutunun Temel Sözdizimi

CREATE TABLE komutu, veritabanı motoruna yeni bir tablo oluşturma talimatı verir. Komut çalıştırılırken tablonun adı, içereceği sütunlar, bu sütunların tutacağı veri tipleri ve sütunlara uygulanacak kurallar (kısıtlamalar) açıkça belirtilmelidir.

Temel sözdizim şu şekildedir:

CREATE TABLE tablo_adi (
    sutun1 veri_tipi kisitlama,
    sutun2 veri_tipi kisitlama,
    sutun3 veri_tipi,
    ...
);

Bu yapıda yer alan bileşenlerin işlevleri şunlardır:

  • tablo_adi: Oluşturulmak istenen tablonun benzersiz adını ifade eder.
  • sutun: Tabloda tutulacak veri alanının adıdır.
  • veri_tipi: Sütunun kabul edeceği bilginin türünü (metin, sayı, tarih vb.) ve boyutunu belirler.
  • kisitlama: İlgili sütuna girilebilecek verinin geçerlilik kurallarını tanımlar.

Temel Veri Tipleri

Veritabanı tasarımında doğru veri tipini seçmek, depolama verimliliği ve sorgu hızı açısından kritik öneme sahiptir. Yaygın olarak kullanılan temel veri tipleri aşağıda listelenmiştir:

  • CHAR ve VARCHAR: Metinsel ifadeleri saklar. CHAR sabit uzunluktaki metinler için (örneğin ülke kodları), VARCHAR ise değişken uzunluktaki metinler için (örneğin ad, e-posta) tercih edilir.
  • INT ve BIGINT: Tam sayı değerlerini saklamak için kullanılır. Küçük ölçekli kimlikler için INT yeterliyken, yüksek hacimli kayıtlar için BIGINT seçilir.
  • DECIMAL veya NUMERIC: Para birimleri veya net hassasiyet gerektiren matematiksel değerler için kullanılır. Kayan noktalı sayı hatalarını engeller.
  • DATE ve TIMESTAMP: Tarih ve saat bilgilerini tutar. TIMESTAMP, saat dilimi ve tam zaman bilgisi gerektiren kayıt izleme süreçlerinde kullanılır.
  • BOOLEAN: Doğru (TRUE) veya Yanlış (FALSE) mantıksal değerlerini ifade eder.

Tablo Kısıtlamaları (Constraints)

Kısıtlamalar, veritabanına girilen verilerin doğruluğunu, tutarlılığını ve güvenilirliğini garanti altına almak için kullanılan kurallardır.

  • NOT NULL: Sütunun boş (NULL) bırakılamayacağını, mutlaka bir değer içermesi gerektiğini belirtir.
  • UNIQUE: Sütundaki tüm değerlerin birbirinden farklı olmasını zorunlu kılar.
  • PRIMARY KEY: Tablodaki her bir satırı benzersiz şekilde tanımlayan alandır. NOT NULL ve UNIQUE özelliklerinin birleşimidir. Her tabloda yalnızca bir adet birincil anahtar bulunabilir.
  • FOREIGN KEY: İki tablo arasındaki ilişkiyi kurar. Bir tablodaki sütunun, başka bir tablonun birincil anahtarına referans vermesini sağlar. Böylece referans bütünlüğü korunur.
  • CHECK: Sütuna girilecek verinin belirli bir mantıksal koşulu sağlamasını şart koşar.
  • DEFAULT: Sütuna herhangi bir değer girilmediğinde atanacak varsayılan değeri belirler.

Kapsamlı Uygulama: E-Ticaret Veritabanı Örneği

Konuyu somutlaştırmak adına bir e-ticaret uygulamasının kullanıcılar ve siparişler yapılarını modellediğimiz iki ilişkili tablo oluşturalım.

Kullanıcılar Tablosunun Oluşturulması

İlk olarak sisteme kayıt olan kullanıcıların bilgilerini tutacak tabloyu tanımlıyoruz:

CREATE TABLE kullanicilar (
    kullanici_id INT GENERATED ALWAYS AS IDENTITY,
    ad VARCHAR(50) NOT NULL,
    soyad VARCHAR(50) NOT NULL,
    eposta VARCHAR(100) NOT NULL,
    yas INT,
    kayit_tarihi TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT pk_kullanicilar PRIMARY KEY (kullanici_id),
    CONSTRAINT uq_kullanicilar_eposta UNIQUE (eposta),
    CONSTRAINT chk_kullanici_yasi CHECK (yas >= 18)
);

Bu komut ile:

  • kullanici_id sütunu otomatik artan birincil anahtar olarak belirlenmiştir.
  • ad, soyad ve eposta sütunlarının boş bırakılması engellenmiştir.
  • eposta sütununa UNIQUE kısıtlaması verilerek aynı adresle birden fazla kayıt yapılması önlenmiştir.
  • CHECK kısıtlaması ile sisteme yalnızca 18 yaş ve üzerindeki bireylerin kayıt olabileceği kuralı getirilmiştir.
  • kayit_tarihi sütununa değer girilmediğinde sistemin o anki zaman damgası varsayılan olarak atanmıştır.

Siparişler Tablosunun Oluşturulması ve İlişkilendirme

Şimdi kullanıcılar tablosuna bağlı çalışacak siparişler tablosunu tanımlayalım:

CREATE TABLE siparisler (
    siparis_id INT GENERATED ALWAYS AS IDENTITY,
    kullanici_id INT NOT NULL,
    toplam_tutar DECIMAL(10, 2) NOT NULL,
    siparis_durumu VARCHAR(20) DEFAULT 'Hazırlanıyor',
    olusturma_tarihi TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT pk_siparisler PRIMARY KEY (siparis_id),
    CONSTRAINT fk_siparisler_kullanici FOREIGN KEY (kullanici_id) 
        REFERENCES kullanicilar(kullanici_id) 
        ON DELETE RESTRICT
);

Bu tabloda FOREIGN KEY kısıtlaması kullanılarak siparişler tablosundaki kullanici_id sütunu, kullanicilar tablosunun birincil anahtarına bağlanmıştır. ON DELETE RESTRICT ifadesi, sistemde siparişi bulunan bir kullanıcının silinmesini engelleyerek veri tutarsızlığının önüne geçer.

Mevcut Bir Tablodan Yeni Tablo Oluşturma (CREATE TABLE AS)

Bazı durumlarda var olan bir tablonun yapısını veya verilerini kopyalayarak yeni bir tablo türetmek gerekebilir. Bunun için CREATE TABLE AS SELECT (CTAS) yöntemi kullanılır:

CREATE TABLE aktif_kullanicilar AS
SELECT kullanici_id, ad, soyad, eposta
FROM kullanicilar
WHERE yas >= 25;

Bu ifade, kullanicilar tablosundaki 25 yaş ve üzeri kayıtları filtreleyerek sadece belirtilen sütunlardan oluşan aktif_kullanicilar adında yeni bir tablo meydana getirir. Ancak bu yöntem kullanılırken kaynak tablodaki birincil anahtar ve yabancı anahtar gibi kısıtlamaların çoğu yeni tabloya doğrudan aktarılmaz, bu kuralların manuel olarak tekrar eklenmesi gerekir.

Tablo Tasarımında Dikkat Edilmesi Gerekenler

  • İsimlendirme standartlarına sadık kalınmalıdır. Tablo ve sütun isimlerinde küçük harf ve alt çizgi (snake_case) tercih edilmeli, Türkçe karakter veya boşluk kullanılmamalıdır.
  • İhtiyaçtan büyük veri tipleri tanımlanmamalıdır. Örneğin sadece iki basamaklı sayı alacak bir alana BIGINT tipi vermek bellek ve disk israfına yol açar.
  • Her tabloda mutlaka tekil birincil anahtar (Primary Key) tanımlanmalıdır.
  • Kısıtlamalara açık ve anlaşılır isimler verilmelidir. Bu yaklaşım, bir hata meydana geldiğinde hangi kuralın ihlal edildiğini tespit etmeyi kolaylaştırır.

Özet ve Sonraki Adımlar

SQL CREATE TABLE ifadesi, veritabanı mimarisinin iskeletini inşa eden temel komuttur. Veri tipleri ve kısıtlamaların doğru kombinasyonu ile verilerinizin bozulmasını doğrudan veritabanı motoru seviyesinde engelleyebilirsiniz.

Oluşturduğunuz tablolar üzerinde değişiklik yapmak için ALTER TABLE, tabloları tamamen kaldırmak için DROP TABLE ve bu tablolara veri eklemek için INSERT INTO komutlarını inceleyerek veritabanı bilginizi bir sonraki aşamaya taşıyabilirsiniz.

#create table#rdbms#sql#sql sorgulari#veritabanı

Yorumlar

Henüz yorum yok. İlk yorumu siz yazın.

Yorum yaz

Yorumlar yönetici onayından sonra yayınlanır.