Bu yazı dizisinde uzun zamandır üzerinde çalıştığım SQL başvuru kaynağını sizlerle paylaşacağım, tamamen SQL üzerine kurulu olan yazı dizisini parça parça düzenleyerek sunacağım, ilk bölümde Veri, Veritabanı, Normalizasyon gibi konulara değinerek hazırlık yapacak ardından da SQL üzerine diğer yazıları yayınlayacağım.Veri
Veri (Data) herhangi bir konudaki en temel işlenmemiş bilgi topluğudur, örneğin bir bireyin sicil kartı bilgileri içerisinde bireyin Adı bir veridir bunun gibi Soyadı,Kimlik Numarası, Öğrenci numarası, Hesap numarası gibi daha yüzlerce örneğini verebileceğim bilgi türüne veri (data) adı verilir Veriler genellikle kendi başlarına işe yaramazlar örneğin bir veri bankasından alınan tek bir Veri bize pek bir bilgi sağlamazken bu veriye bağlı diğer verilerle birlikte oldukça geniş bir içerik sağlayabilir, Bir öğrencinin Öğrenci numarasından o öğrenciye ait Ad,Soyad,Yaş,Adres ve Ders notlarına ulaşılabilir, bu nedenle her ne kadar Veri tabanının vazgeçilmez öğesi olsa da verinin derlenip harmanlanmamış hali bizlere pek bir şey ifade etmez.Veri doğru yerde ve doğru zamanda bir çok sorunu çözmekte eşsiz bir araçken yanlış kişilerin ellerinde korkunç bir silaha dönüşebilen oldukça değerli bir öğedir bu nedenle kuruluşlar veri güvenliği konusunda küçümsenemeyecek yatırım yapmak zorundalar kimi zaman veri girişinin malihyeti bu verinin güvenliğini sağlamak için ayrılan bütçeden daha az olabilmektedir.Veri tabanı
Veri tabanı bilgilerin belli bir düzende depolanmış halidir, bilgisayar ortamında herhangi bir medya üzerinde sistematik bir şekilde depolanan bu veriler birbirleriyle tanımlı ilişkiler barındırırlar ve veriye en hızlı şekilde ulaşabilmek için belli bir kayıt standartları ile oluşturulurlar. Bir veri tabanı için güvenilirlik ve yapısal bütünlülük oldukça önemli iki kavramdır veri tabanına kaydedilen tek bir kayıt ile yüzbinlerce kayıt içerisinde bir veriye ulaşmak arasında erişim süresi mutlaka olacaktır ancak bu süre kabul edilebilir ölçüde olmalıdır ayrıcan veriler kaydedildiği türde tutulmalı ve yine erişilirken aynı tip veri türü şeklinde ulaşılabilmelidir işte veri tabanları bu aşamada gösterdikleri başarıya göre tercih edilirler.Bir veri tabanının barındırdığı veri miktarı sizin veriyi depoladığınız medyanın boyutu ile sınırlı olmalıdır (Bazı veri tabanları bu konuda bazı sınırlamalar getirebilir) sonuçta belirli bir sınırı olan veri kümesi bir noktadan sonra işe yaramaz hale gelecektir ve bu noktadan sonra geriye dönüş olamayacağından karşılacılacak acı sonuç korkunç bir kayba yol açacaktır. Bir çok veri tabanı uygulaması yanlış tasarlanmış veri tabanı yapısı nedeniyle uzun zaman sonra başarısız olurlar bu konuda kullanılan teknolojik donanımsal alt yapı ne denli güçlü olursa olsun yapılan tasarlama hatası kusursuz bir donanıma rağmen başarısızlıkla sonuçlanabilir.Veri tabanlarının kullanıldığı alanlar
Veri tabanları bugün neredeyse hemen her uygulamada kullanılmaya başlanmıştır basit bir Kişisel adres defteri uygulamasından karmaşık ERP uygulamasına kadar bir çok alanda vazgeçilmez hale gelmiştir örneğin hemen her bilgisayar kullanıcısının e-posta’larını kaydettiği, gönderdiği ve aldığı bir uygulamada dahi kendine özgü bir bir veri tabanı bulunmaktadır yine şirketlerin kullandığı muhasebe, stok yonetimi, satış yönetimi vb uygulamalar da bir veritabanına ihtiyaç duyarlar son zamanlarda yaygınlaşan e-ticaret sistemlerinin bel kemiği de veri tabanlarıdır veri tabanları bu kadar yaygınlaşmadan önce internette barındırılan hemen her internet sitesi statik web sayfalarından ibaretti ve bu sayfalardaki bilgilerin değiştirilmesi için sayfayı yeniden tasarlayıp bu sitelere yüklemek gerekmekteydi ancak aradan geçen zaman veri tabanı mimarilerinin gelişmesinin ve daha dinamik web sayfalarının doğmasının yolunu açtı bugün internet üzerinde hizmet veren online satış siteleri, bloglar, tartışma forumları ve bunlar gibi milyonlarca web sitesinin arkasında çalışan bir veri tabanı yatmakta, buradan da veri tabanının ne denli önemli bir yapı olduğu sonucu çıkartabiliriz.DBMS (Database Management System)
İngilizce Database Management System kelimelerinin kısaltması olan DBMS veri tabanının tasarlanması, verilere erişimi ve verilerin güvenliğini sağlamak ve bütün bunları belli bir standart dahilinde gerçekleştirmekle yükümlü sistemdir, Tutarlı bir DBMS bütün bu kriterlerin tamamını birinden feragat etmeden yapmakla yükümlüdür ve aynı anda birden fazla erişime cevap verebilmelidirler ayrıca bir DBMS mevcut veririn yedeklenmesi ve olası bir facia durumunda mevcut yedeklerden faydalanarak facia öncesi yapıya tekrar dönebilme konusunda da garanti verebilmelidir, yedekleme veri tabanları için olmazsa olmaz bir kriter denilebilir sonuçta düz mantık işleyen ve gerektiğinde düzeltilemeyen bir yapı kabul edilemez bir eksikliği barındırıyor demektir ve bu kabul edilemez bir eksiktir.DBMS verinin veri tabanında hangi düzenle tutulacağı, nerede depolanacağı ve gerektiğinde nasıl erişilebileceği ile ilgili tüm bilgileri barındırır ve kullanıcının üzerindeki verinin güvenliği ve erişim teknikleri gibi yükü tamamen yüklenip hem zaman hem de kaynak gereksiniminin önüne geçecektir, bir program tasarımcısı programı geliştirmek dışında veriyi depolamak, veriye erişmek, veri topluluğundan veriye erişmek ve bu verileri yedeklemek gibi karmaşık yapıyla uğraşmak yerine bu görevi DBMS’lere yüklerler böylece zaman ve kaynaklarının tamamını veri girişi ve erişilen verileri izlenebilir hale getirmek gibi konulara ayırırlar.RDBMS (Relational Database Management System)
İngilizce Relational Database Management System kelimelerinin kısaltması olan RDBMS verilerin tablolar içerisinde satır ve sütunlar şeklinde tutarlı bir şekilde tutulmasını sağlayan veri depolama sistemidir. RDBMS ilişkisel veri tabanında veriye erişme yöntemlerini kendi bünyesinde barındırırlar ve veri tabanına erişen uygulamaların en kısa yoldan en başarılı sonuçlar elde etmesi için gerekli tüm erişim tekniklerini kendi üzerlerinde barındırırlar, başarılı bir RDBMS tek bir veriden bu veri ile ilişkili sayısız veriye ulaşabilecek şekilde veri tabanı tasarımının geliştirilmesine imkan vermelidir ve uygulama geliştiriciler bu türdeki karmaşık veri tabanı sorgularını geliştirdikleri uygulamar üzerinde yapmak yerine bu görevi RDBMS üzerine atarlar. Bilinen en popüler RDBMS’ler Oracle, MS SQL, My SQL, dBase, Progress vb. dir.Database Environment
Database Environment bir veri tabanının tutulduğu ortam ya da çevre şeklinde açıklanabilir, bir veri tabanının nerede barındırıldığı ve bu veri tabanına nasıl erişileceği bir uygulama kullanıcısı için bir şey ifade etmese de uygulama geliştiriciler için önemlidir geliştirilen uygulama ister tek bir bilgisayarda isterse internet üzerinden erişilen ve milyonlarca kullanıcı tarafından kullanılan bir uygulama olsun veri tabanı her iki şartta da veriyi en doğru ve en güvenilir şekilde sağlamalıdır veri tabanının tutulduğu ortamlar erişim şekilleri farklılık gösterebilir en sık kullanılan yöntemler şunlardır :Mainframe Database
Mainframe yapıda veri tabanı donanımsal olarak oldukça güçlü bir yapıya sahip ve de maddi açıdan milyon dolarları bulabilen sistemler üzerinde barındırılır ve veriye erişen sistemler çok düşük donanım yapısına sahip aptal makinalardan oluşabilir bu makinalara terminal adı verilir, terminaller network aracılığıyla bağlandıkları mainframe üzerindeki uygulamaya erişerek yine bu alandaki veri tabanındaki verilere ulaşırlar, eski bir yapı olmasına karşın halen bir çok kurum bu tekniği kullanmaktadır, binlerce kullanıcısı olan bir şirketin her bir kullanıcı için pahalı pc’ler almak yerine daha pahalı bir mainframe yapıyı tercih edip ucuz terminallerle veriye erişmesi hem veri tabanı üzerindeki kontrolü maksimum seviyeye çıkartır hem de veri tabanı bakımı ve yedeklenmesi gibi ciddi işleri aynı yapı üzerinde gerçekleştirebilir.Server / Client Database
Günümüzde kullanılan en popüler yapı Server / Client yapıdır, Mainframeden farkı tüm veri tabanı yapısının Server tarafına yüklenirken veriye ulaşmayı sağlayan uygulamaların Client tarafına yüklenmesidir bu sayede Server’ın tüm kaynaklarının asli görevi olan veritabanını barındırmak ve yönetmek gibi konulara ayrılması sağlanır, Server / Client yapıda kullanılan Client (İstemci) bilgisayarlar Mainframe yapıda kullanılan terminallerden daha donanımsaldır ve üzerlerinde veritabanına erişebilecek uygulamayı da barındırırlar günümüzde kullanılan bir çok ticari uygulama bu yapı üzerinde çalışır. Server / Client yapıda Veri tabanının bakımı, yedeklenmesi vb gibi işlemler Server üzerinde ya da Server’a bağlı başka bir PC aracılığı ile yapılabilir ancak temelde veriyi tutan ve sunan merkezi bir yapı vardır.Günümüzde hemen her veri erişimi gereken işlerde bu mimari kullanılır örneğin şirketinizde kullanılan ticari uygulamanın kullandığı veri tabanı yine şirketinizde bulunan bir Server üzerinde barındırılırken masanızdaki bir PC üzerine kurulmuş Ticari program ile bu veri tabanına erişirsiniz, Server üzerinde tutulan veri tabanına erişim bilgilerini uygulama geliştiricinin program içine gömmesi ya da bu bilgileri şifrelenmiş şekilde tutması veri güvenliğini bir nebze sağlar ancak bu sistemdeki en büyük sorun veriye erişen her bir client’ın bu uygulamayı üzerinde barındırması ve bu nedenle de hem donanım hem de bakım maliyetlerinin artmasıdır, programın kurulu olduğu pc ‘de oluşacak bir soruna doğrudan müdahele etmek gerekir bu nedenle de hem veritabanının barındırıldığı server hem de bu veri tabanına erişen client’lar için ayrı teknik ekibin çalıştırılması şarttır. Sonuçta veritabanına erişen uygulamanın her bir client üzerinde kurulu olması az da bir güvenlik açığı doğurur bu nedenle bu tür yapılarda veri güvenliğine ayrılan bütçe azımsanamayacak kadar büyük olabilir.Web Database
Veritabanları tek bir bilgisayar üzerinde barındırıldığı ve sadece barındırıldığı bilgisayar üzerinden erişilebildiği zamanlardan bu yana çok yol katetti artık bir veriye yüzbinlerce kilometre uzaklıktan internet aracılığı ile ulaşılabilinir, günümüzde kullanılan bir internet tarayıcısı kullanılarak ticari bir uygulamaya erişilip bu uygulama üzerinden veriye erişmek mümkün bir anlamda Mainframe ve Client/Server yapısının birleşimi gibi çalışan bu sistem geleceğin belki de tek yapısı olma yolunda hızla ilerliyor Web veri tabanlarındaki en ciddi sorun güvenlik açıkları ve bu konuda en büyük görev veriye erişmeyi sağlayan uygulamaları geliştiren programcılara düşüyor son zamanlarda artan veri hırsızlığının en büyük nedenleri iyi planlanmamış veri erişim teknikleri ve göz ardı edilmiş güvenlik açıklarında yatıyor. Her ne kadar bir veri tabanı güvenlik konusunda üstüne düşen görevi yapsa da web uygulamalarını geliştiren programcıların ufak hataları geri dönüşü olmayan sonuçlar doğurabiliyor.Web üzerinde barındırılan veri tabanı mimarisinin çalışma prensibi client üzerinde bulunan tarayıcının veriye erişen ve bu veriyi derleyen uygulamayı barındıran Server’a erişmesi ve bu uygulamanın da veritabanının tutulduğu server’dan istenilen veriyi çekip derlemesi üzerine kurulu bu sistemde Client ile Veritabanını üzerinde barındıran Server arasında doğrudan bağ olmadığından Client üzerinde veri tabanına erişecek bir uygulama kullanmanın da gereği yoktur tıpkı Mainframe yapıda olduğu gibi asıl işi yapan Client değil Serverlardır ancak bu yapı Mainframe’de olduğundan çok daha yüksek bir güvenlik sorunu üzerinde barındırır. Bu kitabın ilerleyen kısımlarında veri tabanı güvenliği konusunda alınacak önlemler ve geliştirilen güvenlik teknikleri ile ilgili bilgiler bulabileceksiniz.Veri Modelleme
Veri tabanına kaydedilen bilgiler belli bir düzende saklanırlar verilerin hangi düzende kayıt edileceğini belirleyen şablonlara veri modeli denir bu şablonların tanımlanması işlemine de Veri Modelleme denir.İlişkisel (Bağlantısal) Veri Modeliİlişkisel Model (Relational Model) veri tabanında tutulan verilerin tablolar ve tabloları oluşturan verilerin satır (row) ve sütun (column) yapısıyla depolanmalarını sağlar, her bir satır her bir kaydı sütun ise her bir kaydı oluşturan parçaların türünü belirtir 2 boyutlu bir matrisi andıran bu yapıda her bir satırın her bir sütunu belli türdeki bir veriyi tutmakla görevlidir. Her bir satırdaki sütun sayısı ve sırası eşit olmak zorundadır ancak satır sayısı ve sıralaması için bir sınırlama yoktur. İlişkisel veri modelinde birbirine bağlı farklı tablolar oluşturulur ve bu tabloların aynı tür veriyi barındıran sütunların birbirleriyle ilişkilendirilmesi sağlanır, bu noktada Normalizasyon denilen ve veri tabanı tasarımında oldukça önemli bir yeri olan konu devreye girer.Normalizasyon (Ayrıştırma)
Normalizasyon veri tabanında çok fazla sütun içeren tabloların tekrarlanan verileri önlemek için daha küçük alt kümelere ayrıştırılması işlemidir. Normalizasyon konusuna ilerki bölümlerde ayrıntılı olarak değinilecektir.Transaction
Veri tabanlarında gerçekleştirilen güncelleme işlemi bütünlüğünün kontrol edilmesi ve işlemin doğru olarak yapılmasının denetlenmesi işlemine Transaction denir, veri tabanı üzerinde tutulan bir kayıt güncellenmek istendiğinde işlemin doğru olarak yapılıp yapılmadı kontrol edilir ve iki farklı sonuç üretilir, bunlar commit ve rollback sonuçlarıdır eğer kayıt işlemi bir başarısızlıkla sonuçlanmış ise veri kümesi eski haline döndürülür bu işleme rollback denir eğer işlem başarılı bir şekilde gerçekleştirilmiş ise buna commit denir bu yapı veri tabanında oluşabilecek olası hataların oluşmadan önüne geçmeyi sağlar şu anda kullanılan bir çok RDBMS Transaction işlemini kendi başlarına yapabilmektedir bunların dışındaki veri tabanı yapılarını kullanan uygulamalarda bu işlem uygulama kısmında gerçekleştirilir.SQL
SQL, (Structured Query Language – Yapısal Sorgu Dili) IBM tarafından geliştirilmiş ve ANSI (American National Standards Institute) tarafından standartlaştırılmış bir veri tabanı sorgulama dilidir. SQL her ne kadar standart bir yapıya sahip olsada bir çok farklı SQL bulunmaktadır, ancak hemen tüm yapılarda değişmeyen bazı komutlar bulunur, ilerleyen bölümlerde SQL’in yapı taşları olan bu komutlar hakkında ayrıntılı bilgi sahibi olacaksınız.SQL kendi başına programlama dili değildir ancak başka programlama dilleri içerisinde kullanılabilen bir alt dil olarak tanımlanabilir. SQL ile sadece veri tabanları üzerinde işlem yapılabilir asıl amacı veriye en hızlı ve en basit şekilde ulaşmayı sağlamak ve verileri yönetmektir. SQL Veritabanlarında yapılan her türlü işlemin bir SQL karşılığı vardır örneğin bir tabloyu herhangi bir RDBMS üzerinde manuel oluşturabilir ya da aynı tabloyu bir SQL cümlesi ile kendi uygulamanızdan oluşturabilirsiniz, veri tabanına bir veriyi ekleyebilir, silebilir ya da güncelleyebilirsiniz SQL bu konuda oldukça esnek bir yapıya sahiptir ve derinlemesine incelendiğinde neredeyse bir uygulama içerisinde yapılabilen her türlü mantıksal işlemin bir SQL karşılığı vardır bu nedenle veri tabanına erişim sürecinde veri tabanı kısmında yapılabilecek bir sorgu ve döngünün uygulamaya yaptırılması performans kaybına neden olacaktır ilerleyen konularda veri tabanı performansını arttırmak konusunda ayrıntılı olarak örnekler verilecektir.