SQL Veri Türleri: Kapsamlı Rehber
Giriş
SQL veri türleri, veritabanında saklanacak verilerin türünü ve formatını belirleyen temel yapı taşlarıdır. Doğru veri türü seçimi, veri bütünlüğü, performans ve depolama verimliliği açısından kritik öneme sahiptir. Bu yazıda, SQLSQL (Structured Query Language): Veri tabanlarında veri sorgulama ve yönetimi için kullanılan standart programlama dilidir. veri türlerini kategorilere ayırarak detaylı bir şekilde inceleyeceğiz.
Veri Türü Nedir?
Veri türü, bir sütunda saklanabilecek verinin türünü, boyutunu ve formatını tanımlar. Her sütunSütun (Column): Tablodaki belirli bir veri tipindeki alanlar. Her sütun bir veri türüne sahiptir. yalnızca belirtilen veri türüne uygun değerleri kabul eder. Bu, veri tutarlılığını ve bütünlüğünü sağlar.
Sayısal Veri Türleri
Sayısal veri türleri, tam sayılar ve ondalıklı sayılar için kullanılır. Farklı veritabanı sistemleriVeritabanı Sistemi: MySQL, PostgreSQL, SQL Server gibi farklı veritabanı yönetim sistemleri kendi özel veri türlerine sahip olabilir. farklı isimler kullanabilir, ancak temel kavramlar benzerdir.
Tam Sayı Türleri
| Veri Türü | Boyut | Değer Aralığı | Açıklama |
|---|---|---|---|
TINYINT |
1 byte | -128 to 127 (signed) 0 to 255 (unsigned) |
Çok küçük tam sayılar için |
SMALLINT |
2 bytes | -32,768 to 32,767 (signed) 0 to 65,535 (unsigned) |
Küçük tam sayılar için |
INT / INTEGER |
4 bytes | -2,147,483,648 to 2,147,483,647 (signed) 0 to 4,294,967,295 (unsigned) |
Standart tam sayı türü, en yaygın kullanılan |
BIGINT |
8 bytes | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Çok büyük tam sayılar için |
Ondalıklı Sayı Türleri
DECIMAL(p, s)/NUMERIC(p, s): Sabit hassasiyetli ondalıklı sayılar.ptoplam basamak sayısı,sondalık basamak sayısıdır. Finansal veriler için idealdir.FLOAT: Tek hassasiyetli kayan noktalı sayı (32-bit). Yaklaşık değerler için kullanılır.DOUBLE/REAL: Çift hassasiyetli kayan noktalı sayı (64-bit). Daha yüksek hassasiyet gerektiren durumlar için.
DECIMAL kullanın. FLOAT ve DOUBLE yuvarlama hatalarına neden olabilir.
Metin Veri Türleri
Metin veri türleri, karakter dizilerini saklamak için kullanılır. Boyut ve performans açısından farklılık gösterirler.
Sabit Uzunluklu Metin
CHAR(n): Sabit uzunlukta karakter dizisi. Maksimum 255 karakter. Kısa ve sabit uzunlukta veriler için (telefon numaraları, posta kodları).
Değişken Uzunluklu Metin
VARCHAR(n): Değişken uzunlukta karakter dizisi. Maksimum uzunluk belirtilir. En yaygın kullanılan metin türü.TEXT: Uzun metinler için. Boyut sınırı veritabanı sistemine göre değişir (genellikle 65,535 byte).MEDIUMTEXT: Orta uzunlukta metinler için (yaklaşık 16 MB).LONGTEXT: Çok uzun metinler için (yaklaşık 4 GB).
CHAR vs VARCHAR
| Özellik | CHAR | VARCHAR |
|---|---|---|
| Depolama | Sabit boyut (belirtilen uzunluk kadar) | Değişken boyut (gerçek uzunluk + 1-2 byte) |
| Performans | Daha hızlı (sabit boyut) | Biraz daha yavaş (değişken boyut) |
| Kullanım | Sabit uzunlukta veriler | Değişken uzunlukta veriler |
Tarih ve Zaman Veri Türleri
Tarih ve zaman verilerini saklamak için özel veri türleri kullanılır. Bu türler, tarih hesaplamaları ve formatlamaları için optimize edilmiştir.
DATE: Sadece tarih bilgisi (YYYY-MM-DD formatında). Örnek: 2025-11-25TIME: Sadece zaman bilgisi (HH:MM:SS formatında). Örnek: 14:30:00DATETIME: Tarih ve zaman birlikte (YYYY-MM-DD HH:MM:SS). Örnek: 2025-11-25 14:30:00TIMESTAMP: Unix zaman damgası. Otomatik güncelleme özelliği olabilir. Genellikle kayıt oluşturma/güncelleme zamanlarını takip etmek için kullanılır.YEAR: Sadece yıl bilgisi (1901-2155 arası).
TIMESTAMP türü zaman dilimi (timezone) bilgisini içerir, DATETIME içermez. Uygulamanızın gereksinimlerine göre seçim yapın.
Boolean Veri Türleri
Boolean veri türü, doğru/yanlış değerlerini saklamak için kullanılır. Farklı veritabanı sistemleri farklı yaklaşımlar kullanır:
BOOLEAN/BOOL: TRUE veya FALSE değerleri. Bazı sistemlerde 1/0 veya 'Y'/'N' olarak da saklanabilir.TINYINT(1): MySQL'de boolean için kullanılan alternatif (0 = false, 1 = true).
Binary Veri Türleri
İkili (binary) verileri saklamak için kullanılır. Dosyalar, resimler veya şifrelenmiş veriler için uygundur.
BINARY(n): Sabit uzunlukta ikili veri.VARBINARY(n): Değişken uzunlukta ikili veri.BLOB: Binary Large Object. Büyük ikili veriler için (resimler, dosyalar).MEDIUMBLOB: Orta boyutlu ikili veriler.LONGBLOB: Çok büyük ikili veriler.
Özel Veri Türleri
Bazı veritabanı sistemleri, özel ihtiyaçlar için ek veri türleri sunar:
PostgreSQL Özel Türleri
JSON/JSONB: JSON verilerini saklamak için. JSONB ikili format kullanır ve daha hızlı sorgulama sağlar.ARRAY: Dizi verilerini saklamak için.UUID: Evrensel benzersiz tanımlayıcılar için.ENUM: Önceden tanımlanmış değer listesi.
MySQL Özel Türleri
ENUM: Önceden tanımlanmış değer listesi. Örnek: ENUM('küçük', 'orta', 'büyük')SET: Birden fazla değer seçilebilen liste.GEOMETRY: Coğrafi veriler için (nokta, çizgi, poligon).
Veri Türü Seçimi: En İyi Uygulamalar
1. Doğru Boyut Seçimi
- Gereksinimden büyük veri türü kullanmayın. Bu hem depolama alanını hem de performansı olumsuz etkiler.
- Gelecekteki büyüme ihtimalini göz önünde bulundurun, ancak aşırı büyük türler seçmeyin.
2. NULL Değerler
- Gerekli olmayan sütunlar için
NULLizni verin. - Zorunlu alanlar için
NOT NULLkısıtlaması kullanın.
3. Varsayılan Değerler
- Uygun durumlarda
DEFAULTdeğerleri kullanın. - Örneğin:
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
4. Performans Optimizasyonu
- İndekslenmiş sütunlar için daha küçük veri türleri seçin.
VARCHARyerineCHARkullanabileceğiniz durumları değerlendirin.- Büyük metin alanlarını ayrı tablolarda saklamayı düşünün.
Veritabanı Sistemlerine Göre Farklılıklar
Farklı veritabanı sistemleriVeritabanı Sistemi: MySQL, PostgreSQL, SQL Server, Oracle gibi farklı veritabanı yönetim sistemleri. aynı kavramlar için farklı isimler kullanabilir:
| Kavram | MySQL | PostgreSQL | SQL Server |
|---|---|---|---|
| Tam Sayı | INT | INTEGER | INT |
| Ondalıklı | DECIMAL | NUMERIC | DECIMAL |
| Metin | VARCHAR | VARCHAR | NVARCHAR |
| Büyük Metin | TEXT | TEXT | NVARCHAR(MAX) |
| Tarih-Zaman | DATETIME | TIMESTAMP | DATETIME2 |
Yaygın Hatalar ve Çözümleri
Hata 1: Yanlış Veri Türü Seçimi
Problem: Telefon numarası için INT kullanmak (başında 0 olan numaralar kaybolur).
Çözüm: VARCHAR veya CHAR kullanın.
Hata 2: Gereksiz Büyük Veri Türleri
Problem: Küçük sayılar için BIGINT kullanmak.
Çözüm: İhtiyacınıza uygun en küçük veri türünü seçin.
Hata 3: Finansal Veriler için FLOAT Kullanımı
Problem: Para miktarları için FLOAT kullanmak (yuvarlama hataları).
Çözüm: DECIMAL(10, 2) gibi sabit hassasiyetli türler kullanın.
Sonuç
SQL veri türleri, veritabanı tasarımının temel taşlarıdır. Doğru veri türü seçimi, veri bütünlüğü, performans ve bakım kolaylığı açısından kritik öneme sahiptir. Her veri türünün kendine özgü özellikleri, avantajları ve sınırlamaları vardır. Projenizin gereksinimlerini dikkatlice analiz ederek en uygun veri türlerini seçmek, başarılı bir veritabanı tasarımının anahtarıdır.
Unutmayın: Veri türü seçimi, veritabanı performansını ve ölçeklenebilirliğini doğrudan etkiler. Gelecekteki değişiklikler için esneklik bırakırken, gereksiz kaynak kullanımından kaçınmak önemlidir.
Kaynakça
- SQL Standard (ISO/IEC 9075)
- MySQL 8.0 Reference Manual - Data Types
- PostgreSQL Documentation - Data Types
- Database Design for Mere Mortals - Michael J. Hernandez