ACCESS VERİTABANI TASARIM
Bir Excel dosyası vardı: 80 sütun, 12.000 satır. Bir müşteri sipariş verdiğinde yeni satır eklenirdi; aynı müşterinin adresi, telefonu, vergi numarası her satırda tekrar yazılırdı. Müşteri taşınınca onlarca satır güncellemek gerekirdi. Sonunda biri bu dosyayı Access'e taşıdı ve aynı veri üç tablo halinde, hiç tekrar olmadan tutuldu.
Access veritabanı tasarımı, veriyi nereye koyacağına karar vermektir. Tek bir tabloya tıkıştırılan veri kısa sürede yönetilemez hale gelir; doğru tablolara ayrılmış veri ise yıllarca düzenli büyür. Tasarım kararları ileride hangi sorgunun ne kadar hızlı çalışacağını, hangi raporun ne kadar kolay alınacağını belirler.
Access Neden Excel'den Farklı?
Excel hücre tabanlıdır — her hücre bağımsız bir veri parçasıdır. Access kayıt tabanlıdır — her satır bir gerçek dünya nesnesini temsil eder ve sütunlar o nesnenin özellikleridir. Bu fark üç önemli sonuç doğurur:
- Veri tipi zorunlu: Her sütun belirli bir tipte veri kabul eder; tarih sütununa metin yazılamaz.
- İlişki kurulabilir: Tablolar arasında bağlantı tanımlanabilir; bir tabloda olmayan bir referans kayıt edilemez.
- Eşzamanlı kullanım: Birden fazla kullanıcı aynı veriyi aynı anda düzenleyebilir, satır kilitleme otomatiktir.
Bu özellikler veri bütünlüğünü Excel'e göre çok daha güçlü hale getirir.
Tablo Nedir? Nasıl Tasarlanır?
Tablo, bir gerçek dünya nesnesinin (müşteri, ürün, sipariş, çalışan) kayıtlarını tutan iki boyutlu yapıdır. Bir müşteri yönetim sistemi düşünün:
- Musteriler tablosu: MusteriID, Ad, Soyad, Telefon, Email, KayitTarihi
- Siparisler tablosu: SiparisID, MusteriID, SiparisTarihi, Tutar, Durum
- Urunler tablosu: UrunID, UrunAdi, Kategori, BirimFiyat, StokAdedi
- SiparisDetay tablosu: DetayID, SiparisID, UrunID, Adet, BirimFiyat
Her tablo bir nesneye odaklanır. Müşteri bilgisi yalnızca Musteriler'de, ürün bilgisi yalnızca Urunler'de tutulur. Sipariş yapısı Siparisler ve SiparisDetay arasında ikiye bölünür çünkü bir sipariş birden çok ürün satırı içerebilir.
Birincil Anahtar (Primary Key)
Her tabloda bir kaydı diğerlerinden ayırt eden, tekrarsız bir sütun olmak zorundadır. Bu sütuna birincil anahtar denir. Access'te genelde otomatik artan sayı tipinde (AutoNumber) bir ID kullanılır.
Birincil anahtarın iki kuralı vardır: tekrarsız olmalı ve boş kalmamalı. AutoNumber bu iki kuralı otomatik garantiler. Müşteri tablosunda telefon numarasını birincil anahtar yapmak mantıklı görünse de, müşteri numarasını değiştirdiğinde her şey patlar; ID kullanmak güvenli yoldur.
İlişkiler ve Yabancı Anahtar
İki tabloyu birbirine bağlayan köprü, yabancı anahtardır (foreign key). Siparisler tablosundaki MusteriID, Musteriler tablosundaki MusteriID'ye referans verir. Bir sipariş kaydı eklendiğinde Access şu kontrolü yapar: "Bu MusteriID gerçekten Musteriler tablosunda var mı?" Yoksa kayıt reddedilir.
İlişki türleri:
- Bire-bir (1:1): Bir müşterinin bir kullanıcı profili olur. Nadiren kullanılır.
- Bire-çok (1:N): Bir müşterinin birden çok siparişi olabilir. En yaygın türdür.
- Çoka-çok (N:N): Bir sipariş birden çok ürün içerir, bir ürün birden çok siparişte yer alır. Doğrudan kurulamaz; arada bir bağlantı tablosu (SiparisDetay) ile çözülür.
Access'in İlişkiler penceresinden ilişki çizgileri çekilir. Bu konunun güncel ayrıntıları Microsoft'un Access destek sayfasında yer alır. "Bilgi Tutarlılığını Zorla" seçeneği işaretlenirse bütünlük kuralları aktif olur.

Normalizasyon — Veriyi Sadeleştirme
Normalizasyon, veri tekrarını ortadan kaldıran ve tabloları sade hale getiren süreçtir. Üç temel adımı vardır:
Birinci Normal Form (1NF)
Her hücrede tek bir değer olmalı. "Telefon" sütununa "0555-111-22-33, 0212-555-66-77" yazılamaz; iki telefon iki ayrı kayıt ya da Telefonlar tablosunda iki satır olmalıdır.
İkinci Normal Form (2NF)
Her sütun birincil anahtara tam bağımlı olmalı. Siparisler tablosunda MusteriAdi tutulmaz; çünkü MusteriAdi MusteriID'ye bağlıdır, SiparisID'ye değil. Müşteri adı Musteriler tablosunda bulunur; gerektiğinde sorguda birleştirilir.
Üçüncü Normal Form (3NF)
Hiçbir sütun başka bir sütunla hesaplanabilir olmamalı. Toplam = Adet × BirimFiyat ise, Toplam sütunu tutulmaz; gerektiğinde sorguda hesaplanır.
Bu üç kural takip edilirse veri tekrarı en aza iner, güncelleme tutarsızlıkları ortadan kalkar.
Tasarım Görünümü ve Veri Tipleri
Access'te tablo iki ekrana sahiptir: Veri Sayfası Görünümü (veriyi görürsünüz) ve Tasarım Görünümü (yapıyı düzenlersiniz). Tasarım görünümünde her sütun için veri tipi seçilir:
- Kısa Metin: 255 karaktere kadar yazı (ad, telefon, email).
- Uzun Metin: Açıklama, yorum, uzun notlar.
- Sayı: Tam sayı, ondalık. Birim Fiyat için Para Birimi tipi daha uygundur.
- Tarih/Saat: Tarih sıralaması ve filtre kabiliyeti için zorunlu.
- Evet/Hayır: Mantıksal işaret (aktif, pasif).
- Otomatik Sayı: Birincil anahtar için ideal.
Doğru veri tipi sorgu hızını da etkiler; metin olarak tutulan bir sayı kolonu üzerinde toplama işlemi yapılamaz.
Tasarımı Bozan Klasik Hatalar
Sık karşılaşılan tasarım hataları:
- Tek tablo içinde her şeyi tutmak — Excel'den Access'e geçmiş ama mantığı değişmemiş tasarımlar.
- Yabancı anahtar yerine isim yazmak — "Müşteri Adı" sütunu, "MusteriID" yerine. İsim değişince her şey çöker.
- Hesaplanabilir veriyi sabit tutmak — toplam, yaş, kıdem yılı gibi alanlar sorguda hesaplanmalı.
- Veri tipi yanlış seçimi — telefon numarasını Sayı tutmak. 0 ile başlayan numaralar sıfırı atar.
- İlişkilere bütünlük kuralı koymamak — silinen müşteri kayıtları orphan sipariş bırakır.
Tasarım kararlarını veritabanına veri girmeden önce vermek hayati önemde. Sonradan değiştirmek mümkün ama mevcut veriyi taşımak külfetli.
Tablo tasarımı ve ilişkiler tarafını sıfırdan kavramak isteyenler için Access eğitimi uygulamalı bir başlangıç sunar. Tasarım üzerine sorgu, form, rapor ve makro katmanlarını eklemek isteyenler için uygulamalı ileri Access eğitimi bir sonraki doğal adımdır.
İyi tasarlanmış bir Access veritabanı zaman içinde büyür, yavaşlamaz; kötü tasarlanmış olan ise birkaç yüz kayıttan sonra elden çıkmaz hale gelir.
Sıkça Sorulan Sorular
Access mi SQL Server mı tercih etmeli?
Access tek bilgisayar ya da küçük ofis kullanımı için yeterlidir, dosya tabanlıdır. Eşzamanlı kullanıcı sayısı 10-15'i aştığında, veri 2 GB sınırını zorladığında, web ya da mobil uygulamaya bağlanması gerektiğinde SQL Server daha uygundur. Access prototip ve küçük çözüm aracı olarak güçlüdür.
Bir tablodaki kayıt sayısı sınırı nedir?
Access bir dosyada toplam 2 GB veri tutar, bu sınıra göre tablo başına yaklaşık 1-2 milyon satıra kadar performans makul kalır. Sınır yaklaştığında dosyayı bölmek (front-end / back-end yapısı) ya da SQL Server'a taşımak gerekir. Bağlantı yöntemi değişse de tasarım sabit kalır.
Otomatik artan sayı boş bir değer kalırsa tekrar kullanılır mı?
Hayır. AutoNumber sıraladığı bir sayıyı silinen kayıt nedeniyle geri vermez. Bir sipariş silindiğinde o ID bir daha kullanılmaz. Bu durum veri analizi için olumlu — geçmişte bir kayıt olduğunu anlamak için ID boşlukları izlenebilir.
Bütünlük kuralı koyduğum tabloyu nasıl güncellerim?
Bütünlük kuralı aktifken referansta olan ana kaydı (örneğin Musteri) silmek otomatik reddedilir. Çözüm Basamaklı Sil ya da Basamaklı Güncelle seçeneklerini ilişki tanımında aktif etmektir; bu, ana kayıt silindiğinde bağlı tüm alt kayıtların da otomatik silinmesini sağlar. Tehlikeli olduğundan kritik tablolarda kapalı bırakılır.
Veri tipi sonradan değiştirilebilir mi?
Evet ama riskli. Metin tipinden Sayı tipine geçişte uyumsuz değerler kaybolur. Tarih tipine geçişte yanlış formatlı metinler boşa düşer. En güvenli yol: önce yeni bir sütun ekleyip eski sütundan doğrulanmış veri kopyalamak, ardından eski sütunu silmek. Veriyi yedeklemek bu işlemde zorunludur.
Tablo isminde Türkçe karakter kullanmak sorun çıkarır mı?
Sorgu yazarken hata vermez ama VBA kodlarında, dış sistemlerle entegrasyonda, başka sürümlerde taşınırken sorun çıkarabilir. Profesyonel veritabanlarında <strong>tablo ve sütun adları</strong> İngilizce, ASCII karakterli ve boşluksuz tutulur (Musteriler, SiparisTarihi gibi). Bu uzun vadeli kalıcılık için önerilir.
Normalizasyon her zaman uygulanmalı mı?
İlk üç normal form çoğu kurumsal sistemde standarttır. Ancak okuma yoğun raporlama ortamlarında performans için bazı tabloların <strong>kasıtlı denormalizasyonu</strong> (veri tekrarı) tercih edilebilir. Ana kural: normalize tasarla, performans gerektiriyorsa hedefli noktada denormalize et.



