Bu makale dizisi boyunca bir programcının (veya adayının) veritabanı ile ilgili temel seviyede bilmesi gereken konuları birer birer anlatmaya çalışacağım.
Bu makalelerin bütün iddiası yeni başlayanlara konu ile ilgili saf Türkçe bilgi sunmak, internetteki Türkçe kaynak eksikliğini azıcık da olsa gidermek ve biraz da hayır duası almak 🙂 o kadar.
Bu Veritabanı Dedikleri Ne Ola Ki?
Aslında adından da anlaşılacağı gibi veritabanı verilerin belli bir düzen içerisinde tutulduğu yazılımdır diyebiliriz. Aranızda taban nereden geliyor diye merak edenleriniz olabilir, anlatayım:
Tutulan veriler… hatta durun çizeyim:
Gördüğünüz gibi verilerin tutulduğu katman en altta yani tabanda bulunuyor. Ve bu verilere erişim ancak VTYS (DBMS: Database Management System) aracılığı ile oluyor. Eğer veritabanından veri almak veya veri eklemek istiyorsanız önce uygun şekilde VTYS’ye müracaat etmeniz gerekiyor. Bu müracaat VTYS’nin anladığı dilden olmalı. Yani sorgu dili ile tam olarak ne istediğimizi ifade edebilmeliyiz ki doğru veriyi elde edebilelim.
Her veritabanı sisteminin kullandığı bir sorgu dili olmakla beraber genelde yaygın olarak kullanılan SQL (structured query language: yapısal sorgu dili) dir. SQL’in farklı versiyonları bulunmakla beraber saf SQL’i doğru şekilde anlamak önemli ve yeterlidir.
Neden Veritabanı ?
Sorunun cevabı aslında oldukça basit: Tutulması gereken çok büyük miktarlarda veri olması. Şimdi binlerce çalışanı olan bir firmayı hayal edin. Her bir çalışana ait kişisel bilgilerinden tutun da, maaşlarına, geliş-gidiş saatlerinden tutun da izin yaptıkları güne kadar aklınıza gelebilecek her türlü bilgiyi tutmanız gerekiyor. Bir de bu bilgilerin devamlı olarak değiştiğini, güncellendiğini ya da okunduğunu düşünün. Bütün bu değiştirme, ekleyip-çıkarma işlerini kağıt kalemle yapmak, dosyalamak vs. ne kadar zahmetli ve yavaş olurdu.
Şimdi bu bilgileri bilgisayara aktardığımızı düşünelim. Evet, görüldüğü gibi yerden tasarruf ettik. Tüm bu bilgileri tek bir bilgisayara sığdırmak mümkün oldu. Peki az çok bilgisayardan anladağınızı bildiğimden soruyorum: Siz bu bilgileri bilgisayarda nasıl tutardınız?
Aklımıza ilk gelen bütün bu bilgileri metin dosyalarında tutmak olurdu her halde. Tabi dosyaları da belli gruplar halinde uygun klasörlere atardınız herhalde. Sonuçta elinizde onlarca iç içe, alt alta klasör ve yüzlerce dosyadan oluşan bir yapı olurdu. Bu yapı belki kağıt kaleme göre daha avantajlı ama hala pek çok sorunu var.
Öncelikle bu yapı hala yavaş. Hala bir veriye ulaşmak istediğinizde klasörler ve dosyalar arasında gezinmeniz gerekiyor. Gerekli dosyayı bulup veriyi okumanız, ya da değiştirmeniz sonra dosyayı kaydedip kapatmanız vs. bir sürü iş.
İkincisi bu yapı güvenli değil. Bu dosyalar ve klasörler her an zarar görebilir. Ufak bir yanlışlıkta veya güç kesintisi gibi bir aksaklıkta verileriniz uçup gidebilir.
Üçüncüsü bu yapı ile veriler üzerinde yalnızca bir kişi işlem yapabilir. O da verilerin bulunduğu bilgisayarı kullanan kişi. Halbuki biz aynı anda birden fazla kişinin bu bilgileri kullanabilmesini istiyoruz. Örneğin bir sekreter A çalışanının kayıtlarını girerken, muhasebeci B çalışanının maaş bilgisini güncelleyebilmeli, aynı anda patron ise işletmeye ait genel bilgileri örneğin: bu ay kaş kişi toplam kaç gün izin almış, gözden geçirebilmelidir.
Bütün bunlar olurken sekreter sadece kendini ilgilendiren bilgilere erişebilmeli, bazılarını yalnızca okuma bazılarını da değiştirebilme hakkına sahip olmalı. Aynı şekilde muhasebeci yalnızca görmesi gereken bilgileri görebilmelidir. (Bu paragraf da yine veri güvenliğine girer)
Patronun bir tıklamada şirketin geneli ile ilgili istatistik bilgilerine ulaşabilmesinden bahsettim yukarıda. İstediği zaman ortalama maaş miktarını, isteği zaman toplam erkek işçi sayısını, istediği zaman bir önceki güne ait tüm bilgileri bir tıklama ile görebilmeli.
Şimdi bütün bunların dosyalar ile olamayacağını ortalama seviyede Ms. Word, Excel gibi programları kullanmış olanlar bile rahatlıkla anlamışlardır.
Şimdi bir de bir okulu düşünün. Sekreter, muhasebeci, patron (ya da müdür) yetmiyormuş gibi her öğretmen, öğrenci ya da velinin de kendilerine ait bilgilere ulaşabilmesini istiyoruz. Üstelik bunları yaparken bizi meşgul etmemeli, okula gelmek zorunda kalmamalı, istedikleri yerden istedikleri bilgisayar ile işlemlerini gerçekleştirebilmeliler. Bütün bunlar olurken bizim de hiç bir veriye zarar gelmeyeceğinden, herkesin yalnızca yetkisi kadar bu bilgilerden faydalandığından emin olmamız gerekiyor.
İşte yukarıda anlatılanların tümünü sağlayan yapıya veritabanı diyoruz. Şimdi milyonlarca üyesi olan web sitelerini, onbinlerce farklı kalemde ürünü olan firmaları, binlerce eğitmeni, yüzbinlerce öğrencisi olan üniversiteleri düşünün. Ya da burada hrzafer.com’da kullandığım WordPress sistemini ele alalım. İnternet olan her yerde siteme bağlanıp yeni yazılar ekleyebiliyor, ayarları değiştirebiliyor hatta gelen yorumları görebiliyorum vs. Artık hayat size daha anlamlı gelmese de yukarıdaki şekil daha anlamlı geliyor olmalı.
Veritabanının avantajlarını kısaca özetleyerek bu makaleyi bitirelim:
- Veri Bağımsızlığı: Bir veritabanında verilerin ne şekilde tutulduğunu bilemeyiz. Birçok detay bizden gizlenir ki programcılıkta doğru olan yaklaşım da budur. Bizler veriler tablolar halinde tutuluyormuş gibi (soyutlama) düşünür ve tasarımlarımızı ona göre yaparız. Böylelikle herhangi bir VTYS (Access, MySQL, MS SQL, Oracle vs.) ile aynı veritabanı bilgisi ve mantığı ile sorunsuzca çalışabiliriz.
- Veri Yönetimi: Verilerin tek bir yerde tutulmasının getirdiği bir diğer kolaylık da yönetimle ilgilidir. Veritabanını yöneten uzmanlar zaman içinde veritabanı ile ilgili edindikleri tecrübeler doğrultusunda bir takım ince ayarlar, iyileştirmeler yaparak veritabanının performansını gözle görülür biçimde artırabilirler.
- Etkili Veri Erişimi: Bir VTYS veri çekmek ve depolamak işini en hızlı ve verimli şekilde sağlayacak özellik ve teknikleri haizdir. Örneğin bir milyon kullanıcının kayıtlı olduğu ve her birinin 10 haneli bir sicil numarası (sicil no kritik bir bilgi olduğundan en az 10 hane olmalı) olduğunu düşünün. 10 hane ile “10 trilyon – 1” adet farklı sicil no oluşturulabilir. Veritabanı her kullanıcı için 10 trilyon olasılık değerlendirmez. Kendi içinde kullandığı özel algoritmalar sayesinde bunu çok daha çabuk yapar. (Bu örneği anlamamış olabilirsiniz ama gerek de yok, zira veritabanı bu işi bizim için hallediyor.)
- Veri Tutarlılığı ve Güvenliği: Yukarıdaki şemada da gördüğünüz gibi veriye yalnızca VTYS aracılığıyla erişim sayesinde VTYS, veritabanındaki verilerin tutarlılığını (bütünlüğünü-integrity) denetleyebilir. Örneğin bir çalışan için maaş bilgisi girilirken VTYS şirket bütçesinin aşılıp aşılmadığını kontrol edebilir ve gerekiyorsa bu işleme izin vermeyebilir. Veya farklı yetkilere sahip kullanıcılar söz konusu olduğunda hangi sınıf kullanıcıların hangi verilere erişebileceğine karar verebilir.
- Eşzamanlı erişim: Bir VTYS farklı kullanıcıların aynı anda veriye erişimini kendisi düzenler ve çakışma olmasını engeller. Böylelikle kullanıcı o anda veriye yalnızca kendisi erişiyormuş gibi düşünebilir.
- Uygulama Geliştirmenin Kolaylaşması: VTYS veriler ile ilgili birçok işi kendisi hallettiğinden programcılar işin bu kısmının ne kodlaması ile ne de test edilmesi ile uğraşmak durumunda kalırlar. Her VTYS -ileride göreceğimiz gibi- programcıların işini oldukça kolaylaştıran bir dizi fonksiyonları da içerir.
- vb.
Buraya eklenebilecek maddeler olduğu gibi aslında her bir maddenin de alt maddeleri var. Her birinin üzerine bir kitap yazılabilir ancak buraya kadar anlatılanlarla genel bir fikir edinmiş olduk ki bu makalenin amacı da buydu.
Herkese kolay gelsin
11 Mart 2011 at 06:46
gerçekten çok güzel bir site olmuş, özellikle SQL ve Java ile uygulamalara bakıyorum ve emeğinize sağlık diyorum
20 Mayıs 2011 at 13:17
bol bol görsel anlatım bekliyoruz 🙂 bitanesin..
16 Mayıs 2012 at 17:30
Hocam elinize sağlık, sitenizde çok yararlı makaleleriniz var. Hayır dualarım sizin ile inşAllah.
02 Haziran 2012 at 11:46
yararlı çizimleri artırman anlaşılmasını kolaylaştırır
21 Haziran 2012 at 01:29
Stajyer olarak bir şirkette çalışıyorum. SQL üzerinde ilerlemem söylendi ve bende internette türkçe kaynak araştırırken sizin sitenize rastladım. makalelerinizin tamamını okudum ve çok beğendim, her şey anlaşılır ve net. çalışmalarınızın devamını bekliyoruz. iyi çalışmalar.
02 Ocak 2013 at 09:03
Merhaba hocam, bu mesajı size minnetarlıklarımı sunmak için yazıyorum. Gerçekten dersleriniz anlaşılır, sade ve mükemmel. Sizin gibi insanlar -bilgilerini paylaşmaya meraklı insanlar- sayesinde dünyamız gelişip ilerliyor. Tekrardan şahane dersleriniz için çok teşekkür ederim.
07 Ocak 2013 at 08:26
Hocam herşey için teşekkürler konuyu anlatımınız da ayrıca çok güzel
15 Mayıs 2013 at 16:31
Teşekkürler…
21 Haziran 2013 at 00:33
Hocam çok teşekkürler bilgi paylaşımın ve bu güzel anlatımların için…
16 Temmuz 2013 at 01:32
Çok sağolun hocam Allah razı olsun .
03 Eylül 2013 at 06:40
Gerçekten çok başarılı bir anlatım olmuş. Teşekkürler.
11 Şubat 2014 at 07:28
hocam çok güzel anlatmışsınız.
19 Eylül 2014 at 02:31
وَكانَ مِنْ دُعائِهِ عَلَيْهِ السَّلامُ فِي الاِْسْتِخارَةِ
أَللّهُمَّ إِنّي أَسْتَخيرُكَ بِعِلْمِكَ، فَصَلِّ عَلى مُحَمَّد وَآلِهِ وَاقْضِ لي بِالْخِيَرَةِ، وَأَلْهِمْنا مَعْرِفَةَ الاِْخْتِيارِ، وَاجْعَلْ ذلِكَ ذَريعةً إِلَى الرِّضا بِما قَضَيْتَ لَنا، وَالتَّسْليمِ لِما حَكَمْتَ، فَأَزِحْ عَنّا رَيْبَ الاِْرْتِيابِ، وَأَيِّدْنا بِيَقينِ الْمُخْلِصينَ، وَلا تَسُمْنا عَجْزَ الْمَعْرِفَةِ عَمّا تَخَيَّرْتَ، فَنَغْمِطَ قَدْرَكَ، وَنَكْرَهَ مَوْضِعَ رِضاكَ، وَنَجْنَحَ إِلَى الَّتي هِىَ أَبْعَدُ مِنْ حُسْنِ الْعاقِبَةِ، وَأَقْرَبُ إِلى ضِدِّ الْعافِيَةِ. حَبِّبْ إِلَيْنا مانَكْرَهُ مِنْ قَضائِكَ، وَسَهِّلْ عَلَيْنا ما نَسْتَصْعِبُ مِنْ حُكْمِكَ، وَأَلْهِمْنَا الاِْنْقِيادَ لِما أَوْرَدْتَ عَلَيْنا مِنْ مَشِيَّتِكَ، حَتّى لا نُحِبَّ تَأْخيرَ ما عَجَّلْتَ، وَلا تَعْجيلَ ما أخَّرْتَ، وَلا نَكْرَهَ ما أَحْبَبْتَ، وَ لا نَتَخَيَّرَ ما كَرِهْتَ. وَاخْتِمْ لَنا بِالَّتي هِىَ أَحْمَدُ عاقِبَةً، وَأَكْرَمُ مَصيراً، إِنَّكَ تُفيدُ الْكَريمَةَ، وَتُعْطِي الْجَسيمَةَ، وَتَفْعَلُ ما تُريدُ، وَأَنْتَ عَلى كُلِّ شَىْء قَديرٌ.
22 Mart 2015 at 02:50
ellerinize sağlık . Allah razı olsun
28 Ağustos 2015 at 16:35
Gerçekten çok iyi anlatım olmuş tüm SQL derslerinde. Tamamını okuyup son derece kritik bilgiler öğrendim diyebilirim. Emeğinize sağlık teşekkür ederim.
10 Eylül 2015 at 11:05
Emeğinize sağlık gerçekten çok güzel bir anlatım genel olarak bilgi sahibi oldum.
iyi çalışmalar.
01 Ekim 2016 at 12:42
gerçekten süper bi makale olmuş 🙂
08 Aralık 2017 at 00:51
Gerçekten çok iyi bir anlatım. Okuduğum en iyi makale diyebilirim. Tebrik ederim ve teşekkür ederim.
06 Eylül 2018 at 02:02
teşekkürler gayet güzel akıcı ve anlaşılabilir anlatım olmuş .