Geçiş kontrolünü kendi ellerinizle kurun
Bölümler
Bunlar da ilginizi çeker
Site hakkında
Kartlı geçiş, akıllı kilit ve kapı otomasyonu konularını uygulamalı anlatan bağımsız bir kaynak. Ürün seçiminden kablolamaya, kurulumdan arıza çözümüne kadar adım adım rehberler bulursunuz.

Kart Verilerini Sunucuda Çarpışmadan Saklamak

Kart Verilerini Sunucuda Çarpışmadan Saklamak

Geçiş kontrol sistemi kurarken karşılaştığım en sinir bozucu sorunlardan biri, aynı karttan yapılan iki okumayı veri tabanında iki kez kaydetmekti. Birisi kapıya kartını hızlı bir şekilde yaklaştırıyor, okuyucu bu işlemi iki defa algılıyor ve sistem bana "iki kere giriş yaptı" diyor. Sonra kullanıcı şikayet ediyor, ben de başını ağrıtan bir problemi çözmek için saatler harcıyorum.

Eğer siz de kendi başınıza bir sistem kuracaksanız, bu tür çarpışmalardan (duplicate) kaçınmak için hangi yöntemleri kullanabileceğinizi anlatmak istiyorum. Veri tabanı kart duplicate önleme konusu, aslında çok karmaşık değil—sadece doğru stratejiye ihtiyacınız var.

1. Zaman Penceresi Yöntemi ile Koruma

En basit ve en yaygın yöntemi ben de ilk başta uyguladım: zaman penceresi oluşturmak. Sistem bir kartı okuduğunda, aynı kart için belirli bir süre (mesela 2-3 saniye) içerisinde gelen okumayı otomatik olarak reddeder.

Teknik olarak şu şekilde çalışır: Veritabanında her kart okumısının kaydı alınırken, son okuma zamanı tutulur. Yeni bir okuma geldiğinde, sistem o kartın son kaydı ile şimdiki zaman arasındaki farkı kontrol eder. Eğer 2 saniyeden az ise, gelen komutu yok sayar.

Bu yöntemi uygulamak için sunucu tarafında basit bir kontrol yeterlidir. Ben genellikle Unix timestamp kullanarak karşılaştırma yapıyorum, çünkü timestamp karşılaştırması hızlı ve güvenilirdir. Zaman penceresi değerini (ben 2-3 saniye öneriyorum) kendi ihtiyacınıza göre ayarlayabilirsiniz.

2. Benzersiz İşlem Kimliği (Transaction ID) Stratejisi

Bir adım ileri gitmek istiyorsanız, her okuma işlemine benzersiz bir kimlik atayabilirsiniz. Okuyucu ile sunucu arasındaki her iletişimde, okuyucu bu işleme bir hash değeri veya sıra numarası ekler. Sunucu, aynı hash değeri ile gelen işlemi bir kez kaydeder, ikinci gelişi otomatik olarak reddeder.

Bu yöntem özellikle ağ gecikmelerinin yaşandığı ortamlarda işe yarar. Okuyucu sunucuya "Bu işlem sıra 12345'tir" diyebilir. Sunucu sıra 12345'i veritabanında görüyorsa, aynı sıra numarası ile gelen tekrar işlemi kabul etmez.

3. Veritabanı Seviyesinde Kısıtlama ve Index Kullanımı

Veri tabanı kart duplicate önleme konusunda en güvenilir yaklaşım, veritabanı motor tarafından yönetilen bir kısıtlama kullanmaktır. Tablomuza bir UNIQUE constraint (benzersizlik sınırlaması) ekleyebilirim, ancak burada dikkatli olmak gerekir.

Doğru yapı şöyledir: Tablo içinde kart numarası, okuma tarihi-saati ve bir sıra kimliğini birlikte ele alıp, bu kombinasyon için bir UNIQUE constraint oluştururum. Böylece veritabanı seviyesinde, tam olarak aynı anlık değer ile iki kayıt engellenmiş olur.

Ayrıca kart numarası ve tarih-saat kombinasyonunda bir INDEX oluşturmak, sorguların hızlanmasına yardımcı olur. Ben genellikle (card_id, read_timestamp) şeklinde composite index kullanıyorum.

4. Uygulama Seviyesinde Duplicate Kontrolü

Sunucu yazılımında, yeni bir kart okuma kaydını veritabanına eklemeden önce kontrol yapabilirim. Son 5 saniye içerisinde aynı kart tarafından bir okuma var mı diye sorgulanır. Varsa, bu yeni okuma kaydedilmez.

Bu yöntemi kullanırken dikkat edilmesi gereken nokta, veritabanı sorgusunun performanslı olması gerektiğidir. Çünkü her kart okumada bu kontrol yapılacak ve sistem yavaşlamamalıdır. İyi tasarlanan index ile bu sorun ortadan kalkacaktır.

5. Okuyucu Firmware Seviyesinde Çözüm

Bazı modern okuyucuların kendileri de duplicate okumayı engelleme özelliğine sahiptir. Cihazın ayarlarında "Anti-tamper" veya "Debounce delay" gibi seçenekler bulabilirsiniz. Bu sayede okuyucu seviyesinde zaten ilk filtreleme yapılır ve sunucuya yanlış veri ulaşmaz.

Okuyucunuzun kullanım kılavuzunu incelemek, bu tür ayarların olup olmadığını görmek için faydalı olacaktır.

Sık Yapılan Hatalar

Özet

Veri tabanında kart duplicate kaydını engellemek için tek bir "doğru yöntem" yoktur. İhtiyacınıza göre kombinasyon yapabilirsiniz: Basit bir sistem için zaman penceresi yeterlidir, daha güvenilir bir yapı için veri tabanı kısıtlamaları ekleyin. En iyi pratik, sunucu uygulama seviyesinde kontrol yapmak ve veritabanı motor tarafından da desteklenmesidir. Bu iki katmanlı savunma, çoğu durumdaki sorunları çözer ve kart okuma işlemlerinin temiz kalmasını sağlar.

© 2026 MMD Access