Harun Reşit Zafer

bâki kalan bu kubbede bir hoş sadâ imiş

Veritabanı Tasarımı ve SQL 01: Veritabanına Genel Bakış

resized_databaseBu 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:

vt-01

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ı ?

resized_pic_database_2-121x150Sorunun 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.

databasesİş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

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInPrint this pageEmail this to someone

16 Yorum

  1. Barış SAKA

    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

  2. bol bol görsel anlatım bekliyoruz :) bitanesin..

  3. Hocam elinize sağlık, sitenizde çok yararlı makaleleriniz var. Hayır dualarım sizin ile inşAllah.

  4. yararlı çizimleri artırman anlaşılmasını kolaylaştırır

  5. 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.

  6. 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.

  7. Hocam herşey için teşekkürler konuyu anlatımınız da ayrıca çok güzel

  8. Teşekkürler…

  9. yusuf akdeniz

    21 Haziran 2013 at 00:33

    Hocam çok teşekkürler bilgi paylaşımın ve bu güzel anlatımların için…

  10. Çok sağolun hocam Allah razı olsun .

  11. Gerçekten çok başarılı bir anlatım olmuş. Teşekkürler.

  12. hocam çok güzel anlatmışsınız.

  13. وَكانَ مِنْ دُعائِهِ عَلَيْهِ السَّلامُ فِي الاِْسْتِخارَةِ

    أَللّهُمَّ إِنّي أَسْتَخيرُكَ بِعِلْمِكَ، فَصَلِّ عَلى مُحَمَّد وَآلِهِ وَاقْضِ لي بِالْخِيَرَةِ، وَأَلْهِمْنا مَعْرِفَةَ الاِْخْتِيارِ، وَاجْعَلْ ذلِكَ ذَريعةً إِلَى الرِّضا بِما قَضَيْتَ لَنا، وَالتَّسْليمِ لِما حَكَمْتَ، فَأَزِحْ عَنّا رَيْبَ الاِْرْتِيابِ، وَأَيِّدْنا بِيَقينِ الْمُخْلِصينَ، وَلا تَسُمْنا عَجْزَ الْمَعْرِفَةِ عَمّا تَخَيَّرْتَ، فَنَغْمِطَ قَدْرَكَ، وَنَكْرَهَ مَوْضِعَ رِضاكَ، وَنَجْنَحَ إِلَى الَّتي هِىَ أَبْعَدُ مِنْ حُسْنِ الْعاقِبَةِ، وَأَقْرَبُ إِلى ضِدِّ الْعافِيَةِ. حَبِّبْ إِلَيْنا مانَكْرَهُ مِنْ قَضائِكَ، وَسَهِّلْ عَلَيْنا ما نَسْتَصْعِبُ مِنْ حُكْمِكَ، وَأَلْهِمْنَا الاِْنْقِيادَ لِما أَوْرَدْتَ عَلَيْنا مِنْ مَشِيَّتِكَ، حَتّى لا نُحِبَّ تَأْخيرَ ما عَجَّلْتَ، وَلا تَعْجيلَ ما أخَّرْتَ، وَلا نَكْرَهَ ما أَحْبَبْتَ، وَ لا نَتَخَيَّرَ ما كَرِهْتَ. وَاخْتِمْ لَنا بِالَّتي هِىَ أَحْمَدُ عاقِبَةً، وَأَكْرَمُ مَصيراً، إِنَّكَ تُفيدُ الْكَريمَةَ، وَتُعْطِي الْجَسيمَةَ، وَتَفْعَلُ ما تُريدُ، وَأَنْتَ عَلى كُلِّ شَىْء قَديرٌ.

  14. şakir karataş

    22 Mart 2015 at 02:50

    ellerinize sağlık . Allah razı olsun

  15. 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.

  16. Anıl Yılmaz

    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.

Bir Cevap Yazın

E-posta adresiniz yayınlanmayacak

*

© 2016 Harun Reşit Zafer

Temayı tasarlayanAnders NorenYukarı ↑