Takip et

SQL CREATE TABLE Komutu: Veritabanı Yapı Taşlarını Oluşturma Rehberi

SQL CREATE TABLE Komutu: Veritabanı Yapı Taşlarını Oluşturma Rehberi Veritabanları, modern uygulamaların ve sistemlerin temelini oluşturur.

SQL CREATE TABLE Komutu: Veritabanı Yapı Taşlarını Oluşturma Rehberi

Veritabanları, modern uygulamaların ve sistemlerin temelini oluşturur. Bilgiyi düzenli, erişilebilir ve güvenli bir şekilde saklamak için tasarlanmışlardır. Bir veritabanının en temel yapı taşı ise tablolardır. Tablolar, ilişkisel veritabanı yönetim sistemlerinde (RDBMS) verilerin satırlar ve sütunlar halinde organize edildiği yapılardır. SQL (Structured Query Language) dilinde, bu tabloları oluşturmak için kullanılan komut CREATE TABLE‘dır.

Bu makale, CREATE TABLE komutunun derinlemesine bir incelemesini sunarak, temel sözdiziminden gelişmiş özelliklerine, veri tiplerinden kısıtlamalara kadar her yönünü ele alacaktır. Amacımız, veritabanı tasarımcılarına ve geliştiricilerine sağlam, verimli ve hatasız tablolar oluşturmaları için kapsamlı bir rehber sağlamaktır.

CREATE TABLE Komutuna Giriş

CREATE TABLE komutu, bir veritabanında yeni bir tablo tanımlamak için kullanılır. Bu komut, tablonun adını, içereceği sütunların adlarını, her sütunun veri tipini ve bu sütunlara uygulanacak kısıtlamaları (constraints) belirtmenizi sağlar. Doğru bir tablo yapısı, veritabanının performansını, bütünlüğünü ve sürdürülebilirliğini doğrudan etkiler. Bu nedenle, CREATE TABLE komutunu dikkatli ve bilinçli bir şekilde kullanmak büyük önem taşır.

Bir tablo oluştururken, her sütun için bir veri tipi tanımlamak zorunludur. Veri tipleri, sütunun hangi türde veri saklayabileceğini (örneğin, sayı, metin, tarih) ve bu verilerin ne kadar yer kaplayacağını belirler. Kısıtlamalar ise, sütunlardaki verilerin doğruluğunu ve tutarlılığını sağlamak için kullanılan kurallardır.

Temel CREATE TABLE Sözdizimi

CREATE TABLE komutunun genel sözdizimi aşağıdaki gibidir:

CREATE TABLE tablo_adi (
    sutun1_adi VERI_TIPI [KISITLAMA],
    sutun2_adi VERI_TIPI [KISITLAMA],
    ...
    sutunN_adi VERI_TIPI [KISITLAMA],
    [TABLO_DUZEYINDE_KISITLAMA]
);

* tablo_adi: Oluşturulacak tablonun benzersiz adıdır. Anlamlı ve açıklayıcı isimler kullanmak önemlidir.
* sutun_adi: Tablonun her bir sütununun adıdır.
* VERI_TIPI: Sütunda saklanacak verinin türünü belirtir (örn. INT, VARCHAR, DATE).
* KISITLAMA: Sütundaki verilere uygulanacak kurallardır (örn. NOT NULL, PRIMARY KEY, UNIQUE). Bu kısım isteğe bağlıdır.
* TABLO_DUZEYINDE_KISITLAMA: Birden fazla sütunu ilgilendiren kısıtlamalar (örn. bileşik PRIMARY KEY veya FOREIGN KEY) genellikle tablo düzeyinde tanımlanır.

Örnek olarak, basit bir “Calisanlar” tablosu oluşturalım:

CREATE TABLE Calisanlar (
    CalisanID INT,
    Ad VARCHAR(50),
    Soyad VARCHAR(50),
    DogumTarihi DATE
);

Bu örnekte, Calisanlar adında bir tablo oluşturulmuştur. Bu tablo CalisanID (tam sayı), Ad (50 karakter uzunluğunda metin), Soyad (50 karakter uzunluğunda metin) ve DogumTarihi (tarih) olmak üzere dört sütuna sahiptir.

Veri Tipleri (Data Types)

Veri tipleri, bir sütunun depolayabileceği veri türünü ve bu verilerin nasıl işleneceğini tanımlar. Doğru veri tipini seçmek, depolama alanını optimize etmek, performansı artırmak ve veri bütünlüğünü sağlamak için kritik öneme sahiptir. İşte yaygın olarak kullanılan bazı SQL veri tipleri:

Sayısal Veri Tipleri

* INT / INTEGER: Tam sayılar için kullanılır (örn. 1, 100, -50). Çoğu RDBMS’de 4 bayt yer kaplar.
* SMALLINT: Daha küçük tam sayılar için kullanılır. Genellikle 2 bayt yer kaplar.
* BIGINT: Çok büyük tam sayılar için kullanılır. Genellikle 8 bayt yer kaplar.
* TINYINT: Çok küçük tam sayılar için kullanılır (örn. 0-255). Genellikle 1 bayt yer kaplar.
* DECIMAL(p, s) / NUMERIC(p, s): Sabit noktalı ondalık sayılar için kullanılır. p toplam basamak sayısını (precision), s ise ondalık kısmın basamak sayısını (scale) belirtir. Örneğin, DECIMAL(5, 2) en fazla 5 basamaklı, ondalık kısmında 2 basamak olan sayılar (örn. 123.45) depolayabilir.
* FLOAT / REAL: Kayar noktalı, yaklaşık ondalık sayılar için kullanılır. Hassasiyet gerektirmeyen bilimsel hesaplamalar için uygundur.
* DOUBLE PRECISION: Daha yüksek hassasiyetli kayar noktalı sayılar için kullanılır.

Metinsel Veri Tipleri

* VARCHAR(n) / NVARCHAR(n): Değişken uzunlukta karakter dizileri için kullanılır. n maksimum karakter sayısını belirtir. VARCHAR, ASCII karakterleri depolarken, NVARCHAR Unicode karakterleri (örn. Türkçe, Çince karakterler) depolayabilir. Depolama alanı, girilen metnin uzunluğuna göre değişir.
* CHAR(n) / NCHAR(n): Sabit uzunlukta karakter dizileri için kullanılır. n karakter sayısını belirtir. Belirtilen n sayısına ulaşılmadığında boşluklarla doldurulur. VARCHAR‘a göre daha az esnektir ancak bazı durumlarda daha hızlı olabilir.
* TEXT / NTEXT / CLOB: Çok uzun metinler için kullanılır. Maksimum uzunluk veritabanına göre değişir (genellikle gigabaytlarca veri). TEXT ASCII, NTEXT Unicode karakterler içindir. CLOB (Character Large Object) ise Oracle gibi sistemlerde kullanılan bir terimdir.

Tarih ve Zaman Veri Tipleri

* DATE: Yalnızca tarihi (yıl, ay, gün) saklar.
* TIME: Yalnızca zamanı (saat, dakika, saniye) saklar.
* DATETIME: Tarih ve zamanı birlikte saklar.
* TIMESTAMP: Tarih ve zamanı, genellikle verinin son değiştirilme zamanını otomatik olarak kaydetmek için kullanılır. Zaman dilimi bilgisi içerebilir.
* SMALLDATETIME: DATETIME‘ın daha az hassasiyetli ve daha küçük bir versiyonu (SQL Server’a özgü).

Diğer Veri Tipleri

* BOOLEAN / BIT: Mantıksal değerler (doğru/yanlış, 1/0) için kullanılır.
* BLOB / VARBINARY: İkili büyük nesneler (Binary Large Object) için kullanılır. Resimler, ses dosyaları, video veya diğer ikili verileri saklamak için uygundur. VARBINARY(max) veya BLOB gibi varyantları bulunur.
* UUID / GUID: Evrensel olarak benzersiz tanımlayıcılar (Universally Unique Identifier) için kullanılır. 128 bitlik bir değerdir ve dünya çapında benzersizlik garantisi sunar.

Veritabanı sistemleri (MySQL, PostgreSQL, SQL Server, Oracle vb.) arasında veri tiplerinin isimleri ve özellikleri küçük farklılıklar gösterebilir. Her zaman kullandığınız RDBMS’nin dokümantasyonuna başvurmak en doğrusudur.

Kısıtlamalar (Constraints)

Kısıtlamalar, bir tablodaki verilerin doğruluğunu, tutarlılığını ve bütünlüğünü sağlamak için kullanılan kurallardır. Yanlış veri girişini önler, ilişkisel bütünlüğü korur ve veritabanı tasarımının temelini oluşturur.

NOT NULL Kısıtlaması

NOT NULL kısıtlaması, bir sütunun NULL (boş) değer içeremeyeceğini garanti eder. Bu, ilgili sütuna her zaman bir değer girilmesi gerektiği anlamına gelir.

CREATE TABLE Urunler (
    UrunID INT NOT NULL,
    UrunAdi VARCHAR(100) NOT NULL,
    Fiyat DECIMAL(10, 2)
);

Bu örnekte, UrunID ve UrunAdi sütunları boş bırakılamaz.

UNIQUE Kısıtlaması

UNIQUE kısıtlaması, bir sütundaki tüm değerlerin benzersiz olmasını sağlar. Yani, aynı değer bir sütunda birden fazla kez bulunamaz. NULL değerler genellikle UNIQUE kısıtlamasından etkilenmez ve birden fazla NULL değerine izin verilebilir (ancak bu durum veritabanına göre değişebilir).

CREATE TABLE Musteriler (
    MusteriID INT NOT NULL UNIQUE,
    Email VARCHAR(100) UNIQUE,
    Ad VARCHAR(50)
);

Burada, MusteriID ve Email sütunlarındaki değerler benzersiz olmalıdır.

PRIMARY KEY Kısıtlaması

PRIMARY KEY (Birincil Anahtar) kısıtlaması, bir tablodaki her kaydı benzersiz bir şekilde tanımlayan bir veya daha fazla sütundur. Birincil anahtar iki temel özelliğe sahiptir:
1. NOT NULL: Birincil anahtar sütunu NULL değer içeremez.
2. UNIQUE: Birincil anahtar sütunundaki tüm değerler benzersiz olmalıdır.

Bir tabloda yalnızca bir PRIMARY KEY olabilir. Genellikle, tablonun doğal bir benzersiz tanımlayıcısı yoksa, otomatik artan bir tam sayı sütunu birincil anahtar olarak kullanılır.

CREATE TABLE Siparisler (
    SiparisID INT PRIMARY KEY,
    MusteriID INT NOT NULL,
    SiparisTarihi DATE
);

Bu örnekte, SiparisID sütunu Siparisler tablosunun birincil anahtarıdır. Hem benzersizdir hem de boş olamaz.

Birden fazla sütun içeren birincil anahtar (bileşik anahtar) tanımlamak için tablo düzeyinde tanımlama yapılır:

CREATE TABLE DersKayit (
    OgrenciID INT,
    DersKodu VARCHAR(10),
    Donem VARCHAR(10),
    PRIMARY KEY (OgrenciID, DersKodu, Donem)
);

Bu durumda, OgrenciID, DersKodu ve Donem sütunlarının birleşimi benzersiz olmalıdır.

FOREIGN KEY Kısıtlaması

FOREIGN KEY (Yabancı Anahtar) kısıtlaması, iki tablo arasındaki bağlantıyı kurar ve referans bütünlüğünü sağlar. Bir tablodaki yabancı anahtar, başka bir tablodaki birincil anahtara veya benzersiz anahtara (UNIQUE key) referans verir. Bu, ilişkili tablolardaki verilerin tutarlı kalmasını sağlar.

CREATE TABLE Departmanlar (
    DepartmanID INT PRIMARY KEY,
    DepartmanAdi VARCHAR(50) NOT NULL
);

CREATE TABLE Calisanlar (
    CalisanID INT PRIMARY KEY,
    Ad VARCHAR(50) NOT NULL,
    Soyad VARCHAR(50) NOT NULL,
    DepartmanID INT,
    FOREIGN KEY (DepartmanID) REFERENCES Departmanlar(DepartmanID)
);

Burada, Calisanlar tablosundaki DepartmanID sütunu, Departmanlar tablosundaki DepartmanID birincil anahtarına referans veren bir yabancı anahtardır. Bu, yalnızca Departmanlar tablosunda mevcut olan bir DepartmanID değerinin Calisanlar tablosuna girilebileceği anlamına gelir.

Yabancı anahtar kısıtlamaları, referans verilen satırın silinmesi veya güncellenmesi durumunda ne olacağını belirleyen eylemlerle birlikte tanımlanabilir:
* ON DELETE CASCADE: Referans verilen satır silindiğinde, bu tablodaki ilgili satırları da siler.
* ON UPDATE CASCADE: Referans verilen satır güncellendiğinde, bu tablodaki ilgili yabancı anahtar değerini de günceller.
* ON DELETE SET NULL: Referans verilen satır silindiğinde, bu tablodaki ilgili yabancı anahtar sütununu NULL olarak ayarlar (sütun NOT NULL değilse).
* ON DELETE NO ACTION / ON UPDATE NO ACTION: Varsayılan davranıştır; referans bütünlüğünü ihlal eden işlemleri engeller.
* ON DELETE RESTRICT / ON UPDATE RESTRICT: NO ACTION ile benzerdir, ancak bazı veritabanlarında NO ACTION ertelenebilirken RESTRICT hemen kontrol eder.

DEFAULT Kısıtlaması

DEFAULT kısıtlaması, bir sütuna değer girilmediğinde otomatik olarak atanacak varsayılan bir değer belirler.

CREATE TABLE Siparisler (
    SiparisID INT PRIMARY KEY,
    MusteriID INT NOT NULL,
    SiparisTarihi DATE DEFAULT GETDATE(), -- SQL Server için
    Durum VARCHAR(20) DEFAULT 'Beklemede'
);

Bu örnekte, SiparisTarihi sütununa değer girilmezse o anki tarih (GETDATE() fonksiyonu SQL Server’a özgüdür, diğer RDBMS’lerde NOW() veya CURRENT_TIMESTAMP gibi farklı fonksiyonlar kullanılabilir) atanır. Durum sütununa değer girilmezse ‘Beklemede’ değeri atanır.

CHECK Kısıtlaması

CHECK kısıtlaması, bir sütundaki tüm değerlerin belirli bir koşulu karşılamasını sağlar. Bu, belirli bir aralıkta veya belirli bir listedeki değerleri zorunlu kılmak için kullanılabilir.

CREATE TABLE Personel (
    PersonelID INT PRIMARY KEY,
    Ad VARCHAR(50) NOT NULL,
    Maas DECIMAL(10, 2) CHECK (Maas >= 0),
    Cinsiyet VARCHAR(10) CHECK (Cinsiyet IN ('Erkek', 'Kadın', 'Belirtilmedi'))
);

Burada, Maas sütunundaki değerlerin sıfırdan büyük veya eşit olması, Cinsiyet sütunundaki değerlerin ise ‘Erkek’, ‘Kadın’ veya ‘Belirtilmedi’ değerlerinden biri olması zorunludur.

Tablo Oluşturma Örnekleri

Şimdiye kadar öğrendiklerimizi birleştirerek daha kapsamlı tablo oluşturma örneklerine bakalım.

Otomatik Artan Anahtar Sütunları

Birincil anahtarlar genellikle otomatik olarak artan sayılardır. RDBMS’lere göre farklı sözdizimleri kullanılır:

SQL Server (IDENTITY):

CREATE TABLE Urunler (
    UrunID INT IDENTITY(1,1) PRIMARY KEY, -- 1'den başla, 1'er 1'er artır
    UrunAdi VARCHAR(100) NOT NULL,
    StokAdedi INT DEFAULT 0 CHECK (StokAdedi >= 0),
    Fiyat DECIMAL(10, 2) NOT NULL CHECK (Fiyat > 0)
);

MySQL (AUTO_INCREMENT):

CREATE TABLE Urunler (
    UrunID INT AUTO_INCREMENT PRIMARY KEY,
    UrunAdi VARCHAR(100) NOT NULL,
    StokAdedi INT DEFAULT 0 CHECK (StokAdedi >= 0),
    Fiyat DECIMAL(10, 2) NOT NULL CHECK (Fiyat > 0)
);

PostgreSQL (SERIAL / BIGSERIAL):

CREATE TABLE Urunler (
    UrunID SERIAL PRIMARY KEY, -- Otomatik olarak bir sequence oluşturur ve kullanır
    UrunAdi VARCHAR(100) NOT NULL,
    StokAdedi INT DEFAULT 0 CHECK (StokAdedi >= 0),
    Fiyat DECIMAL(10, 2) NOT NULL CHECK (Fiyat > 0)
);

İki Tablo Arasında İlişki Kurma

Bir e-ticaret sistemi için Musteriler ve Siparisler tablolarını oluşturalım:

CREATE TABLE Musteriler (
    MusteriID INT IDENTITY(1,1) PRIMARY KEY,
    Ad VARCHAR(50) NOT NULL,
    Soyad VARCHAR(50) NOT NULL,
    Email VARCHAR(100) UNIQUE NOT NULL,
    Telefon VARCHAR(20),
    KayitTarihi DATETIME DEFAULT GETDATE()
);

CREATE TABLE Siparisler (
    SiparisID INT IDENTITY(1,1) PRIMARY KEY,
    MusteriID INT NOT NULL,
    SiparisTarihi DATETIME DEFAULT GETDATE(),
    ToplamTutar DECIMAL(10, 2) CHECK (ToplamTutar >= 0),
    Durum VARCHAR(20) DEFAULT 'Yeni Siparis',
    FOREIGN KEY (MusteriID) REFERENCES Musteriler(MusteriID)
        ON DELETE CASCADE -- Müşteri silindiğinde siparişleri de sil
        ON UPDATE CASCADE  -- Müşteri ID'si güncellendiğinde siparişlerde de güncelle
);

Bu örnekte, Musteriler tablosunun MusteriID‘si, Siparisler tablosundaki MusteriID sütunu tarafından referans alınır. ON DELETE CASCADE ve ON UPDATE CASCADE ile referans bütünlüğü dinamik olarak korunur.

Gelişmiş CREATE TABLE Özellikleri

CREATE TABLE komutu, temel tablo oluşturmanın ötesinde bazı gelişmiş yetenekler de sunar.

Tablodan Tablo Oluşturma (CREATE TABLE AS SELECT)

Mevcut bir tablonun yapısını ve/veya verilerini kullanarak yeni bir tablo oluşturmak için CREATE TABLE AS SELECT (bazı RDBMS’lerde SELECT INTO) sözdizimi kullanılır. Bu, özellikle veri kopyalama, arşivleme veya raporlama için geçici tablolar oluşturmak için kullanışlıdır.

-- Sadece belirli sütunları ve satırları kopyala
CREATE TABLE EskiCalisanlar AS
SELECT CalisanID, Ad, Soyad, DogumTarihi
FROM Calisanlar
WHERE DogumTarihi < '1990-01-01';

-- Sadece tablo yapısını kopyala (veri kopyalama)
CREATE TABLE CalisanYedek LIKE Calisanlar; -- MySQL
CREATE TABLE CalisanYedek AS SELECT * FROM Calisanlar WHERE 1=0; -- PostgreSQL, SQL Server

Önemli Not: CREATE TABLE AS SELECT genellikle kaynak tablodaki kısıtlamaları (PRIMARY KEY, FOREIGN KEY, CHECK vb.) otomatik olarak kopyalamaz. Bu kısıtlamaların yeni tabloya manuel olarak eklenmesi gerekebilir.

Geçici Tablolar (Temporary Tables)

Geçici tablolar, yalnızca geçerli oturum veya işlem süresince var olan tablolardır. Karmaşık sorguların ara sonuçlarını depolamak veya geçici raporlar oluşturmak için kullanılırlar. Oturum sona erdiğinde otomatik olarak silinirler.

SQL Server:

CREATE TABLE #GeciciRapor ( -- Tek hash ile yerel geçici tablo
    ID INT,
    Veri VARCHAR(100)
);

CREATE TABLE ##GlobalGeciciRapor ( -- Çift hash ile global geçici tablo (tüm oturumlar erişebilir)
    ID INT,
    Veri VARCHAR(100)
);

MySQL:

CREATE TEMPORARY TABLE GeciciRapor (
    ID INT,
    Veri VARCHAR(100)
);

PostgreSQL:

CREATE TEMPORARY TABLE GeciciRapor (
    ID INT,
    Veri VARCHAR(100)
) ON COMMIT DROP; -- Oturum bittiğinde veya commit edildiğinde silinir

Dizinler (Indexes)

Dizinler, tabloların belirli sütunlarındaki verilere hızlı erişim sağlamak için oluşturulan özel arama tablolarıdır. CREATE TABLE komutu sırasında PRIMARY KEY ve UNIQUE kısıtlamaları otomatik olarak dizinler oluşturur. Ancak, sorgu performansını artırmak için manuel olarak da dizinler oluşturulabilir.

CREATE TABLE Urunler (
    UrunID INT PRIMARY KEY,
    UrunAdi VARCHAR(100),
    KategoriID INT
);

CREATE INDEX IX_Urunler_KategoriID ON Urunler (KategoriID);

Dizinler, CREATE TABLE komutunun bir parçası olmasa da, tablo tasarımı sırasında göz önünde bulundurulması gereken önemli bir performans faktörüdür.

Tablo Seçenekleri (Table Options)

Bazı RDBMS'ler, CREATE TABLE komutu sırasında tabloya özgü ek seçenekler belirtmeye izin verir.

MySQL'de depolama motoru ve karakter seti belirtme:

CREATE TABLE Ayarlar (
    ID INT PRIMARY KEY,
    AyarAdi VARCHAR(50),
    AyarDegeri VARCHAR(255)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

* ENGINE: MySQL'de depolama motorunu (örn. InnoDB, MyISAM) belirtir.
* DEFAULT CHARSET: Tablonun varsayılan karakter setini ayarlar.
* COLLATE: Tablonun varsayılan sıralama düzenini ayarlar.

CREATE TABLE Kullanımında En İyi Uygulamalar

Verimli, bakımı kolay ve performanslı veritabanları oluşturmak için CREATE TABLE komutunu kullanırken bazı en iyi uygulamaları takip etmek önemlidir:

1. Anlamlı İsimlendirme: Tablo ve sütun adları açıklayıcı, tutarlı ve anlaşılır olmalıdır. Örneğin, MusteriAdresi yerine Musteriler tablosunda Adres sütunu veya MusteriAdresleri tablosu.
2. Doğru Veri Tiplerini Seçin: Her sütun için mümkün olan en küçük ve en uygun veri tipini seçin. Bu, disk alanı kullanımını azaltır ve sorgu performansını artırır. Örneğin, sadece 0-255 arası değerler alacak bir sütun için INT yerine TINYINT kullanın.
3. Kısıtlamaları Etkin Kullanın: PRIMARY KEY, FOREIGN KEY, NOT NULL, UNIQUE, CHECK ve DEFAULT kısıtlamalarını kullanarak veri bütünlüğünü sağlayın. Bu, uygulama katmanında hata yakalamak yerine veritabanı düzeyinde veri tutarlılığını zorlar.
4. Normalizasyon Prensiplerine Uyun: Veri tekrarını en aza indirmek ve veri bütünlüğünü artırmak için veritabanınızı normal formlara (1NF, 2NF, 3NF, BCNF) uygun olarak tasarlayın. Bu, daha esnek ve bakımı kolay bir veritabanı yapısı sağlar.
5. Otomatik Artan Anahtarlar Kullanın: Genellikle, birincil anahtar olarak otomatik artan (IDENTITY, AUTO_INCREMENT, SERIAL) tam sayı sütunları kullanmak en iyi uygulamadır. Bunlar benzersizlik sağlar ve ilişkili tablolar için yabancı anahtar olarak kolayca referans verilebilir.
6. Yorumlar Ekleyin: Özellikle karmaşık tablolar veya sütunlar için veritabanı şemasına yorumlar eklemek, gelecekteki bakım ve dokümantasyon için çok faydalıdır.
7. Sürüm Kontrolü ve Yedekleme: CREATE TABLE komutlarını ve diğer şema değişikliklerini sürüm kontrol sistemlerinde (Git gibi) saklayın. Veritabanınızın düzenli yedeklerini alın.

Sık Karşılaşılan Hatalar ve Çözümleri

CREATE TABLE komutunu kullanırken karşılaşılabilecek bazı yaygın hatalar ve bunların çözümleri:

1. Sözdizimi Hataları: En yaygın hatalardan biridir. Virgül eksikliği, parantezlerin yanlış yerleştirilmesi veya anahtar kelimelerin yanlış yazılması gibi durumlar.
* Çözüm: Komutu dikkatlice gözden geçirin, RDBMS'nizin hata mesajını okuyun ve sözdizimi referansına bakın.
2. Tablo Adı Çakışması: Aynı isimde bir tablo zaten varsa.
* Çözüm: Farklı bir tablo adı seçin veya mevcut tabloyu DROP TABLE komutuyla silin (dikkatli olun!). IF NOT EXISTS ile var olup olmadığını kontrol edebilirsiniz: CREATE TABLE IF NOT EXISTS TabloAdi (...).
3. Sütun Adı Çakışması: Bir tabloda aynı isme sahip iki sütun tanımlamaya çalışmak.
* Çözüm: Sütun adlarını benzersiz yapın.
4. Veri Tipi Uyumsuzluğu: Belirtilen veri tipinin RDBMS tarafından desteklenmemesi veya yanlış kullanılması.
* Çözüm: RDBMS'nizin veri tipi dokümantasyonunu kontrol edin.
5. Kısıtlama İhlalleri: Örneğin, bir PRIMARY KEY sütununa NULL değeri atamaya çalışmak veya UNIQUE bir sütuna zaten var olan bir değeri eklemek.
* Çözüm: CREATE TABLE sırasında kısıtlamaları doğru tanımladığınızdan ve INSERT veya UPDATE işlemlerinde bu kısıtlamalara uyduğunuzdan emin olun.
6. Yabancı Anahtar Referans Hatası: Yabancı anahtarın referans verdiği birincil anahtarın veya tablonun mevcut olmaması.
* Çözüm: Referans verilen tablonun ve birincil anahtarın var olduğundan ve doğru yazıldığından emin olun. Genellikle, referans verilen tablo önce oluşturulmalıdır.

CREATE TABLE Sonrası Yapılabilecek İşlemler

Bir tablo oluşturulduktan sonra, ihtiyaçlar doğrultusunda üzerinde çeşitli işlemler yapılabilir:

* ALTER TABLE: Tablonun yapısını değiştirmek için kullanılır. Yeni sütunlar ekleyebilir, mevcut sütunları değiştirebilir (veri tipi, kısıtlamalar) veya sütunları silebilirsiniz.

ALTER TABLE Calisanlar
    ADD COLUMN Email VARCHAR(100) UNIQUE;

    ALTER TABLE Calisanlar
    ALTER COLUMN DogumTarihi DATETIME; -- SQL Server
    -- ALTER TABLE Calisanlar MODIFY COLUMN DogumTarihi DATETIME; -- MySQL
    -- ALTER TABLE Calisanlar ALTER COLUMN DogumTarihi TYPE TIMESTAMP; -- PostgreSQL

* DROP TABLE: Bir tabloyu veritabanından tamamen silmek için kullanılır. Bu işlem geri alınamaz ve tabloyla birlikte tüm verileri, dizinleri ve kısıtlamaları da siler.

DROP TABLE Calisanlar;

IF EXISTS ile güvenli silme: DROP TABLE IF EXISTS Calisanlar;
* TRUNCATE TABLE: Bir tablodaki tüm verileri silmek için kullanılır, ancak tablonun yapısını korur. DELETE komutuna göre genellikle daha hızlıdır ve otomatik artan anahtarları sıfırlar.

TRUNCATE TABLE Urunler;

Sonuç

CREATE TABLE komutu, ilişkisel veritabanı tasarımının kalbinde yer alır. Bu komutu doğru bir şekilde anlamak ve uygulamak, sağlam, verimli ve bakımı kolay veritabanı sistemleri oluşturmak için temel bir adımdır. Veri tiplerinin, kısıtlamaların ve gelişmiş özelliklerin bilinçli kullanımı, veritabanınızın performansını, bütünlüğünü ve güvenilirliğini doğrudan etkileyecektir.

Veritabanı tasarımı, dikkatli planlama ve en iyi uygulamaların takip edilmesini gerektiren bir süreçtir. Bu rehberde sunulan bilgilerle, CREATE TABLE komutunu ustalıkla kullanarak projeleriniz için güçlü ve optimize edilmiş veritabanı yapı taşları oluşturma yolunda önemli bir adım atmış olacaksınız. Unutmayın, iyi bir veritabanı şeması, uygulamanızın başarısının temelidir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.