# Veritabanı Şeması

Adres: https://softwaredictionary.org/tr/terimler/schema
Kategori: Veritabanları
Son güncelleme: 2026-09-30
İngilizcesi: Database Schema
Okunuşu: deytıbeys skima

Kısaca: Veritabanı şeması, bir veritabanının tablolarını, sütunlarını, veri türlerini, ilişkilerini ve saklanan verinin uyması gereken kuralları tanımlayan planıdır.

## Veritabanı şeması nedir?

Veritabanı şeması, veritabanındaki verinin nasıl düzenlendiğinin biçimsel tanımıdır. İlişkisel bir veritabanında tabloları, her tablodaki sütunları, her sütunun veri türünü ve birincil anahtarlar, yabancı anahtarlar ve `NOT NULL` kuralları gibi kısıtları listeler. Şema yalnızca yapıyı tarif eder; içinde saklanan gerçek veri satırlarını değil.

Şemayı `CREATE TABLE` gibi SQL ifadeleriyle tanımlar, daha sonra `ALTER TABLE` ile değiştirirsiniz; bunu genellikle her ortamın senkron kalması için sürümlü veritabanı migration'ları aracılığıyla yaparsınız. Veritabanı daha sonra şemayı her yazmada uygular: bir tamsayı sütununa metin eklemeye ya da zorunlu bir alanı boş bırakmaya çalışırsanız yazma reddedilir. Buna yazarken şema (schema-on-write) denir ve hatalı veriyi erkenden dışarıda tutar.

İyi bir benzetme bir binanın mimari planıdır: odaları ve nasıl bağlandıklarını gösterir, ancak mobilyaları ya da içerideki insanları değil. Birçok NoSQL veritabanı şemasız (schemaless) olarak tanımlanır; ancak pratikte uygulama yine de belirli bir biçim bekler, dolayısıyla şema sadece veritabanından uygulama koduna taşınır. Bu yaklaşıma bazen okurken şema (schema-on-read) denir.

Şema kelimesi karışıklığa da yol açabilir; çünkü PostgreSQL gibi bazı veritabanları onu bir ad alanı (namespace) için kullanır: tek bir veritabanı içinde tabloları gruplayan, `public` ya da `sales` gibi adlandırılmış bir kapsayıcı. Bu anlamda `sales.orders`, `sales` şemasındaki `orders` tablosu demektir. Bağlam genellikle birinin genel yapıyı mı yoksa bu tür bir ad alanını mı kastettiğini söyler.

## Önemli noktalar

- Şema, verinin kendisini değil, veritabanının yapısını tanımlar.
- Tabloları, sütunları, veri türlerini, anahtarları ve kısıtları kapsar.
- Şema değişiklikleri genellikle sürümlü migration'larla uygulanır.
- İlişkisel veritabanları veri yazıldığında şemayı uygular.
- PostgreSQL'de şema aynı zamanda tabloları gruplayan bir ad alanıdır.

## Örnek: İki ilişkili tablonun şemasını tanımlamak

```sql
-- Each column has a name, a data type, and optional rules
CREATE TABLE customers (
  id    SERIAL PRIMARY KEY,
  email TEXT NOT NULL UNIQUE
);

CREATE TABLE orders (
  id          SERIAL PRIMARY KEY,
  customer_id INT NOT NULL REFERENCES customers(id),
  total       NUMERIC(10, 2) NOT NULL,
  created_at  TIMESTAMP DEFAULT now()
);
```

## Sık sorulan sorular

**Şema ile tablo arasındaki fark nedir?**

Tablo, veri satırlarını tutan tek bir yapıdır; şema ise tüm tabloları ve aralarındaki ilişkileri içeren veritabanının tam tasarımıdır. PostgreSQL'de şema aynı zamanda adlandırılmış bir tablo grubu da olabilir.

**NoSQL veritabanlarının şeması var mı?**

Birçok NoSQL veritabanı sabit bir şema uygulamaz; bu yüzden her kaydın farklı alanları olabilir. Veri yine de uygulamanın dayandığı örtük bir biçime sahiptir ve birçok doküman veritabanı istediğinizde isteğe bağlı doğrulama kuralları eklemenize izin verir.

**Bir veritabanı şeması güvenle nasıl değiştirilir?**

Veritabanı migration'ları kullanın: her değişikliği sırayla uygulayan, kod gibi gözden geçirilebilen ve test edilebilen küçük, sürümlü betikler. Canlı sistemlerde eski bir sütunu kaldırmadan önce yeni bir sütun eklemek gibi geriye dönük uyumlu adımları tercih edin.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
