Bu sayfadaki yazılar
Sayfanın metni
Sayfa 14
Üç Tür Dosya
Veri tabanı programlarında üç tür disket dosyası kullanılabilir. İlki sıradüzensel (seguential) dosyadır. Bu dosyada tüm bilgi birleştirilerek ardışık olarak diskete aktarılır. Programlarınızı diskete ya da kasete sıradüzensel dosya olarak kayıt edebilirsiniz. Sıradüzensel dosya kullanıyorsanız, bilgileri birbirinden ayırt etmek için bilgi ögeleri arasına ayraçlar koymak zo- . Sıradüzensel dosyaların kullanımında karşılaşılan problemlerden biri, bir kayıtın değiştirilmesi sırasında yeni yerleştirillecek kayıtın eskisinden daha farklı bir uzunlukta olmasından doğar. Bu durum raflara kitap yerleştirmeye benzetilebilir. İnce bir kitabı raftan çıkarın ve yerine kalın bir tane koyun. Boş yer açmak için kalan kitapların tümünü kaydırmak gerekecektir. Eğer değişiklik seyrek olarak yapılıyor ise eski kaydı silerek yerini boş bırakmak ve yenisini en sona eklemek bir çözüm olabilir. İkinci tür, rölatif dosyalardır. Bu türü de bir sıra güvercin yuvasına benzetebiliriz. Belirli bir tanesi dolu olup diğerleri kısmen boş olabilir. Bu yapıda bir dosyayı genişlettiğinizde yer açmak için kaydırma yapmanız gerekmez. Dosya, en büyük kaydı içine alacak kadar büyük bir alan içerdiği sürece hiçbir sorunla karşılaşmazsınız. Karmaşık bilgi dosyalama sistemlerinde genellikle kullanılan dosya türü budur. Üçüncü tür bir sıradüzensel dosyadır, fakat bir adres tablosuyla birlikte ele alınır (bir disketin kılavuzu gibi). Bu tür dosyalara HİBRİD (melez) dosya denilmektedir. Kullanılmak için yapılan programlamanın hamallığı oldukça fazladır. Kazanılan alan, ek programlama ve tablo tarafından harcanılan alandan büyük olmadıkça bu yöntem pek tavsiye edilmez. Yandaki şekil üç dosya türünü de şematize etmektedir. Eğer disk işletim sisteminiz rölatif dosyaların kullanımına olanak sağlıyorsa (aynı zamanda rasgele-erişimli dosya adıyla da anılir), disketteki kalan yeriniz olmadığı sürece bu türü kullanmak isteyeceksiniz. Eğer sisteminiz rölatif dosyaların kullanımını içermiyorsa, programınızı bunu sağlayacak biçimde tasarlayabilirsiniz. Bunun için bir tablo tutabilirsiniz ya da kayıt numarasını disketteki adresine (track ve sektör) çeviren bir formül kullanabilirsiniz. Daha sonra kaydı doğrudan track ve sektör kullanarak yazabilirsiniz. Bu süreç biraz karmaşıktır. fakat yapmaya değer.
Çıkışın Planlanması
Kazanılan tecrübeler planlamanın en önemli kısmının programın çıkış İşlevlerinden oluştuğunu göstermektedir. İstediğiniz çıktı türleri üzerinde düşünmek, bilgi dosyalamanın sizin için en kullanışlı yolunu gösterir, ayrıca giriş işlevlerinin tanımlanmasına da yardımcı olur. Soruna iki farklı açıdan bakabiliriz; bilginin nasıl kodlanması gerektiği ve dosyanın nasıl taranacağı. Yine sondan başa doğru gitmek en iyisi. İlk olarak tarama işlemine göz atalım.
Tarama Zamanı
Alıcıdır
Diyelim ki dosyanızda arama yapmak istiyorsunuz. Elinizdeki dosyada belirli bir bilgi grubuna karşılık gelecek bir bilgi ögesi var -örneğin bir yazar adı- ve siz bu yazara ait tüm kitapların adlarını görmek istiyorsunuz. Yazar adı anahtar olarak kullanılmaktadır ve siz, anahtar kullanarak yazara ilişkin tüm kayıtlara ulaşmak istiyorsunuz. Programın yazar adını bulabilmesi için önce her kayıt içindeki veri ögelerinin yerlerini ve uzunluklarını belirlemeniz gereklidir. Yazar adı kayıt içinde ilk 16 byte'ı kaplayabilir. Disketten okuma yapıp anahtar ile karşılaştırırsınız. Eğer aynı iseler bu kayıt istediğiniz kayıttır. Tüm istediğiniz kayıtların ekrana ve/veya yazıcıya dökümünü yapmanız mümkündür. Fakat bu noktada önemli bir sorun ile karşılaşırsınız. Disketten yazar adını alıp anahtar ile karşılaştırma bir ya da iki saniye sürebilir, ama eğer her biri bir saniye sürecek şekilde taranması gereken bin adet kaydınız var ise...! Bu durumda tüm dosyayı taramak yaklaşık 20 dakika alacaktır. Bu süre küçümsenmeyecek kadar büyüktür. Bunun altından nasıl kalkılabilir?
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 15
Dizin Dosyası
Yaratmak
Sorunun çözümü dizin (index) dosyasındadır (şekil 2). Genelde disketteki kayıtların sırası ile aynı olacak şekilde yazar adlarını içeren ayrı bir dosya tutulur. Bu dosya RAM'de yani ana bellekte olduğu için arama çok daha hızlı bir şekilde yapılır. Dahası ekrana veya yazıcıya son bulunan kayıt bilgileri aktarılırken, arama sürebilir. Bu yöntemde tek gecikme ilk istenilen kayda erişilirken geçen süredir. İlk kayıt bulunduktan sonra arama anında olur gibi görünür. Sayıca çok fazla kaydınız var ise ve bu kayıtlara baştan sona kadar erişim yapmadan ulaşmak istiyorsanız, dizin dosyaları sisteminiz için zorunlu bir gereksinimdir. Bu çözüm bir başka sorunu beraberinde getirir. Dizin dosyasının (ya da dosyalarının) da diskette saklanması gerekmektedir. Dosya ne kadar uzun ise, her bilgi girişinde dizini yüklemek de o kadar uzun sürecektir ve ana bellekte de o kadar yer harcanacaktır. Bu nedenle dizin dosyaları mümkün olduğu kadar kısa tutulmalı ve saklanması mümkün olduğu kadar kolay olmalıdır. Bu da dizin sözcüklerinin (dizin dosyasına girişler) kısa fakat bilgi yönünden yüklü olmalarını gerektirir. Soyadlarının genelde ilk sekiz harfe göre dizine alınması düşünülebilir. Bu istenilen kayıt yerine başka bir kayda erişime neden olabilir. Örneğin YORGANCI'yı ararken YORGANCIOĞLU'na erişilebilir. Program içinde gerekli denetim yapıldığı sürece bu önemli değildir. Çünkü dizin içindeki soyadı anahtarlarını sekiz harften dokuz harfe çıkarmak yanlış kayda erişimi önler gibi gözükse de bin kayıtlık bir dizine bin byte (1K) daha ekleyeceği için iyi bir seçenek değildir. Sorunların çözümünde muhakkak bazı şeylerden fedakârlık etmeniz gerekecektir.
İki Tür Arama
Diskete alınması gereken bir başka husus temel olarak iki ayrı tür arama yönteminin bulunduğudur. Birinci yöntem eşlemeli aramadır, yazar adı örneğinde gördüğümüz gibi, bu bir özdeşlik eşlemesidir. İkinci yöntem ise konu eşlemesidir. Belirli bir konudaki kitapların aranmasını buna örnek olarak verebiliriz. Bu aramada, konular kaydın “içeriğinde” vardır. Fakat kitap sizin aramadığınız ve sizin için önemli olmayan konuları da içerebilir. Burada yapılan eşleme özdeşlik eşlemesi değil, içeriksel işlemedir. Bunu gerçekleştirmeniz, konu bilgilerini nasıl kodladığınıza bağlıdır. Genel ŞEKİL 3'de gösterilen bitmap türü bir kod kullanılır. PROGRAM, BASIC ve MAKİNE KODUNDA “Özdeş arama”nın nasıl yapıldığını gösteren bir örnektir. PROGRAM 2 aynı işlemi “içerik arama” yöntemi için yapar. Kullanmanız gereken birkaç teknik vardır. İlk olarak anahtarların ve dizin sözcüklerinin girişi için tampon bellek alanları (buffer) kullanılabilir. Dizin sözcüğünün oluşturulması (örneğin yazar soyadından) için kullanılan yordam, karşılaştırılacak dizin sözcüğünü bu tampon alana yerleştirmekte de kullanılabilir. Bilgi erişim sorunlarınızın ışığı altında bilgiyi nasıl kodlayacağınızı dikkatli bir şekilde belirleyin. Bu aşamada harcanan birkaç saatlik fazla çalışma sonuçta çok büyük farklar yaratabilir. Özdeş aramada anahtarınız karşılaştırıldığı dizin sözcüğü kadar uzun değil ise, geri kalan yerleri “null” karakterleri ile doldurun. Arama yordamında (örnek programda gösterildiği şekilde) karakteri ile karşılaşıldığı anda geri dönülecektir. Bu şekilde 'YILMAZ' girip tüm YILMAZ'ları veya sadece 'Y' girip soyadı Y ile başlayan tüm yazarları bulabilirsiniz. Eğer kayıtlara bu iki arama yönteminin ikisini de kullanarak erişmek istiyorsanız, yöntemleri sıra ile uygulayarak bunu yapabilirsiniz. Örneğin, önce özdeş arama yapın. İstenilen bir kayda eriştiğinizde ikinci arama türü olan içerik aramayı uygulayın. Eğer kayıt iki testi de başarı ile geçerse bu, tam istediğiniz bilgi olur. Bu ikili kullanım sizin zamanla ve önemsiz bilgiler için anahtar belirlemenizi sağlar.
Kayıt Biçimini Belirleme
Şimdi sıra, kayıtlarınızın nasıl düzenleneceğini saptamaya geldi. Bu konu ayrıntılı olarak “Veri Düzenleri” yazımızda incelendiğinden, burada yalnızca önemli bir iki ayrıntıya değineceğiz. Eğer rölatif kayıtlar kullanıyor iseniz, kullanılacak kayıt türünü belirlemede karşılaşılan aynı düzenleme sorunu ile karşı karşıya gelirsiniz. Kayıt belirli “alan”lara bölünür. Her kayıttaki alanların boyları aynıdır. Bir alan yazar adı, bir diğeri yayın yılı (dört byte ile dört basamaklı bir yılı kodlayabilirsiniz veya yıldan 1792 çıkartarak tek bir byte ile 1792'den 2047'ye kadar olan tüm yılları kodlayabilirsiniz). Her alan, ilgili veri ögesi için saklamayı düşündüğünüz en büyük veri dizgisini içine alacak kadar büyük olmalıdır. Kayıt biçimini belirlemek için istediğiniz kadar zaman harcayın. Disketten bir kaydı sadece görüntülemek için okuyacağınızdan, bilgiyi küçük alanlara bölmek yerine birkaç uzun karakter zinciri (string) halinde saklamak iyi bir karar olabilir. Yazar adı ve yıl bir zinciri halinde saklanabilir. Daha sonra disketten okuma ve bilgiyi görüntülemeyi programlamak kolaydır. Sayısal bilgiler ondalık kesirli ya da tam sayı olabilir.
KAYIT “X” KÖKSAL,A BİLGİSAYARLAR 41978 (yazar) (başlık) (yıl) DİZİN DOSYALARI Yazarlar: Konular - (X-1)| KARAKAŞ (x-1)| 041011400 (x)| KÖKSAL 1000000 (x41)| TÖRECİ.E (Xx41)| 01101110 ŞEKİL 2: Dizin dosyaları hızlı arama için kayıtların bir bölümünü içerirler.