22 Ağustos 2019 Perşembe

Veri Tabanı Obje Tanımları


Bir veri tabanına bağlandığınızda ona bir takım komutlar göndererek, oradan bilgi çekebilir, verileri işleyebilir, verileri işlemek için gerekli ortamı yaratabilirsiniz. Veri tabanı komutları iki sınıfta değerlendirilir. 

DDL : Data Definition Language. Data tanımlama dili.
DML : Data Manuplation Language. Data işleme komutları
DDL veri tabanında bilgileri saklamak için kullanılan ortamların yaratılması için gerekli komutlardır. Bunlar tablo, index, trigger, procedure ve diğer veri tabanı objelerini kontrol etmek için gerekli komutlardır. 


Temel olarak oracle veri tabanını ele alırsak bilgiler veri tabanında şu şekilde tutulur.

Instance : Eğer unix ortamını ele alacak olursanız bu Oracle dizini altında bulunan database dizini altındaki dizin adıdır. Bu şekilde data dosyaları biri birine karışmadan yerleşir. NT ortamında ise tüm data dosyaları ORANT\DATABASE dizini altında bulunur. Ancak ayırdetmek için farklı kontrol dosyaları kullanıldığından dosyalar her ne kadar da bir arada bulunsalarda karışmazlar. INSTANCE yaratmak oracle içerisinde oldukça zahmetli bir iştir. Bu sebeble instance yerine farklı bir kullanıcı açarak bunun diğer tablolar üzerine olan erişimi kısıtlanır. Bu şekilde bir instance içerisinde birden fazla kullanıcı bir arada bulunur. Instance tanımını access veri tabanındaki bir MDB dosyasıyla özdeşleştirebilirsiniz. Her bir instance bir mdb dosyasına tekabül eder.

Tablespace : Instance içerisinde data dosyalarını gruplandırmak için kullanılır. Sistemde USER_DATA, SYSTEM gibi halihazırda 4 tane tablespace bulunmaktadır. Tablespace içerisinde yer alan dosyalarda veriler dağılmış durumdadır. Bir tablespace içerisinde birden fazla dosya olabileceği gibi tek bir dosya da bulunabilir. Bu tür bir yapılanmanın faydası farklı bilgilerin farklı tablespace'lere dağıtılarak tek bir dosya üzerinde değil birden fazla dosyada olacaktır. Böylece disk yönetim sistemi bunları daha kolay yönetebilmektedir. Böylece performans artmaktadır. Kullanıcı isterse kendi tablespace'lerini oluşturabilir.

Data Dosyaları : Bu dosyalar bir tablespace'in altında oluşturulur. Bu dosyalar verileri saklarlar. Bu dosyalar table ve index gibi yer kaplayan bilgileri saklarlar. Table ve index yapıları instance'ın control dosyası içerisinde belirlenir. Bir veya birden fazla kontrol dosyası instance içerisinde yer alabilir. Bir data dosyası dolduğunda oracle tarafından ya büyütülür. Veya kullanıcıya uyarı verilerek yeni dosya oluşturması istenebilir. Bu dosyalar içerisinde trigger, procedure, sequence ve view gibi diğer veritabanı objeleride esasında bu dosyalarda saklanmasına rağmen bunlar yine sistem tabloları içerisinde tutulur. Örneğin bir stored procedure'ün kodu sys.user_sources isimli bir view'dan alınabilir. Veya sys.user_views isimli view'dan da tüm view tanımları okunabilir. Bu view'lar ise system tabloları üzerinden okunarak getirilir. Bu system tabloları ise system tablespace'i içerisinde bulunur. 


Table : Bir table bildiğimiz manada verilerin kolonlar halinde saklandığı ve kayıtlar halinde bilgiyi saklayan bir veritabanı tanımıdır. Esas olarak basic'te kullandığımız Random dosya formatı gibi olmasına rağmen farklı olarak veri tabanındaki kayıtlar özel bir şekilde linked listler şeklinde tutulur. Yani bir tablo birden fazla data dosyası içerisinde olabilir ve bir data dosyasında birden fazla table tutulur. Bunun yapılması ise çok kompleks bir algoritma gerektirir. Bu ise veritabanı yazılımlarının kullanılma gerekçelerinden biridir. Bir tablo kolonlardan oluşur. Kolonların herbiri farklı bir obje gibi değerlendirilir. Her kolon için constrain, lookup, unique, default value gibi özellikleri vardır. Bir tablo istenirse farklı bir tablespace'de yaratılabilir. Bu daha fazla performans elde etmek için tercih edilebilir. 

Index :Indeksler tablolar üzerinde bir kayda kolay erişmek için kullanılır. Bu şekilde büyük bir tabloda yer alan kayıtlara ulaşmak için dakikalarca değil sadece milisaniyeler mertebesinde beklersiniz. İndeksler tabloların kolonları üzerine konur. O kolondaki bilgiler sıralanarak saklanır. Daha sonra kayda erişmek için index üzerinde aranan bilginin nerede olduğunun tespiti için basit bir iki disk okumasıyla kaydın yeri bulunur ve olay neredeyse milisaniyeler mikrosaniyeler mertebesinde biter. Indeksler aynı zamanda sıralama, arama ve bir kolondaki bilginin tek olması için gerekli kontrolleri yapmak amacıyla oluşturulur. Bir kolondaki bilginin tek olması (unique) şu şekilde örneklenebilir. Bir üniversitede okuyan öğrencilere verilen öğrenci numarasının tek olması gereklidir. Eğer aynı numara birden fazla verilmişse o zaman sistemin bunu kabul etmemesi gerekir. Bunu kontrol etmek için sistemde o kolon indexlenir. Ve kayıt girilmeden evvel bu index üzerinde arama yapılır. Eğer kayıt bulunursa kayıt kabul edilmez. Bu programmatik olarak çözümdür. Birde bu işin veri tabanın kısmına bakılacak olursa unique index oluşturulur. Kayıtta yer alan öğrenci numarası bilgisi unique index'e eklenmeye kalkıldığında orada eğer başka bir kayıt varsa sistem bunu kabul etmez. Bu nispeten daha hızlı bir metoddur. Böylece işlem süresi hemen hemen yarıya iner. Indeksler aynı zamanda iki tablo arasındaki bağlantıyı kurmak amacıylada kullanılır. Eğer bir kayıt diğer bir tablodaki başka bir kolonda geçiyormu şeklinde bir kontrol yapılıyor. Bu tür indekslere foreign key deniyor. 

Trigger : Tetik manasında. Ancak bu veri tabanlarında gerçekten önem arzediyorlar. Örneğin dağıtık veri tabanlarında yeni gelen kaydın diğer veri tabanlarına yansıtabilmesi için veri tabanına uygulanan her DML komutu trigger'lar aracılığıyla diğer veri tabanlarına yansıtılır. Böylece tüm veri tabanları senkronize halde çalışırlar. Örnek olarak bir tabloya yeni girilen kayda bir sıra numarası verme işi triggerlar aracılığıyla yapılabilir. Veya silinen bir kaydın varlığının gerekli olup olmadığı veri tabanında kontrol edilmek istenirse trigger kullanılabilir. Veya yeni girilmek istenen bir kayıtla beraber başka işler yapılmak istenirse bu objeler kullanılabilir.

View : Veri tabanlarında saklanan verilerle bazen uygun verileri alamazsınız. Örneğin bir Boolean tipindeki değişkenin karşılığında bu alanın değeri yerine "Evet"/"Hayır" veya "Var" / "Yok" şeklinde bilgi almak istiyorsanız veya bir tabloyu birden fazla tabloya join yapılıyor ve bunun üzerinde sorgular düzenlenmek isteniyorsa bu tür bir yapıyı kompleks bir şekle sokmaktansa bir view haline getirilir. Daha sonra bu view sanki bir tablo imiş gibi üzerinde sorgu yapılabilir. Ayrıca view'lar üzerinde indeks oluşturularak daha hızlı sorgulama yaptırılabilir.

Sequence : Bu obje sıralı olarak rakam elde etmek için kullanılır. Mesala Counter tipi alan oluşturmak için kullanılabilir. Bir trigger aracılığıyla her yeni girilen kayda sequence'den sırayla rakam verilebilir. Böylece sıralı olarak kayıt numarası elde edilmiş olur.
Veri tabanı terimleri elbetteki bu kadar değil ancak en basit olanları seçilerek burada listelenmiştir.

Burada Oracle taban alınarak terimler anlatılmıştır. Bunun dışında informix ortamı için Tablespace, Datafile ve Instance tanımı yoktur. Bunun yerine database tanımı kullanılır. Bir informix server birden fazla veri tabanını tutabilir. Bir veri tabanına bağlanmak için oracle'da server adı, servis numarası, Instance adı, kullanıcı kodu ve şifresi gerekir. Informix içinde Server adı, servis numarası, Database adı, kullanıcı kodu ve şifresi kullanılır. Burada farkettiğiniz gibi tek farkeden instance yerine database gelmesidir. Bunun dışında Informix bir dizin altında bir çok dosyadan oluşan bir bölüm açar. Herşey buradadır. Informix'te kullanıcı tanımları bizzat NT veya Unix sisteminden alınır. Hangi kullanıcının hangi tabloya yetkili olduğu yine informix tarafından NT veya Unix'teki tanım kullanılarak ayarlanır. Informix'in Localserver yazılımı tek bir dosya açar ve herşey bu dosya içerisinde tanımlıdır. 

Hiç yorum yok:

Yorum Gönderme