Henüz kullanıcılar tarafından erişilemeyen bir web uygulaması üzerinde çalışıyoruz. Patronum, yeni oluşturulan kayıtların tabloda 100'den az kayıt olmasına rağmen 10.000'den fazla kimlik aldığını fark etti. Bir sebepten dolayı web arayüzünün gerçek kayıtlardan 100 kat daha fazla geçici kayıt oluşturduğunu (ve bunları sildiğini) ve bunun birkaç ay içinde aralık dışında kalmamızı sağlayabileceğini varsaydı.
Kimlik enflasyonunun nedeni hakkında doğru olduğunu düşünmüyorum (buna cevap verebilen meslektaş tatilde, bu yüzden kesin olarak bilmiyoruz), ama varsayalım. Bir bigint sütunu kullanmaktan nefret ettiğini ve kimlik sütununu otomatik olarak büyütmeyi durdurmamızı ve ilk "kullanılmayan" tamsayıyı seçen ve onu kimlik olarak kullanan sunucu tarafı kodu yazmamızı istediğini söyledi.
Ben küçük bir pratik deneyimi olan, küçük bir geliştirici rolünü dolduran bir bilgisayar bilimi yüksek lisans öğrencisiyim. Kuruluşumuzun tüm veritabanlarını yönetme ve çoğunu tasarlama konusunda yılların deneyimine sahiptir. Ben düşünüyorum o Bigint Kimlik DBMS işlevselliği taklit bir antipattern kokuyor korkulacak bir şey değildir ve bu, bu durumda yanlış olduğunu. Ama henüz yargılamaya güvenmiyorum.
Her pozisyon için ve her pozisyona karşı argümanlar nelerdir? Bir bigint kullanırsak ne gibi kötü şeyler olabilir ve tekerleğin otomatik arttırma işlevselliğini yeniden keşfetmenin tehlikeleri nelerdir? Her ikisinden de daha iyi olan üçüncü bir çözüm var mı? Kimlik yüz değerlerinin enflasyonundan kaçınmak istemesinin sebepleri ne olabilir? Ben de pragmatik nedenleri duymakla ilgileniyorum - belki bigint kimlikleri teoride çalışıyor, ama pratikte baş ağrısına neden oluyor?
Uygulamanın çok büyük miktarda veri işlemesi beklenmemektedir. Önümüzdeki birkaç yıl içinde 10.000 gerçek kayda ulaşacağından şüpheliyim.
Herhangi bir fark yaratırsa, Microsoft SQL sunucusu kullanıyoruz. Uygulama C # ile yazılmış ve Linq to SQL kullanır.
Güncelleme
Teşekkür ederim, mevcut cevapları ve yorumları ilginç buldum. Ama korkarım sorumu yanlış anladın, bu yüzden bilmek istediklerimi içeriyorlar.
Yüksek kimliklerin gerçek nedeni hakkında gerçekten endişelenmiyorum. Eğer bunu kendi başımıza bulamazsak, farklı bir soru sorabilirim. İlgilendiğim şey, bu davadaki karar sürecini anlamak. Bunun için lütfen uygulamanın günde 1000 kayıt yazacağını ve ardından bunların 9999'unu sileceğini varsayalım . Neredeyse böyle olmadığından eminim, ama patronum onun isteğini yaparken inandığı şey buydu. Öyleyse, bu varsayımsal koşullar altında, bigint kullanmanın veya kimlikler atayacak kendi kodumuzu yazmanın artıları ve eksileri ne olurdu (boşluklar olmadığından emin olmak için zaten silinmiş kayıtların kimliklerini yeniden kullanan bir şekilde)?
Asıl nedene gelince, bunun bir zamanlar başka bir veritabanından veri almak için kod yazdığımızdan, daha sonraki bir geçişin belirli bir ölçüde yapılabileceğine dair bir kavram kanıtı olarak olduğunu düşünüyorum. İş arkadaşımın ithalat sırasında aslında birkaç bin kayıt oluşturduğunu ve daha sonra sildiğini düşünüyorum. Bunun gerçekten böyle olup olmadığını doğrulamalıyım, ancak eğer öyleyse, harekete geçmeye bile gerek yok.