VERİ TABANI UYGULAMALARI

July 31, 2017 | Author: jeomorfolog | Category: N/A
Share Embed Donate


Short Description

VERİ TABANI UYGULAMALARI PostgreSQL Kurulumu VeritabanI Yönetimi...

Description

T.C. ANADOLU ÜN‹VERS‹TES‹ YAYINI NO: 2129 AÇIKÖ⁄RET‹M FAKÜLTES‹ YAYINI NO: 1157

VER‹TABANI UYGULAMALARI

Yazarlar Yrd.Doç.Dr. Hakan Güray fiENEL (Ünite 1, 5, 8, 9, 10) Ö¤r.Gör. Reha O¤uz ALTU⁄ (Ünite 2, 3) Uzm. Tevfik KIZILÖREN (Ünite 4, 7) Uzm. ‹brahim Erdinç ERGÜN (Ünite 6)

Editör Yrd.Doç.Dr. Hakan Güray fiENEL

ANADOLU ÜN‹VERS‹TES‹

Bu kitab›n bas›m, yay›m ve sat›fl haklar› Anadolu Üniversitesine aittir. “Uzaktan Ö¤retim” tekni¤ine uygun olarak haz›rlanan bu kitab›n bütün haklar› sakl›d›r. ‹lgili kurulufltan izin almadan kitab›n tümü ya da bölümleri mekanik, elektronik, fotokopi, manyetik kay›t veya baflka flekillerde ço¤alt›lamaz, bas›lamaz ve da¤›t›lamaz. Copyright © 2010 by Anadolu University All rights reserved No part of this book may be reproduced or stored in a retrieval system, or transmitted in any form or by any means mechanical, electronic, photocopy, magnetic, tape or otherwise, without permission in writing from the University.

UZAKTAN Ö⁄RET‹M TASARIM B‹R‹M‹ Genel Koordinatör Prof.Dr. Levend K›l›ç Genel Koordinatör Yard›mc›s› Doç.Dr. Müjgan Bozkaya Ö¤retim Tasar›mc›s› Yrd.Doç.Dr. Seçil Banar Grafik Tasar›m Yönetmenleri Prof. Tevfik Fikret Uçar Ö¤r.Gör. Cemalettin Y›ld›z Ö¤r.Gör. Nilgün Salur Ölçme De¤erlendirme Sorumlusu Ö¤r.Gör. H. Reha Akgün Dil Yaz›m Dan›flman› Okt. Sevgi Çal›fl›r Zenci Grafiker Nihal Sürücü – Ufuk Önce Kitap Koordinasyon Birimi Yrd.Doç.Dr. Feyyaz Bodur Uzm. Nermin Özgür Kapak Düzeni Prof. Tevfik Fikret Uçar Dizgi Aç›kö¤retim Fakültesi Dizgi Ekibi Veritaban› Uygulamalar› ISBN 978-975-06-0810-0 1. Bask› Bu kitap ANADOLU ÜN‹VERS‹TES‹ Web-Ofset Tesislerinde 250 adet bas›lm›flt›r. ESK‹fiEH‹R, Ekim 2010

iii

‹çindekiler

‹çindekiler Önsöz ............................................................................................................

vii

Veritaban› Uygulamalar›.........................................................

1

VER‹TABANI NED‹R? .................................................................................... Veritaban› Yönetim Sistemlerinin Tarihsel Geliflimi.................................... Neden Veritaban› Kullan›yoruz? ................................................................... VER‹TABANI TÜRLER‹ VE UYGULAMALARI .............................................. Veri Modelleri ................................................................................................ ‹L‹fiK‹SEL VER‹TABANI YÖNET‹M S‹STEMLER‹N‹N ................................. SORUNLARI ................................................................................................... Özet................................................................................................................ Kendimizi S›nayal›m...................................................................................... Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ S›ra Sizde Yan›t Anahtar› .............................................................................. Yararlan›lan ve Baflvurulabilecek Kaynaklar ...............................................

5 7 9 10 11 14 14 16 17 18 18 19

PostgreSQL Kurulumu............................................................ 20 G‹R‹fi .............................................................................................................. POSTGRESQL KURULUM DOSYASININ ‹ND‹R‹LMES‹ .............................. POSTGRESQL YAZILIMININ KURULUMU................................................... POSTGRESQL YARDIMCI PROGRAMLARIN KURULUMU ......................... Özet ............................................................................................................... Kendimizi S›nayal›m ..................................................................................... Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ Yararlan›lan ‹nternet Adresleri .....................................................................

3. ÜN‹TE

39 39 43 46 50 52 54 55 56 59 60 61 61 61

‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›.................... .. 62 G‹R‹fi .............................................................................................................. ‹L‹fiK‹SEL VER‹TABANLARI .......................................................................... ‹L‹fiK‹SEL VER‹TABANLARININ TEMEL B‹LEfiENLER‹................................ ‹L‹fiK‹SEL VER‹TABANI YÖNET‹M S‹STEMLER‹N‹N ÖZELL‹KLER‹...........

2. ÜN‹TE

21 21 22 28 35 36 37 37

Veritaban› Yönetimi ................................................................ 38 G‹R‹fi .............................................................................................................. pgAdmin PROGRAMINA GENEL BAKIfi...................................................... YEN‹ VER‹TABANI OLUfiTURMA ................................................................ TABLO OLUfiTURMA .................................................................................... PostgreSQL SUNUCU DURUMU ‹NCELEME................................................ SUNUCU BAKIMI .......................................................................................... VER‹TABANI YEDEKLEME ........................................................................... Veritaban›n› Yedekten Geri Yükleme.......................................................... RAPORLAMA.................................................................................................. Özet ............................................................................................................... Kendimizi S›nayal›m ..................................................................................... Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ S›ra Sizde Yan›t Anahtar› .............................................................................. Yararlan›lan ve Baflvurulabilecek Kaynaklar ...............................................

1. ÜN‹TE

63 63 64 66

4. ÜN‹TE

iv

‹çindekiler

YAPISAL SORGU D‹L‹NE (SQL) G‹R‹fi ........................................................ B‹R ‹L‹fiK‹SEL VER‹TABANI TASARIMI VE OLUfiTURMA.......................... Ülkeler Tablosu ............................................................................................. Sehirler Tablosu............................................................................................. Daglar Tablosu .............................................................................................. B‹R‹NC‹L ANAHTAR (PRIMARY KEY) KAVRAMI ....................................... YABANCI ANAHTAR (FOREIGN KEY) KAVRAMI...................................... VER‹TABANI NORMAL‹ZASYONUYLA VER‹TABANI TASARIMI .............. Özet................................................................................................................ Kendimizi S›nayal›m...................................................................................... Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ S›ra Sizde Yan›t Anahtar› .............................................................................. Yararlan›lan ve Baflvurulabilecek Kaynaklar ............................................... ‹nternet Kaynaklar›........................................................................................

5. ÜN‹TE

Temel SQl Kavramlar› ve Komutlar›........................... ......... 84 G‹R‹fi .............................................................................................................. SQL KOMUTLARI NASIL ÇALIfiTIRILIR? ...................................................... SQL KAVRAMLARI ........................................................................................ Hareket (Transaction) ................................................................................... Kullan›c› Taraf›ndan Tan›mlanan Fonksiyonlar (Functions) ...................... Tetik fonksiyonlar ......................................................................................... PL/pgSQL Dili................................................................................................ fiemalar (schemas) ........................................................................................ Görüntü (View) ............................................................................................. Veritaban›nda Eriflim Rolleri (database roles) ............................................. ‹mleçler (Cursors).......................................................................................... SQL VER‹ T‹PLER‹ ......................................................................................... SQL D‹L‹NDE FONKS‹YONLAR VE ‹fiLEÇLER ............................................ SQL KOMUTLARI .......................................................................................... SELECT, INSERT INTO, UPDATE, DELETE ................................................. SELECT........................................................................................................... Benzer ‹sim Kullan›m› .................................................................................. WHERE Koflullar›........................................................................................... Sorgular›n Birlefltirilmesi ............................................................................... INSERT INTO................................................................................................. UPDATE ......................................................................................................... DELETE .......................................................................................................... Özet................................................................................................................ Kendimizi S›nayal›m...................................................................................... Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ S›ra Sizde Yan›t Anahtar› .............................................................................. Yararlan›lan Kaynaklar..................................................................................

6. ÜN‹TE

67 70 70 71 72 73 74 75 79 80 82 82 83 83

85 88 89 89 90 91 92 94 95 96 96 96 98 101 103 103 103 104 105 106 106 107 108 109 110 110 110

Temel SQL Komutlar› ............................................................ 112 G‹R‹fi .............................................................................................................. YI⁄IN KÜME ‹fiLEM FONKS‹YONLARI ....................................................... TABLOLARIN B‹RLEfiT‹R‹LMES‹ (JOINING TABLES) ................................. TABLO B‹RLEfiT‹RMEYLE ‹LG‹L‹ B‹R ÖRNEK ............................................ ORDER BY.....................................................................................................

113 113 115 118 123

v

‹çindekiler

DISTINCT....................................................................................................... GROUP BY .................................................................................................... HAVING ......................................................................................................... Özet ............................................................................................................... Kendimizi S›nayal›m ..................................................................................... Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ S›ra Sizde Yan›t Anahtar› .............................................................................. Yararlan›lan ve Baflvurulabilecek Kaynaklar ...............................................

124 125 127 128 129 130 131 131

‹ndeksleme ve K›s›tlama.................................... ..................... 132 G‹R‹fi .............................................................................................................. VER‹TABANI ‹NDEKSLER‹............................................................................ ‹ndeks Nas›l ve Neden Oluflturulur? ............................................................ ‹ndeks Kullan›m›nda Nelere Dikkat Edilmeli? ........................................... Eflsiz ‹ndeks (Unique Index) Kavram› ......................................................... Eflsiz ‹ndekslerin Birden Fazla Sütun Üzerinde Kullan›lmas›..................... KISITLAR VE KISITLAMALAR (CONSTRAINTS) .......................................... Kontrol K›s›tlar› (Check Constraints) ........................................................... “Not Null” K›s›tlar› (Not Null Constraints)................................................... Eflsizlik K›s›t› (Unique Constraints) .............................................................. Birincil Anahtar K›s›tlar› (Primary Key Constraints).................................... Yabanc› Anahtar K›s›tlar› (Foreign Key Constraints) .................................. Özet ............................................................................................................... Kendimizi S›nayal›m ..................................................................................... Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ Yararlan›lan ve Baflvurulabilecek Kaynaklar ...............................................

133 133 134 135 136 138 138 139 140 140 141 141 143 144 145 145

OpenGIS Standartlar› ............................................................. 146 G‹R‹fi .............................................................................................................. B‹LG‹ TEKNOLOJ‹LER‹NDE STANDARTLARIN ÖNEM‹ ............................. XML nedir? ..................................................................................................... OPENGIS STANDARTLARI ........................................................................... OPENGIS REFERANS MODEL‹ VE ÖRNEKLER........................................... GML (Geographic Markup Language) ......................................................... GML’den Türetilmifl Standartlar ve Modeller ............................................... OpenGIS Web Servisi Standartlar›................................................................ Sensör Standartlar›......................................................................................... OpenGIS Standartlar›n›n Yararlar›................................................................ Özet ............................................................................................................... Kendimizi S›nayal›m ..................................................................................... Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ Yararlan›lan ve Baflvurulabilecek Kaynaklar ...............................................

8. ÜN‹TE

147 147 148 149 150 152 154 155 157 158 159 160 161 162

PostGIS Kurulumu ve Uygulamalar› ..................................... 164 G‹R‹fi .............................................................................................................. POSTGIS KURULUMU .................................................................................. UZAMSAL VER‹TABANININ KURULMASI ................................................... TABLOLARIN OLUfiTURULMASI .................................................................. TABLOYA VER‹LER‹N YÜKLENMES‹........................................................... UZAMSAL REFERANS S‹STEMLER‹ VE DÖNÜfiÜMLER ..............................

7. ÜN‹TE

165 166 168 169 170 171

9. ÜN‹TE

vi

‹çindekiler

Uzamsal Hesaplamalar ve Ölçümler ............................................................ ‹NDEKSLEME ................................................................................................. Özet ............................................................................................................... Kendimizi S›nayal›m ..................................................................................... Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ S›ra Sizde Yan›t Anahtar› .............................................................................. Yararlan›lan ve Baflvurulabilecek Kaynaklar ...............................................

10. ÜN‹TE

173 174 176 177 178 179 179

Co¤rafi Veritaban› Üzerinde Sorgulamalar.......................... 180 G‹R‹fi .............................................................................................................. CO⁄RAF‹ B‹LG‹ S‹STEM‹ YAZILIMI: QUANTUM GIS................................ Kurulum ‹fllemi.............................................................................................. ÖRNEK VER‹ SET‹N‹N VER‹TABANINA YÜKLENMES‹.............................. Co¤rafi Bilgi Sistemi ve Veritaban› Ba¤lant›s›n›n Kurulmas› ...................... GERÇEK VER‹ SET‹ ÜZER‹NDE CO⁄RAF‹ SORGULAMALAR ................... Ölçüme Dayal› Basit Sorgulamalar............................................................... Birden Çok Tabloyu ‹lgilendiren Sorgulamalar›.......................................... Özet ............................................................................................................... Kendimizi S›nayal›m ..................................................................................... Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ S›ra Sizde Yan›t Anahtar› .............................................................................. Yararlan›lan ve Baflvurulabilecek Kaynaklar ...............................................

181 181 182 183 186 188 188 190 193 194 195 196 196

Önsöz

Önsöz Geçti¤imiz yüzy›lda yaflanan teknolojik, bilimsel ve ekonomik ivmelenmenin ard›nda, bilgilerin depolanmas›n›, yay›lmas›n› ve veriler üzerinde h›zl› ifllem yap›lmas›n› sa¤layacak ortamlar›n gelifltirilmesi yatar. Günümüzde, flirketler ifl süreçlerini elektronik ortamda kaydetmekte, ifl ak›fllar›n› bilgisayar yaz›l›mlar›yla takip etmektedir. Verilerin depolanmas›, üzerinde ifllemler yap›lmas› ve yeni bilgilerin oluflturulmas› sayesinde flirketler geliflme flans› bulmaktad›r. Ellerindeki verileri yorumlayarak, yeni bilgiler üreten flirketler gelece¤i görme ve buna göre planlama yapma yetene¤ine kavuflurlar. Planlama yapabilen kurulufllar, beklenmedik ekonomik olaylara daha dayan›kl› ve sürekli geliflmeye aç›klard›r. fiirketlerin kendi ifl ak›fllar›n› izlemek ve yeni bilgiler oluflturmak için kulland›klar› araçlardan biri veritabanlar›d›r. Veritaban› düzenli veriler toplulu¤udur. Her ne kadar bu kavram ilk tasarland›¤› y›llardan beri düzenli verilerle birlikte an›lsa da, günümüzde her türlü verinin depolanmas› için kullan›lmaktad›r. Veritaban› kullan›m›nda en büyük sorun büyük miktarda verinin depolanmas› ve etkin bir flekilde kullan›labilmesidir. Veritaban›n›n verimli kullan›m› için veritaban› yönetim sistemi ad› verilen yaz›l›mlar gelifltirilmifltir. Yönetim sistemleri aras›nda ticari olanlarla birlikte, ücretsiz olanlar da bulunur. Geliflen yaz›l›m teknolojileri sayesinde, ücretsiz olan yaz›l›mlarla ticari olanlar aras›nda, özellikler ve baflar›m de¤erleri ba¤lam›ndaki farklar h›zla kapanmaktad›r. Bu kitab›n temel amac›, veritaban› yönetim sistemleri konusunda, okuyuculara temel kavramlar› anlatmak ve veriler üzerinde yap›labilecek ifllemler konusunda ayr›nt›l› bilgiler vermektir. Bu amaçla, ücretsiz olan PostgreSQL veritaban› yönetim yaz›l›m› kullan›lacakt›r. Yaz›l›m›n kurulumu, ek yaz›l›mlar ve özelliklerin tan›t›m› kitab›n ilk bölümünde anlat›lmaktad›r. Veritaban› yönetim sistemlerinde SQL programlama dili kullan›larak yap›lan ifllemlerle ilgili çok say›da örnek verilmifltir. PostgreSQL yaz›l›m›n›n bu kitap için seçilmesinin ard›nda, ticari anlamda üretilen yaz›l›mlardaki pek çok özelli¤in, PostgreSQL’de bulunmas› yatmaktad›r. Bunlar aras›ndaki önemli özelliklerden biri de, OpenGIS standard›na olan uyumdur. Veritaban› yönetim sistemleri üzerinde co¤rafi nesnelerin depolanmas› ve üzerinde co¤rafi anlamda yap›lan hesaplamalar›n yap›lmas›, PostGIS standard›n› getiren PostGIS eklentisiyle sa¤lanmaktad›r. Kitaptaki bir çok örnek, co¤rafi bilgi sistemleri perspektifinden haz›rlanm›flt›r. Kuramsal bilgiler, pratik örnekler ve gerçek hayat uygulamalar›yla bütünlefltirilerek sunulmaktad›r. Kitab›n co¤rafi bilgi sistemleri konusunda çal›flan programc›lar aç›s›ndan önemli bir kaynak olmas› beklenmektedir.

Editör Yrd.Doç.Dr. Hakan Güray fiENEL

vii

VER‹TABANI UYGULAMALARI

1

Amaçlar›m›z

N N N N

Bu üniteyi tamamlad›ktan sonra; ‹liflkisel veritaban›n›n hangi uygulamalarda yararl› oldu¤una karar verebile ceksiniz. ‹liflkisel veritaban› uygulamalar›n› di¤er veritaban› türlerinden ay›rabileceksiniz. Bir veritaban›n› oluflturan temel bileflenleri listeleyebilecek ve iliflkisel veritaban› yönetim sisteminin nas›l çal›flt›¤›n› aç›klayabileceksiniz. Temel SQL sorgular› kurabileceksiniz.

Anahtar Kavramlar • • • • •

veritaban› veritaban› yönetim sistemleri iliflkisel veritaban› modeli tablolar SQL

• • • •

PostgreSQL PL/pgSQL OLAP OLTP

‹çerik Haritas›

Veritaban› Uygulamalar›

Veritaban› Uygulamalar›

• G‹R‹fi • VER‹TABANI NED‹R? • VER‹TABANI TÜRLER‹ VE UYGULAMALARI • ‹L‹fiK‹SEL VER‹TABANI YÖNET‹M S‹STEMLER‹N‹N SORUNLARI

Veritaban› Uygulamalar› G‹R‹fi Günümüzde bilgi teknolojileri sayesinde depolanan veri miktar› gün geçtikçe artmaktad›r. ‹nternet sayesinde, veriler dosyalar halinde h›zl› bir yay›l›m göstermekte ve verilerin birden fazla kopyas› ‹nternet üzerinde yer alan bir çok bilgisayara kopyalanmaktad›r. Ancak verilerin büyük bir k›sm› düzenli olmaktan uzakt›r. Birbirinden ba¤›ms›z, ayr› dosyalar halinde duran verilerin düzenli hale getirilmesi çabas› bilgisayarlar›n yayg›nlaflmaya bafllad›¤› ilk y›llara dayan›r. Düzenli hale getirilen ve birbirleriyle iliflkilendirilen veri parçalar›, verinin bilgiye dönüfltürülmesi için elzemdir. Günümüzde kurulufllar, kendileriyle ilgili verileri zaman›nda ve do¤ru flekilde kaydedebilmek, ve bunlar› kullanarak iflletmelerini daha iyi yönetebilmek için yar›fl içindedir. Verilerini daha iyi yöneten kurulufllar›n yaflama flans› di¤erlerine göre daha yüksektir. Depolanan büyük miktarda verinin bilgiye dönüfltürülmesi ancak esnek ve h›zl› veritaban› yönetim sistemleriyle mümkündür. Veritaban› verilerin düzenli flekilde depoland›¤› bir nesnedir. Ancak, veritaban›n›n temel amac› verileri depolamak de¤ildir. Örne¤in, ‹nternet büyük miktarda metin, video, resim gibi verinin depoland›¤› bir yer olmas›na ra¤men veritaban› olmaktan uzakt›r, çünkü ‹nternet’te bulunan veri düzensizdir. Ancak, Google, Yahoo, Bing gibi arama motorlar› üzerinden sorgulama gerçeklefltirilebilir. Veritabanlar›n›, veri depolama sistemlerinden ay›ran en temel özellik, veriler üzerinde çeflitli kriterlere göre sorgulama yap›labilmesi ve bu flekilde yeni bilgilerin türetilebilmesidir. Geleneksel veritaban› tan›m›nda, verilerin düzenli flekilde depolanmas›na ve birbiriyle ilgili olmas›na gerek yoktur. Ancak, veritaban›nda verilerin birbiriyle iliflkili öbekler halinde tutulmas› bilgi üretimini kolaylaflt›rmaktad›r. Gerçek hayatta, veritaban› olarak de¤erlendirilebilecek bir çok veriyi kiflisel arflivlerimizde tutuyoruz. Bir veritaban›n›n dijital ortamda olmas›na gerek yoktur. Örne¤in, arkadafllar›n›zdan ö¤rendi¤iniz yemek tarifleri, arkadafllar›n›z›n ve akrabalar›n›z›n adresleri, telefon numaralar›, do¤um tarihleri, kiflisel veritabanlar› olarak düflünülebilir. Evinizde, önemli olaylar›n foto¤raflar›n› saklad›¤›n›z foto¤raf albümünüz bile bir veritaban› olarak görülebilir. ‹çinde kendinizin bulundu¤u foto¤raflar› aramak zor bir ifltir. Resimleri bir veritaban› haline getirerek, içindeki kiflilerin isimlerini, çekildi¤i tarihi ve resmin konusunu bir veritaban›na aktarabilseydiniz, arama ifllemini çok daha k›sa sürede yapabilirdiniz. Dijitalleflen verilerin sa¤lad›¤› en büyük kolayl›k, verilerin daha kolay sorgulanabilmesidir.

4

SIRA S‹ZDE

1

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M Veritabanlar›nda farkl› tipte ve miktarda veri bulunabilir. Verilerin nas›l depolanaca¤› ve daha h›zl› flekilde eriflilebilece¤i, uzun y›llar üzerinde çal›fl›lan konularS O R U Bu amaçla, çeflitli veritaban› modelleri gelifltirilmifltir. ‹lk uygudan biri olmufltur. lamalarda, veriler dosya sisteminde dosyalar halinde tutulurdu. Zamanla, veri miktar› ço¤ald›kça ve veriler karmafl›klaflt›kça daha h›zl› eriflim çözümlerine olan talep D‹KKAT artm›flt›r. ‹liflkisel veritaban› modeli, flu ana kadar gelifltirilenler aras›nda en iyi çözüm olarak evrilmifl ve en yayg›n olarak kullan›lan veritaban› modeli olmufltur. SIRA S‹ZDE Veritabanlar›, Veritaban› Yönetim Sistemi (VTYS) ad› verilen yaz›l›mlar üzerinden oluflturulur ve kullan›l›r. Kullan›c›lardan gelen sorgulama komutlar›, verilerde de¤ifliklik yap›lmas› talepleri VTYS taraf›ndan al›n›r ve veritaban›na uygulan›r (fiekil 1). AMAÇLARIMIZ Bu flekilde kullan›c›lar, VTYS üzerinden veritaban›ndaki veriler üzerinde sorgulama yapabilirler, yeni veriler ekleyebilirler ve olan verileri de¤ifltirebilirler veya silebilirler. VTYS’lerin ifllevi, veritaban›na kullan›c›lar›n en h›zl› flekilde eriflimini K ‹ TenA önemli P sa¤lamakt›r ve verdikleri komutlar› çal›flt›rarak sonuçlar› geri döndürmektir.

S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

Gündelik yaflam›n›zda SIRA S‹ZDE bilgisayar ortam›na veritaban› olarak kaydedildi¤inde arama iflleviyle hayat›n›z› kolaylaflt›racak veri öbeklerini listeleyin.

N N

K ‹ T A P

fiekil 1.1 T EVeritaban›na LEV‹ZYON gelen

Sorgulama

de¤ifliklik

TELEV‹ZYON

komutlar›n VTYS taraf›ndan ifllenmesi

‹NTERNET

‹NTERNET

Kay›t silme Veritaban› Kay›t ekleme Veritaban› Yönetimi

Sorgulama

de¤ifliklik

Microsoft SQL Server, Oracle, IBM DB2, PostreSQL ve MySQL gibi yaz›l›mlar veritaban› yönetim sistemlerinden baz›lar›d›r. Yönetim yaz›l›mlar›, yeni veritaban› yaratmak, var olan veritabanlar›nda bilgi öbekleri olan tablolar› oluflturmak, yedekleme yapmak gibi yönetimsel ifllerin yap›lmas›n› sa¤lar. Bununla beraber, ana ifllevleri kullan›c›lardan veya veritaban› uygulama yaz›l›mlar›ndan gelen sorgulamalar› ve komutlar› çal›flt›rarak sonuçlar› döndürmektir. Bu çal›flmadaki bütün örnekler, iliflkisel veritaban› yönetim sistemi olan PostgreSQL üzerinde gösterilecektir. PostgreSQL, ücretsiz olmas› ve yayg›n flekilde kullan›lmas› nedeniyle tercih edilmifltir. SIRA S‹ZDE

2

Microsoft SQL Server, SIRA S‹ZDEOracle, IBM DB2, PostreSQL ve MySQL gibi s›k kullan›lan VTYS’lerine ek olarak di¤er VTYS’lerini wikipedia sitesine bakarak listeleyin.

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

S O R U

S O R U

D‹KKAT

D‹KKAT

5

1. Ünite - Veritaban› Uygulamalar›

Verilerin etkin bir flekilde kullan›lmas›n›n bir kurulufl için neden önemli oldu¤u, bir ma¤aza zincirinde yer alan bir ma¤azan›n iflleyifline bakarak anlafl›labilir. Ma¤azada be¤endi¤iniz bir ürünü kasaya götürdü¤ünüzde, kasiyer ürünün barkotlu etiketini barkot okuyucuda okutmaktad›r. Barkot okuyucusunun ba¤l› oldu¤u bilgisayar, barkotta kodlanm›fl ürünün numaras›n› veritaban› yönetim sistemine vererek, fiyat›n› sorgulamaktad›r. E¤er ürün sat›n al›n›rsa, veritaban›nda bulunan ma¤aza sto¤undan eksiltilmektedir. Veritaban›nda tutulan bilgiler, ma¤azan›n etkin bir flekilde çal›flmas›n› kolaylaflt›rd›¤› gibi, flirketin üst kademelerinde yer alan karar vericiler için de önemli bilgiler sa¤lar. Stokta azalan ürünler, flirket yönetiminin denetimindeki ana depodan ma¤azalara yollanmaktad›r. Ayr›ca, ana depoda eksilen ürünler için, ma¤azalarda çok sat›lan ürünler üreticilerinden siparifl edilirken, sat›fl baflar›s› düflük ürünler için siparifl verilmeme karar› verilebilir. Ürünlerin niteliklerine göre de farkl› kararlar al›nabilir. Örne¤in, veritaban›nda yer alan sat›fl rakamlar› ve ürünlerin renkleri üzerinde yap›lan sorgulamalarda sar› renkli ürünlerin, di¤erlerine göre daha üst sat›fl rakamlar› yakalad›¤› anlafl›l›rsa, bu niteli¤i tafl›yan baflka ürünlerin de üreticilerden al›nmas› düflünülebilir.

VER‹TABANI NED‹R? Veritaban›, veri ve metaveriden oluflur. Metaveri, veri hakk›nda veri olarak tan›mlan›r. Veritaban› yönetim sistemleri, veritaban›n›n yap›s›n› ve içindeki bilgilerin cinsini metaveri olarak tutarlar. Veritabanlar›nda veriler, tablolar halinde tutulur. Metaveri, tablonun her alan›n›n tipini ve anlam›n› tan›mlar. Veritipi ise, tablodaki her alan›n (kolonun) tipidir. Herhangi bir alan›n veri tipi, say› olabildi¤i gibi, tarih ve metin de olabilir. Örne¤in, bir personel veritaban›nda kifli bilgilerinin depoland›¤› bir tablo düflünelim (fiekil 2). Tabloda dört kiflinin kayd› bulunmaktad›r. Birinci kolonda sicil numaras›n›n olaca¤›, ard›ndan gelen kolonlarda ad, soyad, do¤um tarihi ve biriminin bulunaca¤› bilgisi metaveridir. VTYS’leri her tabloda yer alan kolonlar›n içeriklerinin ne olaca¤› bilgisini kullanarak verileri depolarlar. Hastane Bilgi Sisteminde, doktorlar tablosunda olabilecek metaverileri SIRA düflünün. S‹ZDE

3

fiekilD1.2 Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

Personel tablosu

personel S O R U

sicil_no 00102020 00302727 00269921 00165203

ad

soyad

Ahmet Mehmet Mustafa Hakan

Türker Taflk›n Düzgün Taner

SIRA S‹ZDE

dog_tarih

S O R U

birim

‹KKAT 15.07.1968 D Tahakkuk 11.03.1974 Ayniyat 21.05.1956 Ayniyat SIRA S‹ZDE 08.12.1967 Sat›nalma

AMAÇLARIMIZ

D‹KKAT

N N

Sorgulama, veritaban›nda belirli koflullar› sa¤layan verilerin bulunmas› ifllemidir. Örne¤in, ismi A ile bafllayan flehirler fiehirler tablosunda sorgulama yap›larak bulunabilir. Sorgulama yan›nda, ekleme, de¤ifltirme ve silme Kgibi de, ve‹ T ifllemler A P ritaban›ndaki bilginin güncel halde tutulmas› amac›yla kullan›l›r. Veritaban›nda yap›lacak ifllemler, veritaban› yönetim sisteminin anlad›¤› bir bilgisayar diliyle yaz›lm›fl komutlarla yap›l›r. Veritaban› ifllemleri koT E Liçin E V ‹ Zkullan›lan YON

‹NTERNET

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

TELEV‹ZYON

‹NTERNET

6

Veritaban› Uygulamalar›

mut dillerinden biri ve en yayg›n kullan›lan› SQL (Yap›sal Sorgu Dili - Structured Query Language) dilidir. Özellikle iliflkisel veritaban› sistemleri için tasarlanan SQL dili, veritaban› üzerinde sorgulama, de¤ifltirme, silme ve ekleme gibi ifllemlerin yap›lmas›n› sa¤lar. Personel veritaban›nda, Ahmet isimli kiflileri getirmek için kullan›labilecek SQL komutu, fiekil 3’te gösterilmektedir. fiekil 1.3 ‹smi Ahmet olan kifli bilgilerini getiren SQL komutu

SELECT sicil_no, ad, soyad, birim FROM personel WHERE ad = ‘Ahmet’

Bir çok VTYS, kullan›c›lar›na veritaban›na eriflebilmeleri ve dönen de¤erleri biçimlendirmeleri için dördüncü nesil programlama dillerden birini desteklemektedir. Oracle, IBM/DB2 VTYS’leri içinde PL/SQL dilinde kod yaz›lmas›n› sa¤layan modüller bulunmaktad›r. PosgreSQL VTYS ise, PL/SQL’e çok yak›n bir dil olan, PL/pgSQL dilini destekler. PL/SQL gibi programlama dillerinin en önemli getirisi, program›n veritaban› sunucusu üzerinde çal›flmas›d›r. Veritaban›nda yap›lan ifllemler sonucu al›nan veri, veritaban› sunucusunda çal›flan PL/SQL program taraf›ndan biçimlendirilir ve ifllenmifl sonuç kullan›c›ya sunulur. Böylelikle, veritaban› ve kullan›c› bilgisayar› aras›ndaki a¤ üzerinden geçen veri trafi¤i azal›r. fiekil 1.4 degistir isimi PL/pgSQL yordam› örne¤i

CREATE OR REPLACE FUNCTION degistir(v_isim varchar, v_ver varchar) RETURNS varchar AS $$ BEGIN IF v_ver IS NULL THEN RETURN v_isim; END IF; RETURN v_isim II ‘/’ II v_ver; END; $$ LANGUAGE plpgsql;

Bir veritaban›nda, milyonlarca kay›t olabilece¤i düflünülürse, VTYS’ine gönderilen bir sorgunun zaman alaca¤› flüphesizdir. Örne¤in, ad› Ahmet olan kiflilerin bulunmas› için, bütün tabloda arama yap›lmas› gerekebilir. VTYS’leri, veritaban› indeksleme ad› verilen ve bir kolon üzerine uygulanan bir ifllemle, sorgu sürelerini azaltabilirler. ‹ndeksleme ifllemi, bir kitab›n içindekiler bölümünü haz›rlamaya benzetilebilir. ‹ndekslenen veri üzerinde arama yapmak daha kolayd›r. ‹ndekslenen kolonlar için, arama bütün kolona uygulanmaz ve indeks verisi içinde aran›r. ‹ndeksleme, sorgu sürelerini indirmekle birlikte, her kay›t için bir indeks verisi de oluflturulmas› gerekti¤inden, yeni kay›t ekleme süresini art›rabilir. ‹ndeks dosyalar› nedeniyle, veritaban› daha fazla bellek kullan›r ve kaplad›¤› sabit disk alan› artar.

SIRA S‹ZDE

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

1. Ünite - Veritaban› Uygulamalar› S O R U

S O R U

D ‹ K K A T gereklidir. ‹ndeksleme, sadece arama iflleminin s›kl›kla yap›ld›¤› kolonlarda uygulanmas› Aksi taktirde, veritaban›na eriflim süresi artar.

SIRA S‹ZDE

D‹KKAT

N N

Veritaban›n›n, verilerin depolanmas› ve verinin bilgiye dönüfltürülmesi iflleminde kullan›lan bir yap› olarak etkin flekilde kullan›m› ancak tasar›m› do¤ru yap›ld›AMAÇLARIMIZ ¤› zaman baflar›l›d›r. Verinin organizasyonel olarak tasnif edilmesi ve veritaban›n›n tasar›m› veritaban› modelleme ad› verilen bir süreçle gerçeklefltirilir. Veritaban› modeli verinin düzenli hale getirilmesi için gerekli kurallard›r ve verilerin veritaba‹ T A birbiriyle P n›na nas›l yerlefltirilece¤ini tan›mlar. Model sayesinde, bir veri Ky›¤›n›, iliflkili ve düzenli bir veri yuma¤› haline getirilebilir. Do¤ru bir flekilde gerçeklefltirildi¤inde modelleme ifllemi veriler aras›ndaki tuT E L E V ‹ hatalar Z Y O N ve yantarl›l›¤› art›r›r ve verilere daha h›zl› eriflilmesini sa¤lar. Tasar›mdaki l›fl kararlar, bilginin yanl›fl elde edilmesine kadar varan sorunlar ortaya ç›kar›r. Veritaban› etraf›na kurulan uygulama yaz›l›mlar› yaz›ld›ktan ve veriler veritaban›na eklenmeye bafllad›ktan sonra tasar›m›n de¤ifltirilmesi oldukça ‹zordur. NTERNET ‹yi bir modelle, verilere daha h›zl› ulafl›labilir ve bilgi üretimi daha kolay gerçeklefltirilerek raporlanabilir. Raporlama, veritaban› içinde yer alan verilerin, bilgi haline getirilerek doküman haline getirilmesi iflidir ve veritaban› üzerinde yap›lan uygulamalardan biridir. Yüksek seviyeli dillerden birinde (örne¤in C#, Java, gibi) yaz›lan veritaban› uygulama yaz›l›mlar›, kullan›c›lar›n ayr›nt›lar› bilmeden veritaban›n› kullanmalar›n› ve di¤er bir deyiflle kullan›c›lar›n veritaban›ndan soyutlanmalar›n› sa¤lar. Çünkü kullan›c›, VTYS’nin ayr›nt›lar›n› ve veritaban›ndaki veri modelini bilmek zorunda de¤ildir. Veritaban›n›n soyutlanmas›, bir sürücünün kulland›¤› araban›n motorunun teknik ayr›nt›lar›n› bilmemesine benzetilebilir. Uygulama yaz›l›mlar› sayesinde elde edilen bilgi kurumlar›n yaflamas› ve geliflmesi için gerekli kararlar›n al›nmas›nda kullan›l›r. Ancak, veritaban› tasar›m›, do¤ru bilgi elde etmenin anahtar›d›r. Veritaban› organizasyonundaki hatalar, uyumsuzluk ve tekrarlayan veriler, ne kadar iyi yaz›l›rsa yaz›ls›n uygulama yaz›l›mlar›n›n do¤ru ve h›zl› bir flekilde bilgi sa¤lamas›n› engeller. Hayat›n›z› kolaylaflt›racak hangi verileri veritaban›nda depolamak ve gerekti¤inde sorguSIRA S‹ZDE lamak istersiniz? Listeleyiniz.

7

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

TELEV‹ZYON

‹NTERNET

4

D Ü fi Ü N E L ‹ M Veritaban› Yönetim Sistemlerinin Tarihsel Geliflimi

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M

Verilerin depolanmas› ve gerekti¤inde eriflilmesi, bilgisayarlar›n yayg›nlaflt›¤› 1950’li S O veriler R U y›llardan itibaren devaml› gündemde olmufltur. ‹lk uygulamalarda dosyalarda tutulmaktad›r. Dizinlerin içine dosyalar›n isimleri, içeriklerinin ne oldu¤unu göstermektedir. Örne¤in, kisiler.txt dosyas›, kiflilerle ilgili bilgileri içermektedir. D‹KKAT 1960’l› y›llarda, General Electric flirketinden Charles Bachman isimli araflt›rmac› verinin modellenmesi ve depolanmas›na odaklanan, Integrated Data Storage ad› SIRA Information S‹ZDE verdi¤i bir yaz›l›m› gelifltirir. 1960’l› y›llar›n sonunda, IBM flirketi, Management System (IMS) ad› verilen bir yaz›l›m› piyasaya sürer. IMS, verinin hiyerarflik flekilde modellenmesine dayanan bir sistemdir. AMAÇLARIMIZ 1970’de, yine IBM flirketinden Edgar Codd isimli araflt›rmac›, günümüzde yayg›n bir flekilde kullan›lan iliflkisel veritaban› modellerine öncülük eden bir yaklafl›m öne sürer. Codd, verilerin ortak anahtarlar (say›lar) üzerinden K ‹ T iliflkilendirilmeA P sinin verilerin kolay ulafl›labilir hale getirilmesine yard›mc› olaca¤›n› belirtmekte-

N N

S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

TELEV‹ZYON

TELEV‹ZYON

‹NTERNET

‹NTERNET

8

Veritaban› Uygulamalar›

dir. Bu önemli çal›flma, günümüzde kullan›lan çok say›da ticari veritaban› uygulamas›na esin kayna¤› olmufltur. 1980’ler, iliflkisel veritaban› yönetim sistemlerinin yayg›nlaflt›¤› dönemlerdir. Bu sistemler içinde çeflitli ifllemlerin yap›lmas›n› sa¤lamaya yönelik bir dil gelifltirilmesi düflüncesi, SQL (Yap›sal Sorgu Dili : Structured Query Language) ad› verilen bir bilgisayar dilinin gelifltirilmesine yol açar. SQL dilinin ilk örne¤i, 1970’lerin sonunda IBM’in deneysel anlamda gelifltirdi¤i bir veritaban› üzerinde sorgulama gerçeklefltirmek amac›yla gelifltirilmifltir. Baz› isteklere göre gelifltirilen dil, 1980’lerde IBM SEQUEL (Ard›fl›k ‹ngilizce Sorgu Dili - Sequential English Query Language) ismiyle piyasaya sürülmüfltür. Ancak, SEQUEL isminin ticari isim hakk› baflka bir flirkette oldu¤u için, isim SQL olarak de¤ifltirilir. SQL’in bilgisayar endüstrisinde yayg›n bir kullan›m alan› bulmas› ve ticari baflar›s› nedeniyle, Amerika Standartlar Enstitüsü olan ANSI, SQL’in standartlaflmas› için bir komite kurar. Ard›ndan, 1987’de, Uluslararas› Standartlar Enstitüsünde (ISO), SQL’in bir Dünya standard› olmas› için çal›flmalar bafllat›l›r. ‹ki y›l sonra, standard›n ilk sürümü olan SQL-89 duyurulur. Talepler do¤rultusunda, SQL-89 daha da gelifltirilerek, ikinci nesil standart olan SQL-92 yay›nlan›r. Üçüncü nesil standartla ilgili çal›flmalar, 1999’da tamamlan›r ve SQL-99 ad› alt›nda sunulur. En son olarak SQL:2003 ve SQL:2006 standartlar› ortaya ç›kar. Ancak, SQL konusundaki standartlaflma bitmemifltir ve yeni özelliklerin kazand›r›lmas› için çal›flmalar yap›lmaktad›r. SQL dilinin, bir programlama dilinde yer alan yap›lara (döngüler, “case” yap›lar›,vb) sahip olmas› için çal›flmalar sürdürülmektedir. 1980’lerin sonlar› ve 1990’lar çok amaçl› veritaban› yönetim sistemlerinin bilgisayar endüstrisinde görüldü¤ü y›llard›r. Veritaban› yönetim sistemi bu y›llarda yap›lan de¤iflikliklerle, sadece alfanümerik (alfabetik ve nümerik) karakterlerden oluflan kay›tlar›n depoland›¤› sistemler olmaktan uzaklafl›r. Alfanümerik nitelik tafl›mayan, resim, video, ses dosyalar›n› da depolayan sistemler olarak evrilirler. Art›k veritaban› yönetim sistemleri, birbiriyle iliflkili her türlü veriyi depolayabilen ve sorgulanan bilgileri h›zl› bir flekilde sunabilen sistemler haline gelir. 1990’lar, genel amaçl› veritaban› kavram›n›n esnetildi¤i ve yönetim bileflenlerinin bir üst katman olarak sunuldu¤u Kurumsal Kaynak Planlama (ERP: Enterprise Resource Planning) ve Yönetim Kaynak Planlama (MRP: Management Resource Planning) gibi uygulamalar›n gelifltirildi¤i y›llard›r. Oracle, SAP, PeopleSoft, Siebel ve Baan gibi flirketlerin oluflturduklar› uygulamalar, veritaban› kavram›n›n da ötesine geçer ve kurumsal süreçlerin veritaban›yla bütünlefltirildi¤i sistemler haline gelir. ERP yaz›l›mlar›, genel olarak, herhangi bir kuruluflun, finans, insan kaynaklar›, muhasebe, malzeme tedariki, üretim planlama, stok denetimi gibi faaliyetlerinin, bütünleflik bir sistem halinde yürütülmesini sa¤lar. Örne¤in, yap›lan bir siparifl durumunda, stok kontrol edilir, gerekli üretim planlan›r ve stokta olmad›¤› için siparifl edilen malzemelerin tedarikinden sonra üretim gerçeklefltirilir. Her ad›m, veritaban›nda bir dizi verinin sorgulanmas› ve sonuçlara göre yeni verilerin üretilmesine neden olur. Bütün faaliyetler, veritaban›nda depolanan veriler üzerinden gerçeklefltirilir ve her ad›mda yöneticilere üretim maliyetleri, malzeme fiyatlar› gibi bilgiler aktar›l›r. 1980 ve 1990’larda, veritaban› uygulamalar›, genellikle s›n›rl› say›da kullan›c›n›n kulland›¤› ve veritaban› üzerindeki yükün s›n›rland›r›labildi¤i sistemlerdi. Uygulama yaz›l›mlar›, masaüstünde çal›flan programlard› ve sunucu/istemci mimarisinde haz›rlanm›fllard›. 2000’li y›llara do¤ru web siteleri de veritaban› destekli çal›flmaya bafllar. Web sayfalar›ndaki dinamik içerik veritaban›ndan getirilerek kullan›c›lara

1. Ünite - Veritaban› Uygulamalar›

sunulur. Ancak, ‹nternet, veritaban› yönetim sistemleri için zorlay›c› bir unsur olmufltur. Ne kadar kullan›c›n›n web sitesine girece¤i ve dolay›s›yla veritaban› yönetim sistemi üzerinde yarataca¤› yük önceden bilinememektedir. Web üzerinden çal›flan ilk uygulamalar, afl›r› talep durumlar›nda duraklama ve yavafll›k yaflam›fllard›r.

Neden Veritaban› Kullan›yoruz? Arkadafllar›n›z›n ad, soyad ve telefon numaralar›n› tutaca¤›n›z bir dosyay› bilgisayar›n›z›n masaüstünde oluflturdu¤unuzu ve içine baz› bilgiler koydu¤unuzu düflünelim. Yaratt›¤›n›z dosya bir veritaban› olarak de¤erlendirilebilir. Bir arkadafl›n›z›n telefon numaras›n› arad›¤›n›zda, dosyay› metin editörü içinde açman›z ve kiflinin ismini dosyada arayarak numaraya eriflmeniz mümkündür. Dosya büyüdükçe ve dolay›s›yla içindeki kay›t say›s› artt›kça, aranan bilgiye eriflme zaman› uzayacakt›r. Zaman›n›z›n de¤erli oldu¤unu düflünürerek, bilgisayar programc›s› olan bir arkadafl›n›za dosya üzerinde arama yapan bir program yazd›rd›¤›n›z› düflünelim. Dosyan›n biçimi ve içindeki verilerin birbirinden nas›l ayr›laca¤›, di¤er bir deyiflle telefon numaralar›n›n ve bilgilerin sat›rlardan nas›l ayr›laca¤› konusu haz›rlad›¤›n›z program içinde sabit bir flekilde tan›mlanmal›d›r. Uygulamay› her çal›flt›rd›¤›n›zda, program dosyaya giderek istedi¤iniz kifliyi aramaktad›r. Gereksinimleriniz artt›kça, ek bir özellik olarak telefon numaras› yan›na kiflilerin adreslerini de eklemek istedi¤inizde, adres dosyas›yla birlikte program›n›z› da güncellemek zorunda kal›rs›n›z. Dosya veri biçimi her de¤iflti¤inde uygulamalar›n gözden geçirilmesi, uygulamadan elde etti¤iniz fayday› azalt›r. Veri biçimi ve uygulamalar›n güncellenmesi konusundaki ikilemin çözümü, iliflkisel veritaban› yönetim sistemi (VTYS) kullanmakt›r. VTYS’ler, verinin nas›l depoland›¤› konusunu uygulamalardan gizler. Uygulamalar›n yapmas› gereken, bir sorguyu yaparken veya de¤iflikli¤i gerçeklefltirirken baz› komutlar› VTYS’e aktarmak ve dönen sonuçlar› ekranda kullan›c›ya göstermekle s›n›rl›d›r. VTYS kullan›ld›¤›nda, veritaban› yap›s›nda yap›lan de¤ifliklikler, uygulamalarda büyük çapta de¤ifliklik yap›lmas›n› gerektirmez. Verinin nas›l depoland›¤› ve hangi dosyalar içinde bulundu¤u, uygulamalardan gizlenir. VTYS kullan›l›rsa, uygulamalardaki hatalar nedeniyle, dosyaya verilerin yanl›fl flekilde yaz›lmas› durumu gerçekleflmez. Bu flekilde, veritaban›ndaki verilerin tutarl› kalmas› sa¤lan›r. VTYS’lerin di¤er bir özelli¤i de, veriler için bir güvenlik mekanizmas› sa¤lamas›d›r. Uygulamalar, veritaban›ndaki bilgi öbeklerine eriflimlerini flifreyle gerçeklefltirirler. Yetkisiz eriflimlerin engellenmesi, verilerin do¤rulu¤unu sa¤lama aç›s›ndan önemlidir. Veritaban› yönetim sistemlerinin sa¤lad›klar› avantajlar flöyle özetlenebilir: 1. Veritaban› içindeki verilerin tutarl›l›¤›n› sa¤lamas› 2. Veritaban› kullanan uygulamalar›n gelifltirilmesi için gerekli zaman› k›saltmas› 3. Uygulamalar›n, ufak de¤iflikliklerle farkl› veritaban› yönetim sistemlerine tafl›nabilmesi 4. Yetkisiz eriflimlerin engellenmesi ve veri güvenli¤inin sa¤lamas› 5. Verinin yönetimini yapabilmesi ve h›zla veri modelini de¤ifltirebilmesi Ancak, veritaban› yönetim sistemlerinin avantajlar› kadar dezavantajlar› da vard›r. VTYSler, büyük miktarda ve karmafl›k verilerin depolanmas› ve kullan›lmas› için tasarlanm›fllard›r. Basit uygulamalar için oldukça karmafl›k olabilirler. Uygulama gelifltirmek için, veritaban› yönetim sistemleri üzerine bilgi edinmek ve hatta

9

10

Veritaban› Uygulamalar›

e¤itim almak gerekebilir. Ayr›ca, veritaban› yönetim sisteminde gerçekleflen bir hatada bütün uygulamalar durabilir.

VER‹TABANI TÜRLER‹ VE UYGULAMALARI Veritabanlar›, büyük miktarda verinin topland›¤› ve verinin bilgiye dönüfltürülmesinin gerekti¤i her alanda kullan›labilir. VTYS’lerinin yayg›nlaflmas› ve üzerinde çal›flan donan›mlar›n ucuzlamas›, veritaban› uygulamalar›n›n da yayg›nlaflmas›na olumlu etkide bulunmufltur. Veritaban› uygulamalar› içinde, flirketlerin ve kurumlar›n iflletimi için kullan›lan veritabanlar› en büyük grubu oluflturulur. ‹flletme veritabanlar›, göreceli olarak yüksek say›daki ifllemi kaydederler ve verileri de¤ifltirirler. Dünya üzerindeki büyük flirketlerin, iflletmelerini iyi flekilde yönetmek için kulland›klar› veritaban› sistemleri bulunur. Örne¤in, müflterilerinin verilerini kaydederken, insan kaynaklar› sistemleriyle çal›flanlar›n›n kay›tlar›n› tutarlar. Üretim süreçlerinde kullan›lan veritaban› uygulamalar›, flirketlerin etkin ve denetimli flekilde iflletilmelerini sa¤lar. ‹flletme veritabanlar› için, genellikle o andaki veri önemlidir. Veritaban›nda yer alan stok bilgilerinin bir hafta önce ne oldu¤undan çok, o anda hangi verileri içerdi¤i iflletme için daha önemlidir. Veri ambarlar›, tarihsel içerikli verileri depolayan veri merkezleridir. Verilerin tarihsel olarak de¤ifliminin incelenmesi ve verilerdeki de¤iflimin incelenerek bilgiye dönüfltürülmesi, veri ambarlar›n›n temel kurulufl amac›d›r. Bir ma¤azan›n iflletim veritaban›ndan al›nan tarihsel veri, o ma¤azan›n giderek daha fazla ifl yapt›¤›n› m› yoksa gidererek azalan bir sat›fl çizgisi yakalad›¤›n› m› belirlememizi sa¤layabilir. Uygulamalardan biri olan veri madencili¤i (data mining), çok büyük veri y›¤›nlar› içinden çeflitli bilgilerin türetilmesini sa¤lar. Veri madencili¤i bir çok farkl› kökenden veri kayna¤›ndan veri al›nmas›n› ve bu veriler aras›ndaki iliflkilerin bulunmas›n› hedefler. Örne¤in, hava durumu ölçümlerinin, ülkenin ekonomik verilerinin ve bir market zincirinde bütün müflterilerin yapt›¤› al›flverifl kay›tlar›n›n bir araya topland›¤›n› düflünelim. Hava durumu ve sat›fl rakamlar› aras›ndaki iliflki, ma¤aza zincirinin kampanya düzenleyece¤i zamanlar› belirlemesine yarayabilir. Çevrimiçi analitik ifllem (OLAP: Online Analytical Processing), iliflkisel raporlama ve veri madencili¤ini içeren veritaban› uygulamas›d›r. OLAP uygulamalar›, büyük miktarda çok boyutlu veri üzerinde yap›lan analizleri ve raporlamalar› içerir. Çok boyutlu veriye h›zl› bir flekilde eriflmek ve büyük miktarlardaki veriyi iflleyebilmek için, geleneksel iliflkisel veritaban› modelinden daha farkl› modeller kullan›l›r. Çevrimiçi ifllem (online transaction) veritabanlar› (OLTP: Online Transaction Processing Database) çok say›da kullan›c›n›n veritaban›na ayn› anda ulaflmas›n› sa¤layan bir uygulamad›r. OLTP, küçük verilerin veritaban›ndan h›zl› bir flekilde al›nmas›n› ve verilerin veritaban›na h›zl› bir flekilde yaz›lmas›n› gerektirir. Bir çevrim içi al›flverifl sitesinin veritaban› OLTP veritabanlar›na güzel bir örnektir. Da¤›t›k veritabanlar›, verilerin tek bir yerde tutulmas› yerine, da¤›t›k flekilde farkl› sunucular üzerinde depolanmas›na ve birbirine bilgisayar a¤lar› üzerinden ba¤lanmas›na dayan›r. Böyle bir yap›n›n iki temel amac› bulunur. Birincisi, verinin kopyalar›n›n ç›kar›larak farkl› sunuculara aktar›lmas›, bu flekilde verinin fiziksel güvenli¤inin sa¤lanmas›d›r. ‹kincisi, birbirinden göreceli olarak ba¤›ms›z olarak çal›flan ama tek bir veritaban› içinde yer alan veri öbeklerinin, kullan›ld›klar› tesislerdeki sunucularda tutulmas›d›r. Örnek olarak, üretimle ilgili veritaban›n›n üretim tesisinde bulunmas› ve muhasebe veritaban›n›n flirket merkezinde tutulma-

1. Ünite - Veritaban› Uygulamalar›

s› verilebilir. Da¤›t›k veritabanlar› kullanman›n çeflitli avantajlar› bulunur: 1) verinin birden fazla kopyas›n›n tutulmas› nedeniyle felaket durumlar›na daha dayan›kl›d›r. 2) daha fazla sunucu kullan›ld›¤›ndan daha h›zl›d›r. 3) kapasitesi yüksek tek bir bilgisayar yerine, daha düflük kapasiteli çok say›da sunucunun kullan›lmas›n›n maliyeti daha düflüktür. 4) da¤›t›k sistemde yer alan bir veritaban›n›n durdurulmas›n›n di¤er veritabanlar›na ba¤l› otomasyon yaz›l›mlar›n› etkilememesidir. 2009 y›l›nda, bir cep telefonu operatörünün ‹stanbul’daki tesislerinde gerçekleflen su bask›n›nda, sunucu altyap›s› sular alt›nda kalm›fl ve bir süre hizmet vermemifltir. Da¤›t›k veritaban› yap›s› kullan›lsayd›, çöken altyap›n›n farkl› yerlerdeki kopyalar›, kesintiye neden olmadan görevi devralabilirdi. Gömülü veritabanlar›, özel bir amaca göre tasarlanm›fl bilgisayarlar üzerinde çal›fl›rlar. Örne¤in, bir uçakta yer alan seyrüsefer sisteminde, uçaktaki bütün sensörlerden al›nan bilgilerin kaydedildi¤i bir veritaban› bulunur. Uça¤›n konumu, yak›t harcama oranlar› ve benzeri veriler, bu veritaban›nda tutulur ve gerekti¤inde sorgulan›r. Cep telefonlar› ve mobil cihazlar içinde de gömülü veritabanlar› bulunmaktad›r. Örne¤in, bir cep telefonu içinde telefon ve adres verilerinin tutuldu¤u alanda kifli adlar›na göre sorgulama yapmak, gömülü veritaban› uygulamalar›ndan biridir. Medya veritabanlar›, video ve resim gibi çoklu ortam dosyalar›n› depolayan sistemlerdir. Özellikle, 2000’li y›llar›nda bafl›ndan itibaren sabit disk teknolojilerinin daha fazla kapasite sa¤layacak flekilde geliflmesi, yüksek kapasite gerektiren medya dosyalar›n›n da saklanabilmesini sa¤lam›flt›r. Youtube, Picasa gibi sistemler, çok say›da medya dosyas›n› sistemlerinde depolayabilmekte ve kullan›c›lar›na sunabilmektedir.

Veri Modelleri Veri modelleri, di¤er bir deyiflle verilerin birbirleriyle olan iliflkilerinin belirlenmesi bilgisayar sistemlerinin ilk gelifltirildi¤i y›llardan itibaren gündemde olan bir konudur. ‹lk veri modellerinde, verileri depolamak için dosyalar kullan›l›rd›. Dosya sistemi çerçevesinde, veri öbekleri ayr› dosyalarda depolan›r ve dosya dizinleri alt›nda yap›land›r›l›rd›. Verilerin tutuldu¤u dosyalar aras›ndaki iliflkilerin de¤erlendirilmesi sürecinde kullan›lan araçlar bu amaçla haz›rlanan programlard›. Yaz›lan program, aranan veriyi dosya içinde arar ve sonuçlar› kullan›c›ya gösterirdi. Dosyan›n yap›s› de¤ifltirildi¤inde ve yeni veri alanlar› eklendi¤inde, program›n yeniden düzenlenmesi gerekliydi. Di¤er bir veritaban› modeli, verilerin hiyerarflik anlamda düzenlenmesini gerektirir. Örne¤in, hiyerarflik olarak modellenmifl co¤rafi bilgi veritaban› örne¤i fiekil 5’te gösterilmektedir. Bir köyle ilgili bilgilere eriflmek için, ilk önce ülkesini, ard›ndan ilini ve ilçesini bulmak gerekmektedir. Hiyerarflik düzende, köye iliflkin bilgiye do¤rudan ulaflmak mümkün de¤ildir. Bu modelin en önemli özelli¤i, veriler aras›nda birden-çok tipinde modellemeyi mümkün k›lmas›d›r. Örne¤in, bir ülkenin alt›nda birden fazla co¤rafi bölge olabilir. Bir ilçeye ba¤l› birden fazla köy bulunabilir. Ancak, çoktan-çoka verilerde, hiyerarflik düzen çal›flmamaktad›r. Çoktançoka verilere örnek olarak, bir kiflinin birden fazla derne¤e üye olmas› verilebilir.

11

12

Veritaban› Uygulamalar›

fiekil 1.5 Ülke

Hiyerarflik Veritaban› modeli

Bölge

‹l

‹lçe

Bucak

Köy

Mezra

Çoktan-çoka olan modellemelerde, hiyerarflik düzenin kullan›lamamas›, hiyerarflik modelden, a¤ veritaban› modelinin türetilmesine yol açm›flt›r. Hiyerarflik model ters a¤aç flekli iliflkileri tan›mlamak için yeterliyken, a¤ modelinde bir örgü yap›s› görülmektedir. fiekil 6’da bina veritaban› görülmektedir. Bir binan›n hem bir caddeye cephesi varken, di¤er bir cephesi o caddeye aç›lan bir sokakta olabilir. Ayn› bina, iki farkl› tablodaki verilerle ayn› anda iliflkilidir. Hiyerarflik modelde tan›mlanmas› zor olan bunun benzeri durumlar, a¤ modelinde çözümlenmifltir. fiekil 1.6 A¤ modeline dayal› bina veritaban›

Hiyerarflik veritaban› modelindeki en önemli koflul, bir kayda ulafl›rken hiyerarflinin üst bölümlerinden alt bölümlerine do¤ru inme gereklili¤idir. Di¤er bir deyiflle, hiyerarfli a¤ac›nda daha genel olan üst bölümlerBina den daha özel olan alt k›s›mlara inilerek aranan veriye ulafl›lmaktad›r. Hiyerarflik yap›, veri organizasyonunu daha yap›sal hale getirmesine ra¤men, arama iflleminin yavafllamas›na neden olur. fiekil 5’te gösterilen veritaban›nda, bir köyün aranmas› iflleminde aramay› h›zland›rmak için, hiyerarfliyle u¤raflmadan, do¤rudan köyle ilgili tabloda arama yap›lmas› gereklidir. ‹flte, bu amaç do¤rultusunda iliflkisel veritaban› modeli gelifltirilmifltir. ‹liflkisel veritabanlar›nda, kay›tlar›n birbirleriyle olan iliflkileri her bir kay›da verilen numaralar›n, di¤er veri öbeklerinde kullan›lmas›yla sa¤lanmaktad›r. ‹liflkisel veritabanlar›n›n nas›l kuruldu¤unu gösterebilmek için, bir hastane bilgi sisteminde yer alan randevu sistemini düflünelim. Her bilgi öbe¤ine tablo ad›n› verelim. Doktorlar tablosunun, doktorlarla ilgili çeflitli verilerle birlikte her doktora verilen eflsiz (unique) bir numaradan olufltu¤unu düflünelim (fiekil 7). Di¤er yandan, hasta bilgilerinin ve hastaya verilen eflsiz kay›t numaras›n›n da benzer flekilde hastalar tablosunda yer ald›¤›n› varsayal›m (fiekil 8). Randevu tablosu, hastalar ve doktorlar tablolar›n› iliflkilendiren bir bilgi öbe¤idir (fiekil 9). Eflsiz olarak veSokak

Cadde

13

1. Ünite - Veritaban› Uygulamalar›

rilen numaralara, birincil anahtar (primary key) ad› verilmektedir. Her kay›tta, doktorun ve hastalar›n eflsiz numaralar› ve randevu tarihi yer almaktad›r. Örne¤in, ilk kay›tta doktor_no olarak görülen 1717, doktorlar tablosunda “Murat Aflc›”ya karfl›l›k gelmekte, hastan›n da Ahmet Taflç› oldu¤u görülmektedir. Her kayda verilen eflsiz numaralar üzerinden kurulan iliflkiler, iliflkisel veritaban›n›n temelini oluflturmaktad›r (fiekil 10). doktor_no

ad

soyad

diploma_no

1717

Murat

Aflc›

7748585

4103

Kemal

Taner

8527724

3383

Burçin

Kozak

4137498

1239

Mustafa

Ece

2552176

hasta_no

ad

soyad

boy

kilo

6672

Ahmet

Taflç›

175

9

9947

Deniz

Çoker

167

45

1842

Mehmet

Türker

154

68

5211

Mustafa

Ece

162

88

rand_no

dok_no

has_no

saat

88684

1717

6672

12:30

10938

1717

5211

12:45

18828

3383

1842

13:00

51358

4103

9947

13:30

Tablo 1.7 Doktorlar tablosu

Tablo 1.8 Hastalar tablosu

Tablo 1.9 Randevu tablosu

fiekil 1.10 randevu

doktorlar

rand_no: NUMBER dok_no: NUMBER has_no: NUMBER saat: DATETIME

doktor_no: NUMBER ad: VARCHAR soyad: VARCHAR diploma no: VARCHAR

hastalar hasta_no: NUMBER ad: VARCHAR soyad: VARCHAR boy: NUMBER kilo: NUMBER

‹liflkisel veritabanlar›nda tutarl› veriler oluflturmak için çeflitli kurallar konulmas› gerekebilir. Hastalar ve doktorlar tablolar›ndaki ad ve soyad kolonlar›n›n alfabetik karakterlerden oluflmas› ve kesinlikle bofl olmamalar› da verilerin geçer-

‹liflkisel veritaban› örne¤i

14

Veritaban› Uygulamalar›

lili¤ini sa¤layabilir. Randevu tablosunda, bütün alanlar›n dolu olmas› di¤er bir kofluldur. Örne¤in, randevu tablosundaki bir kay›tta hastan›n numaras›n›n olmamas›, geçersiz bir kay›t oldu¤unu gösterir. Her hastan›n ve doktorun kay›t numaralar› eflsiz olmal›d›r. Bir ya da daha fazla doktorun ayn› numaray› almas›, randevu tablosunda s›k›nt› ç›karacak, randevunun gerçekten hangi doktordan al›nd›¤› bilinmeyecektir. VTYS’leri, yeni bir kay›t eklenirken, bu ve benzeri durumlar› kontrol edecek mekanizmalara sahiptir. Tablo, kullan›c› taraf›ndan VTYS üzerinde oluflturulurken, hangi kolonda ne tür bir verinin beklendi¤i tan›mlanabilir. Eflsiz olmas› gereken kolonlar, bofl olmamas› gereken alanlar›n hepsi, tablonun yarat›lmas› s›ras›nda tan›mlan›r ve VTYS konulan kurallar› tabloya yeni kay›t eklendi¤inde iflletir. Geçersiz bir kay›t eklenmeye çal›fl›ld›¤›nda, kayd› eklemez ve kullan›c›ya hata mesaj› döndürür. Veritaban› yönetim sistemlerinin, sorgular› etkin ve h›zl› bir flekilde gerçeklefltirmek için verilere eriflimi h›zland›rmas› için kullan›lan yönteme indeksleme ad› verilir. ‹nsanlar da, veritaban› yönetim sistemleri gibi ellerindeki veriye eriflimi h›zland›rmak için çeflitli yöntemler kullan›l›rlar. Örne¤in, bir grup flehrin içinde baz› flehirlerin nüfuslar›na gerek duyuluyorsa, yap›lacak en ak›lc› düzenleme, flehirleri harf s›ras›na sokmakt›r. Bu flekilde, aranan flehrin nüfus bilgileri en h›zl› flekilde elde edilebilir.

‹L‹fiK‹SEL VER‹TABANI YÖNET‹M S‹STEMLER‹N‹N SORUNLARI

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

Veritabanlar›, her çeflit uygulamada kullan›labilen genel amaçl› yap›lar olmas›na ra¤men, baz› özel durumlarda istenen baflar›m de¤erlerini gösteremezler. En büyük sorunlardan biri, VTYS’lerinin çevrimiçi sistemlerde yaflad›klar› sorunlar oluflturur. Çevrimiçi sistemlerde, özellikle web temelli uygulamalarda kullan›c› say›s›na ve yap›lan ifllem miktar›na s›n›rlama getirilmedi¤i sürece, veritaban› sistemleri afl›r› yüklenebilir ve uygulama yaz›l›mlar›na cevap vermekte zorlanabilirler. Verilerin güvenli¤inin sa¤lanmas› ve eriflim kontrolü, veritaban› yönetim sistemlerinin karfl›laflt›klar› önemli sorunlardan biridir. Web temelli çal›flan sistemlerin say›s› artmakta, arkadaki veritabanlar›nda yer alan verilerin güvenli¤inin sa¤lanmas› daha riskli olmaktad›r. Veri miktar›n›n art›fl› ve büyük veri kümeleriyle çal›flmak, VTYS’lerinin karfl›laflt›klar› sorunlar›n bir di¤eridir. Büyük veri kümeleri üzerinde yap›lan sorgularda yan›t süresinin uzamas›, uygulama yaz›l›mlar›n› kullanan kiflilerin bilgiyi geç elde etmesine neden olur. Her bilgisayar sisteminin, ifllem kapasitesinde fiziksel s›n›rlar bulunur. S›radan bilgisayarlar›n bile saniyede yapabilecekleri ifllem miktar› çok yüksek olsa da, sabit disk gibi girifl ç›k›fl birimlerine olan eriflimlerdeki s›n›rlar veritaban› baflar›m›n› s›n›rland›r›l›r. Veritaban› performans›, merkezi ifllem biriminin (CPU) h›z›ndan daha çok, çevre elemanlar›n›n h›z›yla s›n›rl›d›r. Çünkü, veritaban› dosyalar› genellikSIRA S‹ZDE le sabit disklerde veya harici depolama birimlerinde saklan›r. Çok say›da kullan›c›n›n veritaban›nda sorgulama yapmas›, depolama birimlerinde yer alan veritaban› dosyalar›na miktar›n› art›raca¤›ndan yavafll›k yaflanmas› sorununu D Ü fi Ü N Eeriflim L‹M yaratabilir. Büyük veri kümeleriyle çal›flman›n VTYS’inde sorun yarataca¤› unutulmamal›d›r. Büyük miktarda verinin sabit disklerde tutulmas›, sorgulamalar›n sabit S O R U disklere eriflim miktar›n› art›rmas›, toplam baflar›m seviyesini azaltmaktad›r. Veritaban› Yönetim D ‹ K K A TSistemlerinin çal›flt›¤› sunucu bilgisayarlara, yüksek h›zl› depolama sistemleri veya sabit diskler tak›lmas› performans› art›r›r.

N N

SIRA S‹ZDE

AMAÇLARIMIZ

1. Ünite - Veritaban› Uygulamalar›

Efl zamanl› eriflimlerde, veritaban›ndaki verilerdeki tutarl›¤›n›n bozulmas› durumu karfl›lafl›lan sorunlardan biridir. Örne¤in, bir uçak rezervasyon/check-in sisteminde iki kullan›c›n›n, uçaktaki bofl koltuklar› gösteren ekrana girdiklerini varsayal›m. ‹ki kullan›c›n›n da, 17-F koltu¤unu iflaretleyerek, check-in ifllemini ayn› anda yapmaya çal›flt›klar›n› düflünelim. Bu koltu¤un her iki kullan›c›ya da ayr›lmas› durumunda, verilerde tutars›zl›k görülecek ve bir koltuk birden fazla kifliye sat›lm›fl olacakt›r. Uygulama gelifltiricilerinin, özellikle çok kullan›c›l› çevrim içi uygulamalarda karfl›lafl›labilecek bu tür sorunlar› çözmek için dikkatli olmas› gerekmektedir. Çok kullan›c›l› sistemlerde veri tutars›zl›¤› sorununu çözmek için, VTYS’lerinde yer alan kay›tlar› kilitleme (lock) ve birden fazla komutun ayn› grupta iflletilmesini sa¤layan hareket (transaction) özelliklerinin kullan›lmas› gerekmektedir. Örne¤in, uçak check-in sisteminde, 17-F koltu¤unu iflaretleyerek seçen kifli, 17-F koltu¤uyla ilgili kayd› di¤erlerinin eriflimini engellemek için kilitler. Di¤er kifli ayn› koltu¤u iflaretlemeye çal›flsa da sistem kay›t kilitli oldu¤u için izin vermez. Kilitleme özelli¤i ile, ayn› koltu¤un birden fazla kifli taraf›ndan al›nmas› engellenmekle birlikte, ifllemin yaratt›¤› muhtemel baz› sorunlar da vard›r. E¤er, yaz›l›mdaki bir hata nedeniyle, kald›r›lmas› gereken kilit kald›r›lmazsa, koltuk kullan›lmaz duruma gelebilir. Kilitleme iflinin oluflturdu¤u ikinci sorun da, bu ifllemin VTYS için bir ek bir ifllem anlam›na gelmesidir. Çünkü VTYS’i tabloda yap›lacak her ifllem için öncelikle kilitli olan kay›tlar› dikkate almaya çal›flmakta ve bu da genel performans› düflürmektedir. Veritaban›na eriflim yetkisinin kimlerde olaca¤›, verilerin kimler taraf›ndan sorgulanabilece¤i ve kimlerin veri de¤ifltirme veya ekleme yetkisinin olaca¤› sorunu, uygulama gelifltiricileri için çözülmesi gereken sorunlardan biridir. Veritaban› Yönetim Sistemleri kullan›c› tan›mlama ve her tablo için yetkilendirme olana¤› sa¤lamaktad›r. Ancak, uygulama gelifltiricileri, genellikle veritaban› eriflimlerini bir kaç kullan›c› tan›mlayarak ve bu kullan›c›lar üzerinden uygulama yaz›l›mlar›na yapt›rmay› tercih ederler. Bu flekilde kullan›c› veritaban›ndaki ayr›nt›lardan soyutlan›r. Veritaban›na kullan›c›lar›n do¤rudan eriflimlerini engellemek ve uygulama yaz›l›mlar› üzerinden ifllemleri gerçeklefltirmenin di¤er bir avantaj› da, verilerdeki tutarl›l›¤› sa¤lamakt›r. Az önce bahsi geçen, havayolu check-in sistemini örnek verirsek, bir check-in ifllemi, birden fazla tabloda arka arkaya ve her ad›mda bir önceki aflamadaki sonuçlar›n kullan›ld›¤› bir dizi ifllem yapmay› gerektirebilir. Bu anlamda, uygulama yaz›l›mlar› üzerinden veritaban›na eriflim, hem güvenli¤i hem de verinin tutarl›l›¤›n› sa¤lamas› aç›s›ndan önemlidir. Art›k günümüzde, yap›land›r›lm›fl veriler d›fl›nda düzgün bir yap›s› olmayan verilerin depolanmas› ve üzerinde arama iflleminin gerçeklefltirilmesi de gerekli olmaya bafllam›flt›r. Web’de bulunan milyarlarca web sayfas› içinde kelimelerin aranmas› bunun en güzel örne¤idir. Web sayfalar›n›n belirli bir düzeni yoktur ve içinde kelimelerin ve kelime gruplar›n›n aranmas› d›fl›nda yap›labilecek çok az fley vard›r. Metin halinde bulunan verilerle u¤raflmak, düzgün yap›l› veriler için tasarlanm›fl veritaban› yönetim sistemleri için oldukça zor bir ifltir. VTYS üreticisi firmalar, metin içinde kelime arama ve metin içindeki anahtar kelimeleri indeksleme iflleri için çeflitli ekler gelifltirmektedirler.

15

16

Veritaban› Uygulamalar›

Özet

N A M A Ç

1

N A M A Ç

2

‹liflkisel veritaban›n›n hangi uygulamalarda yararl› oldu¤una karar verebileceksiniz. ‹liflkisel veritaban› modeli, günümüzde kullan›lan bir çok veritaban› uygulamas›nda baflar›yla kullan›lmaktad›r. Veri tekrar›n› engelleyecek flekilde verilerin birbiriyle iliflkili tablolarda tutulmas›, sorgu h›z›n› art›rmakta ve veritaban› performans›n› yükseltmektedir. ‹liflkisel veritaban› uygulamalar›n› di¤er veritaban› türlerinden ay›rabileceksiniz. Hiyerarflik ve a¤ modellerinde, çoktan çoka veri modellerinde s›k›nt›lar yaflanmakta ve iliflkisel veritaban› modeli daha iyi sonuç vermektedir. Ancak, biribirine ba¤l› binlerce tablonun bulunmas› ve çok say›da tabloyu ilgilendiren sorgulamalarda, örne¤in veri madencili¤i gibi uygulamalarda, iliflkisel veritaban› modeli iyi çal›flmamaktad›r. Bu nedenle, veri madencili¤i uygulamalar›nda farkl› modeller kullan›lmaktad›r.

N A M A Ç

3

N A M A Ç

4

Bir veritaban›n› oluflturan temel bileflenleri listeleyebilecek ve iliflkisel veritaban› yönetim sisteminin nas›l çal›flt›¤›n› aç›klayabileceksiniz. ‹liflkisel veritaban› sistemlerinde, veriler tablo ad› verilen yap›larda tutulur. Her tablo, farkl› say›da alandan veya di¤er bir deyiflle özellikten oluflur. Tabloya veri girilirken, alanlara karfl›l›k gelen de¤erler, o alan›n veri tipinde girilerek kay›tlar oluflturulur. Farkl› tablolar›n kolonlar› aras›ndaki iliflkiler, iliflkisel veritaban›n›n en temel tasar›m özelli¤idir. SQL diliyle yap›lan iflleri tan›mlayabileceksiniz. SQL (Yap›sal Sorgu dili), 1980’lerde gelifltirilen ve günümüzde yayg›n flekilde kullan›lan uluslararas› bir standarda dayal› veritaban› sorgu dilidir. Veritaban› yönetim sistemlerinin büyük bir k›sm›, SQL dilini standartlara uygun flekilde destekler. SQL diliyle, veritaban› ve içinde tablolar oluflturulabilir, farkl› koflullara dayal› sorgular kurulabilir, veritaban› veya tablo silinebilir, kay›t eklenebilir, silinebilir ve de¤ifltirilebilir. Bir kaç sat›rl›k komutlar sayesinde, veritaban›nda çok say›da kayd› ilgilendiren ifllemler kolayl›kla gerçeklefltirilebilir.

1. Ünite - Veritaban› Uygulamalar›

17

Kendimizi S›nayal›m 1. Afla¤›dakilerden hangisi bir veritaban› yönetim sistemidir? a. Microsoft Windows b. Excel c. Oracle d. Linux e. Unix

6. Bir tabloda, her kayda verilen eflsiz numaralara ne ad verilir? a. ‹ndeks b. Birincil anahtar c. ‹liflki d. Hiyerarflik veri modeli e. Raporlama

2. Afla¤›dakilerden hangisi bir iliflkisel veritaban› yönetim sisteminde yaflanabilecek sorunlardan biri de¤ildir? a. Kullan›c› say›s›n›n s›n›rland›r›lamad›¤› durumlarda, veritaban› yönetim sisteminin afl›r› yüklenmesi b. Tablolar aras›nda yaflanabilecek verilerin tutars›z lmas›o c. Metin üzerinde arama yapt›r›lmas› d. Tablolardaki eriflim yetkilerindeki s›k›nt›lar›n güvenlik sorunlar› yaflatmas› e. Tablolar›n ilgili kolonlar›nda indeksleme yap›lamamas›

7. Çevrimiçi analitik ifllem (OLAP: Online Analytical Processing) nedir? a. ‹liflkisel raporlama ve veri madencili¤ini içeren veritaban› uygulamas›d›r b. Veritaban› içinde yer alan ba¤›ms›z veri öbeklerinin incelenerek yeni bir veritaban› tasar›m› gelifltirilmesi sürecidir. c. Düzensiz ve büyük miktardaki veriyi bir araya getiren veritaban› uygulamas›d›r. d. Verilerin tutarl›l›¤›n› analitik flekilde çözen yöntemdir. e. Bir kuruluflun bütün verisini tutan veritaban› uygulamas›d›r.

3. PostgreSQL Veritaban› yönetim sisteminde kullan›lan dördüncü nesil programlama dili afla¤›dakilerden hangisidir? a. C# b. PL/pgSQL c. PL/SQL d. Pyton e. Visual Basic 4. Hiyerarflik veritaban› modelinin kullan›lamad›¤› durum afla¤›dakilerden hangisidir? a. Tablolar aras›nda çoktan-çoka iliflki olmas› b. ‹ndeksleme yap›lmak istenmesi c. Dosya sisteminin verileri depolamaya müsait olmamas› d. Tablodaki kolonlar›n say›s›n›n çok büyük olmas› e. Veri miktar›n›n küçük olmas› 5. Veritaban› indeksleme nedir? a. Veritaban›nda yap›lan sorgulamalar› h›zland›ran bir yöntemdir. b. Veritaban›nda yer alan tablolar› tek bir tablo halinde getirme ifllemidir. c. Yedekleme yapmakt›r. d. Veritaban›n› da¤›t›k hale getirme sürecidir. e. Veritaban›na yeni kay›t ekleme süresini azaltan bir yöntemdir.

8. Afla¤›dakilerden hangisi, büyük miktarda veri bulunan bir veritaban› sunucusundaki veritaban› eriflim h›z›n› art›rmaz? a. Sisteme daha h›zl› sabit diskler takmak b. Veritaban›n›n bir kopyas›n› alarak di¤er bir sisteme ayn› verileri yüklemek c. Sunucudaki merkezi ifllemci birimi say›s›n› art›rmak d. Bellek miktar›n› art›rmak e. A¤a ba¤lanmak için kullan›lan bak›r kabloyu b›rakarak fiber optik kalo takmak 9. Veri ambar› nedir? a. Tarihsel içerikli verileri depolayan veri merkezleridir. b. Çok say›da bilgisayar›n bulundu¤u merkezlerdir. c. Büyük depolama kapasitesine sahip bilgisayar a¤lar›d›r. d. Da¤›t›k depolama birimidir. e. Üzerinde ayn› anda birden fazla say›da VTYS çal›flt›r›lan bilgisayarlar›n oluflturdu¤u yap›d›r.

18

Veritaban› Uygulamalar›

S›ra Sizde Yan›t Anahtar› 10. SQL nedir? a. Sorgu yap›lmas›n› sa¤layan uygulama yaz›l›m›d›r. b. Bir veritaban› yönetim sistemidir. c. Birinci nesil programlama dilidir. d. Veritaban› ifllemleri için kullan›lan komut dillerinden biridir. e. Web üzerinde sorgulama yap›lmas›n› sa¤layan arama motorudur.

Kendimizi S›nayal›m Yan›t Anahtar› 1. c 2. e

3. b 4. a 5. a 6. b 7. a 8. e 9. a 10.d

Yan›t›n›z yanl›fl ise “Girifl” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “ ‹liflkisel Veritaban› Yönetim Sistemlerinin Sorunlar›” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Veritaban› Nedir?” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Veritaban› Türleri ve Uygulamalar›”bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Veritaban› Nedir?” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Veritaban› Nedir?” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Veritaban› Türleri ve Uygulamalar›”bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Veritaban› Türleri ve Uygulamalar›”bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Veritaban› Türleri ve Uygulamalar›”bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Veritaban› Nedir?” bafll›kl› bölümü tekrar inceleyiniz.

S›ra Sizde 1 Arkadafllar›n›z›n do¤um tarihleri, akrabalar›n›z›n isimleri ve yak›nl›k dereceleri, su ve elektrik hizmetleri dan›flma telefonlar› gibi önemli bilgiler, bilgisayar ortam›na konulabilecek kiflisel veritabanlar›d›r. S›ra Sizde 2 Oracle, IBM DB2, Microsoft SQL Server, PostgreSQL, MySQL, Apache Derby, Firebird, FrontBase, HSQLDB, Informix Dynamic Server, Ingres, InterBase, Microsoft Access, Microsoft Visual Foxpro, Msql, Openbase, Panaroma, SmallSQL, SQLLite, Teradata, TxtSQL, Unidata ve Valentina. S›ra Sizde 3 Arkadafllar›m›z›n adresleri ve do¤um tarihleri, telefon numaralar›. S›ra Sizde 4 Stokta tek kalan bir ürünü iki farkl› kiflinin ayn› anda al›flverifl sepetine eklemesi. S›ra Sizde 5 Banka hesab›nda 1000 TL bulundu¤unu ve iki görevli taraf›ndan bu rakam›n görüldü¤ünü düflünelim. Bir görevli 800 TL’sini bir di¤er hesaba gönderirken, di¤erinin ayn› anda 1000TL’yi baflka bir hesaba aktard›¤›n› düflünelim. Banka hesab›nda toplam 1000 TL olmas›na ra¤men, 1800TL’lik transfer yap›labilir.

1. Ünite - Veritaban› Uygulamalar›

Yararlan›lan ve Baflvurulabilecek Kaynaklar Raghu Ramakrisnan, Johannes Gehrke, “Database Management Systems”, ‹kinci bask›. P. Revesz (2010). Introduction to Databases. New York: Springer. L. Liu and T. Ozsu (2009). Encyclopedia of database systems, 1st ed. New York: Springer. R. Ramakrishnan and J. Gehrke, 2003. Database management systems, 3rd ed. Boston: McGraw-Hill. J. Erickson, (2009). Database technologies: concepts, methodologies, tools, and applications. Hershey, PA: Information Science Reference. PostgreSQL web sitesi: http://www.postgresql.org/ Wikipedia web sitesi: http://www.wikipedia.org/Database/

19

2

VER‹TABANI UYGULAMALARI

Amaçlar›m›z

N N N

Bu üniteyi tamamlad›ktan sonra; PostgreSQL yaz›l›m›n› herhangi bir bilgisayara kurabileceksiniz. PostgreSQL yaz›l›m›yla birlikte gelen ek yaz›l›mlar›n neler oldu¤unu listeleyebileceksiniz. PostgreSQL kurulumuyla birlikte Bafllat menüsüne eklenen programlar›n neler oldu¤unu aç›klayabileceksiniz.

Anahtar Kavramlar • PostgreSQL • Kurulum dosyas› • Dil kodlar›

• Veritaban› sürücüleri • PostGIS

‹çerik Haritas›

Veritaban› Uygulamalar›

PostgreSQL Kurulumu

• G‹R‹fi • POSTGRESQL KURULUM DOSYASININ ‹ND‹R‹LMES‹ • POSTGRESQL YAZILIMININ KURULUMU • POSTGRESQL YARDIMCI PROGRAMLARIN KURULUMU

PostgreSQL Kurulumu G‹R‹fi PostgreSQL aç›k kaynak kodlu bir iliflkisel veritaban› yönetim yaz›l›m›d›r. 1982 y›l›ndan beri gelifltirilmekte olan yaz›l›m, yayg›n olarak kullan›lmakta olan Windows, Linux ve Unix iflletim sistemlerini desteklemektedir. PostgreSQL yaz›l›m›, ticari veya ticari olmayan ürünlerde kullan›lmas›nda bir sak›nca olmad›¤›n› belirten BSD lisans›yla birlikte gelmektedir. BSD lisans›yla ilgili ayr›nt›l› bilgiler http://tr.pardus-wiki.org/BSD_Lisans› adresinden al›nabilir. Yaz›l›m›n ücretsiz olmas›, ticari yaz›l›mlar kadar h›zl› çal›flmas› ve kullan›m kolayl›¤› gibi özellikleri nedeniyle, bu kitapta PostgreSQL yaz›l›m› kullan›lm›flt›r. Yer alan örneklerin ve al›flt›rmalar›n tamam›, PostgreSQL v8.4 yaz›l›m› üzerinde denenmifl ve çal›flt›r›lm›flt›r. Bundan sonraki sürümlerde de, burada verilen örneklerin sorunsuz çal›flmas› beklenmelidir. Bu ünitenin konusunu, PostgreSQL yaz›l›m›n›n kurulumu ve yönetim yaz›l›m› üzerinde gerçeklefltirilen temel veritaban› ifllemleri oluflturmaktad›r.

POSTGRESQL KURULUM DOSYASININ ‹ND‹R‹LMES‹ PostgreSQL veritaban› yaz›l›m› bafllang›çta Linux ve Unix iflletim sistemlerini desteklerken sekizinci sürümünden itibaren Microsoft Windows deste¤i de getirilmifltir. Unix ve Linux versiyonlar›n›n kurulumu, bu ünitede anlat›lan kurulum sürecinden farkl› de¤ildir. SIRA S‹ZDE Kitab›n yaz›m› s›ras›nda kullan›lan, PostgreSQL’in 8.4.4 sürümü, yaz›l›m›n resmi sitesi olan http://www.postgresql.org/download/windows sayfas›ndan indirilmelidir. ‹lgili sayfada “One Click Installer” ba¤lant›s›ndan indirilecek D Ü fi Ü N E L ‹ M kurulum dosyas› olan “postgresql-8.4.4-1-windows.exe” yaklafl›k 41,21 Mbyte büyüklü¤ündedir. Yaz›l›m›n sürekli gelifltirilmesinden dolay›, çok say›da yeni sürüm sitede yaS O R U y›nlanmaktad›r. PostgreSQL yaz›l›m›n›, yaz›l›m›n resmi sitesi olan http://www.postgresql.org/ D ‹ K K A T adresinden indirin. Web’deki herhangi bir siteden indirmeniz durumunda, bu dosyayla birlikte gelebilecek zararl› yaz›l›mlar›n bilgisayar›n›za yüklenmesine neden olabilirsiniz. SIRA S‹ZDE AMAÇLARIMIZ

N N

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

K ‹ T A P

TELEV‹ZYON

TELEV‹ZYON

SIRA S‹ZDE

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

22

Veritaban› Uygulamalar› S O R U

S O R U

PostgreSQL sitesindeki beta sürümlerini indirmeyin. Beta sürümleri, yaz›l›m›n gelifltirme D‹KKAT aflamas›ndaki sürümleridir ve içinde yaz›l›m hatalar› bulunabilir.

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

N N

K ‹ T A P

SIRA S‹ZDE

POSTGRESQL YAZILIMININ KURULUMU

Kurulum dosyas› indirildikten sonra dosyan›n üzerine çift t›klayarak kurulum ifllemi bafllat›l›r. E¤er iflletim sistemi olarak Windows Vista veya Windows 7 kullaAMAÇLARIMIZ n›l›yorsa sistem sizden yetkilendirme isteyecektir (fiekil 1). E¤er kurulumun yap›laca¤› bilgisayarda yönetici yetkisine sahip de¤ilseniz sistem yöneticisiyle iletiflime K ‹ T A Pdevam edebilirsiniz (fiekil 2). geçerek kuruluma

fiekil 2.1 T E LPostgreSQL EV‹ZYON

TELEV‹ZYON

Kurulumu: Yetkilendirme izin ekran›.

‹NTERNET

fiekil 2.2 PostgreSQL Kurulumu: kurulum bafllang›ç ekran›.

‹NTERNET

S‹ZDE 2. ÜniteSIRA - PostgreSQL Kurulumu

SIRA S‹ZDE

Bir sonraki pencerede kurulum sihirbaz› size PostgreSQL yaz›l›m›n›n D Ü fi Ü N E L ‹ M kurulaca¤› dizini soracakt›r. Bu noktada eriflim izininiz olan ve yeterli disk alan›n›n bulundu¤u bir dizin seçmeniz do¤ru olacakt›r (fiekil 3). Kurulum dizini seçiminden sonS O R U raki ekranda verilerin saklanaca¤› dizin seçilecektir (fiekil 4).

D Ü fi Ü N E L ‹ M

D ‹ K sa¤l›kl› KAT Kurulum sonras›nda kullanma ihtiyac›n›z›n do¤abilece¤i baz› dosyalar›n çal›flmas› için kurulum dosyalar›n›n ve verilerin tutulaca¤› dizin yolunun içinde boflluk karakteri ve veri dizinibulunmamas› iyi olacakt›r. Bu sebeple kurulum dizinini “C:\PostgreSql\8.4” SIRA S‹ZDE ni “C:\PostgreSql\8.4\data” olarak de¤ifltirmelisiniz.

D‹KKAT

AMAÇLARIMIZ

K ‹ T A P

23

S O R U

N N

SIRA S‹ZDE

fiekil 2.3

AMAÇLARIMIZ

PostgreSQL Kurulumu: Dizin seçim ekran›.

K ‹ T A P

TELEV‹ZYON

TELEV‹ZYON

‹NTERNET

‹NTERNET

fiekil 2.4 PostgreSQL Kurulumu: Dizin seçim ekran›.

24

Veritaban› Uygulamalar›

Dizin seçim ekran›ndan sonra kurulum sihirbaz› veritaban› kullan›c› flifresi isteyecektir (fiekil 5). PostgreSQL veritaban› yaz›l›m› çal›flma an›nda otomatik olarak “postgres” kullan›c› ad›n› ve hesab›n› kullanmaktad›r. PostgreSQL veritaban› kullan›c›s› yani postgres hesab› e¤er sistemde daha önceden tan›mlanm›flsa, bu hesaba ait flifre girilmelidir. fiekil 2.5 PostgreSQL Kurulumu: Kullan›c› ad› ve flifre belirleme.

SIRA S‹ZDE

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

SIRA S‹ZDE S O R U

SIRA S‹ZDE S O R U

D Ü fi Ü N E L ‹ M D‹KKAT S O R U SIRA S‹ZDE D‹KKAT AMAÇLARIMIZ

SIRA S‹ZDE K ‹ T A P AMAÇLARIMIZ TELEV‹ZYON K ‹ T A P

‹NTERNET TELEV‹ZYON

‹NTERNET

D Ü fi Ü N E L ‹ M

KKAT Girilen flifreyiD ‹unutmamak için bir yere yaz›n›z. Ezberledikten sonra, flifrenin yaz›l› oldu¤u ka¤›d› imha ediniz. Veritaban›n›n flifresini bilen herkesin verileri silebilece¤i ve yetkiS O R U siz flekilde de¤ifltirebilece¤ini unutmay›n›z. SIRA S‹ZDE

N N

fiifre seçerken, D ‹ Ktahmin K A T edilemeyecek harf, rakam ve noktalama iflareti içeren bir dizi seçAMAÇLARIMIZ meniz, flifrenizin güvenli olmas›n› sa¤layacakt›r. fiifreler belirlenirken k›sa olmas›ndan, ayn› veya birbirini takip eden karakterler kullan›lmas›ndan ve sözlüklerde bulunan keliSIRA S‹ZDE melerden birinin seçilmesinden kaç›n›lmal›d›r. Örne¤in, “merhaba”, “123” veya “999999” ‹ T Atahmin P gibi flifrelerKkolay edilebilece¤inden, veritaban› yöneticileri için güvenlik sorunlaAMAÇLARIMIZ r› ç›karabilir.

N N

T E L E Vsistemleri ‹ZYON Veritaban› genellikle kurulu oldu¤u sunucu bilgisayar›n d›fl›ndaki K ‹ T Agelecek P uygulamalardan isteklere cevap verecek flekilde tasarlanm›fllard›r. Bu günümüzde en yayg›n biçimde kullan›lan sistem olan sunucu istemci mimari yap›s›d›r. Genellikle ‹ N T E R N E Tgünümüzde, bu mimarinin uygulamas› olarak, veritaban› suT E Lbir E V ‹bilgisayarda ZYON nucusu ayr› çal›flmakta ve istemciler a¤ üzerinden sunucuya eriflmektedir. Bu yap›n›n kullan›lmas›yla h›z, güvenlik ve güvenilirlik artt›r›lm›fl olur. Burada unutulmamas› gereken konu, sistemi d›flar›dan gelen ba¤lant›lara açman›n avantaj sa¤lamas›n›n yan›nda baz› güvenlik tehlikelerini de beraberin‹NTERNET de getirmesidir. Sistemin güvenli ve sorunsuz bir flekilde çal›flmaya devam etmesi için gerekli a¤ ayarlar› yap›lmal› ve bir güvenlik sistemi kurulmal›d›r. ‹flletim sisteminin ve antivirus yaz›l›m›n›n güncellemeleri sürekli olarak yap›lmal›, sistem kararl›l›¤› s›k s›k incelenmelidir.

SIRA S‹ZDE

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

2. Ünite - PostgreSQL Kurulumu S O R U

S O R U

Veritaban› sunucusunun, bir atefl duvar› arkas›nda tutulmas› verilerinD ‹güvenli¤inin ve tuKKAT tarl›l›¤›n›n sa¤lanmas› için önemlidir. SIRA S‹ZDE

D‹KKAT

N N

Veritaban› sisteminin kurulu oldu¤u sistemin d›fl›ndan gelecek ba¤lant›lar› kabul edece¤i port numaras›n› seçme aflamas› fiekil 6’te görülmektedir. Burada varsay›lan port numaras› kullan›labilece¤i gibi sald›r›lara karfl› AMAÇLARIMIZ güvenli¤i biraz daha artt›rmak için farkl› bir port numaras› da verilebilir. Zararl› yaz›l›mlar ve bilgisayar korsanlar›, varsay›lan portlara sald›rmay› tercih etmektedir. K ‹ T A P

TELEV‹ZYON

‹NTERNET

PostgreSQL veritaban› yönetim yaz›l›m› Türkçe dil kodunu desteklemektedir. Dil kodunun yanl›fl seçilmesi, Türkçe’de yer alan ve ‹ngilizce’de bulunmayan ›,ç,ö,ü,¤ gibi harflerin tan›nmamas›na ve sorgulamalarda sorun yaflanmas›na neden olacakt›r. Bu nedenle, dil kodunun Türkçe olarak seçilmesi önemli bir gerekliliktir. Dil kodu deste¤i sayesinde say› ve para birimi formatlar› ve karakter s›ralamas› özellikleri de ayarlanabilir. Dil kodu seçimi penceresi fiekil 7’de görülmektedir. Bu pencerede Türkçe (Turkish, Turkey) seçene¤i seçilerek kuruluma devam edilmelidir.

25

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

fiekil 2.6

PostgreSQL Kurulumu: T E Uzak LEV‹ZYON ba¤lant›lar için port belirleme. ‹NTERNET

26

Veritaban› Uygulamalar›

fiekil 2.7 PostgreSQL Kurulumu: Dil kodu seçimi.

SIRA S‹ZDE

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

S O R U

S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

TELEV‹ZYON

‹NTERNET

Türkçe dil kodunun D ‹ K K A Tseçilmesi, tablolara Türkçe karakterler içeren verilerin do¤ru flekilde eklenmesini ve ifllenebilmesini sa¤lamaktad›r.

N N

SIRA S‹ZDE

Oracle ve IBM DB2 gibi veritaban› yönetim sistemlerinde oldu¤u gibi PostgreSQL sisteminde de dördüncü nesil programlama deste¤i bulunmaktad›r. PostgreSQL için haz›rlanm›fl olan PL/pgSQL dilini kullanarak veritaban› yönetim sisteAMAÇLARIMIZ mi içinde çal›flacak programlar yazmak mümkündür. Bu programlar yordamsal SQL komutlar›n› çal›flt›rarak sonuçlar›n› tek bir seferde döndürürler. Böylece, uzak‹ Tistemcinin, A P ta bulunanKbir defalarca sorgulama yaparak uzun bir sürede ulaflabilece¤i sonuca daha k›sa bir sürede ulaflmas› sa¤lan›r. Veritaban› örneklerinde kullan›lacak olan flablona PL/pgSQL eklemek için dil seçimi ekran›nda “Install pl/pgsql T E L Edatabase” V‹ZYON in template1 iflaret kutusu iflaretlenmelidir. Bu seçim yap›ld›ktan sonra template1’in flablon olarak kullan›lmas›yla oluflturulan veritabanlar›nda PL/pgSQL deste¤i bulunur. Son ekran seçimler bittikten sonra kuruluma bafllamadan önceki ekrand›r. E¤er ‹NTERNET flimdiye kadar yap›lan seçimlerde bir de¤ifliklik yap›lmas› gerekiyorsa “Back” (geri) dü¤mesiyle önceki ekranlara dönülebilir ve kurulum parametreleriyle ilgili istenilen de¤ifliklikler gerçeklefltirilebilir. “Cancel” (iptal) tuflu ise kurulumu iptal edecektir. Son olarak “Next” (ileri) tufluna bast›¤›n›zda kurulum bafllayacakt›r. PostgreSQL yaz›l›m›n›n kurulumu bilgisayar›n›z›n h›z›na göre 2 ile 10 dakika aras›nda sürebilir (fiekil 8).

27

2. Ünite - PostgreSQL Kurulumu

fiekil 2.8 PostgreSQL Kurulumu: Kurulum bafllamadan önceki son ekran.

Veritaban› yönetim sistemini verimli olarak kullanabilmek için bir tak›m ek uygulamalar›n kurulmas› gerekebilir. Kurulum bittikten sonra gelen “Completing the PostgreSQL Setup Wizard” ekran›nda bu yaz›l›mlar› kurmak için kullan›lan “Application Stack Builder” program›n›n hemen çal›flt›r›lmas›n›n istenip istenmedi¤i sorulmaktad›r. ‹ste¤e göre “Application Stack Builder” program›, ilgili iflaret kutucu¤undan iflaret kald›r›larak daha sonra da çal›flt›r›labilir. Böylece kurulum baflar›yla tamamlanm›fl olur. Art›k, PostgreSQL veritaban› yönetim sistemiyle birlikte gelen yaz›l›mlara, iflletim sisteminin BAfiLAT menüsünden eriflilebilmektedir (fiekil 9). Menü, iflletim istemine göre farkl›l›k gösterse de içerik olarak bir farkl›l›k bulunmamaktad›r. Menü içerisindeki program k›sa yollar›n› incelersek; • Application Stack Builder: Veritaban› yaz›l›m›na ek olarak kullan›lan programlar›n kurulmas›na yarar. Bu yaz›l›mlar›n baz›lar› ücretsiz olabildi¤i gibi, baz›lar› da ticari ürünler olarak ücretlidir. • pgAdmin III: Veritaban› yaz›l›m›n›n yönetimle ilgili görsel ara yüzüdür. Program üzerinden, yeni veritaban› yaratabilir ve var olan veritabanlar›na yeni tablolar ekleyebilir. Veritaban› yönetim sistemiyle ilgili pek çok ifli gerçeklefltirebilir. • Reload Configuration: Veritaban› yap›land›rmas›nda yap›lan de¤iflikliklerin veritaban›n› durdurup tekrar bafllatmadan yüklenmesini sa¤lar. • Restart Server: Veritaban›n› durdurup yeniden bafllat›r. • SQL Shell (psql): Veritaban› komutlar›n›n el ile girilip çal›flt›r›laca¤› bir komut sat›r› penceresi açar. Veritaban› ba¤lant›s› ve program parçalar›n›n yaz›lmas› bu komut penceresinde gerçeklefltirilebilir. • Start Server: Durdurulmufl olan veritaban›n› bafllat›r. • Stop Server: Çal›flmakta olan veritaban›n› durdurur. • Documentation: Veritaban› ile ilgili kurulum, yönetim ve iflletim bilgilerini içeren dokümanlar› içerir.

SIRA S‹ZDE

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

28

Veritaban› Uygulamalar› S O R U

S O R U

D ‹büyük K K A T de¤ifliklikler yap›lacaksa ve de¤iflikliklerin yap›ld›¤› s›rada kullan›Veritaban›nda c›lar›n sisteme ba¤lanmamas› isteniyorsa, veritaban› durdurulmal›d›r. De¤ifliklikler bittikten sonra,SIRA Bafllat menüsünden “Start Server” t›klanarak, sunucu tekrar çal›flt›r›labilir. S‹ZDE

D‹KKAT

SIRA S‹ZDE

N N

fiekil 2.9 Bafllat AMAÇLARIMIZ

menüsündeki PostgreSQL dizini

AMAÇLARIMIZ

K ‹ T A P

K ‹ T A P

TELEV‹ZYON

TELEV‹ZYON

‹NTERNET

‹NTERNET

SIRA S‹ZDE

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

S O R U

S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

TELEV‹ZYON

‹NTERNET

D ‹ K K A TSistemi canl› bir sistem oldu¤u için, di¤er kullan›c›lara haber vermeVeritaban› Yönetim den durdurmak veya yeniden bafllatmak beklenmeyen sonuçlar verebilir. O an sistemde çal›flt›r›lmaktaSIRA olanS‹ZDE komutlar yar›da kalaca¤›ndan, durdurup bafllatma an›nda sistem isteklere cevap vermeyecektir. Bu anda istemciler taraf›ndan yap›lan istekler hata mesaj› alacak ve büyük olas›l›kla uygulama programlar› çal›flmamaya bafllayacakt›r. Çal›flmakta olan veAMAÇLARIMIZve yeniden bafllatmak için bir zaman aral›¤› belirlenmeli ve bu bilgi ritaban›n› durdurmak kullan›c›lara bildirilmelidir.

N N

K ‹ T A P POSTGRESQL YARDIMCI PROGRAMLARIN KURULUMU

Veritaban› yard›mc› programlar›n›n kurulumu “Bafllat” menüsünden “Application TELEV‹ZYON Stack Builder” seçilerek bafllat›l›r. E¤er Windows Vista veya Windows 7 iflletim sistemlerinden birini kullan›yorsan›z, bu program› farenin sa¤ tufluna basarak aç›lan ekrandan “Yönetici olarak çal›flt›r” sekmesini seçerek çal›flt›rman›z gereklidir. Aç›lan ekranda hangi yaz›l›m için kurulaca¤› seçilecektir. fiu an itiba‹ N Tek E R programlar›n NET riyle veritaban› yönetim yaz›l›m› kurulmufl oldu¤u için “5432 portu üzerinde PostgreSQL 8.4” seçilmelidir. Kurulum ifllemini gerçeklefltirmek için bilgisayar›n›z ‹nternet’e ba¤l› olmal›d›r.

29

2. Ünite - PostgreSQL Kurulumu

E¤er ‹nternet’e bir vekil (proxy) sunucusu üzerinden ç›k›yorsan›z, vekil sunucu bilgileri bu aflamada girilmelidir (fiekil 10). fiekil 2.10 “Application Stack Builder” ara yüzü.

Gerekli bilgiler girildikten sonra “Sonraki” dü¤mesine bas›larak, yard›mc› uygulamalar›n seçimine geçilir. Kurulabilecek uygulamalar a¤aç yap›s› alt›nda listelenmifltir. Bu aflamadaki kategoriler halindeki yard›mc› uygulamalar flunlard›r: Ek özellikler, araçlar ve yard›mc› programlar (Add-ons, tools and utilies) • Apple iPhone için pgPhoneHome (EnterpriseDB pgPhoneHome for Apple iPhone): pgPhoneHome EnterpriseDB firmas›n›n bir web uygulamas›d›r. Bu uygulamayla Apple iPhone ve iPod Touch gibi cihazlar ile web üzerinden ba¤lan›larak PostgreSQL veritaban› yönetimi s›n›rl› bir flekilde gerçeklefltirilebilir. Bu flekilde, veritaban› yöneticisinin mobil ortamda da veritaban›n› yönetmesi sa¤lanmaktad›r. Veritaban› Sürücüleri (Database Drivers): Çeflitli programlama dillerinde yaz›lan programlar›n ve uygulama çat›lar›n›n PostgreSQL veritaban›na ba¤lanabilmesi için gerekli sürücü yaz›l›mlar›n› içerir. fiekil 2.11 PostgreSQL Kurulumu: “Application Stack Builder” kategori seçimi.

30

Veritaban› Uygulamalar›

Kay›t gerektiren ekler (Registration-required add-ons): Bu bölümde bulunan programlar›n kurulabilmesi için programlar› sa¤layan EnterpriseDB firmas›na kay›t olmak gereklidir. • EnterpriseDB MySQL Migration Wizard: Ücretsiz olarak kullan›labilen di¤er bir veritaban› yönetim yaz›l›m› olan MySQL veritaban› yönetim yaz›l›m›ndaki tablolar›n PostgreSQL veritaban›na aktar›lmas›nda kullan›l›r. • EnterpriseDB Tuning Wizard for PostgreSQL: Sistemin yap›s›na ve kullan›lan donan›ma göre PostgreSQL veritaban›n›n performans›n› art›rmak için çeflitli ayarlar yapmak için kullan›l›r. Veritaban› kopyas› ç›karma çözümleri (Replication Solutions): • Slony-I for PostgreSQL : Bir sunucu ve sunucunun kopyas› olarak birden fazla ba¤›ml› makinenin oluflturdu¤u sisteme yedekli sistem denilmektedir. Ana makinenin herhangi bir nedenden dolay› hizmet d›fl› kalmas› durumunda onun yerine kopya ba¤›ml› makinelerden birisi çal›flmaya bafllayacakt›r. Birden fazla veritaban› sunucusunun kurularak yedekli çal›flma imkan›n›n bulundu¤u ortamlarda Slony-I eklentisinin kullan›lmas› faydal› olabilir. Uzamsal Eklentiler: (Spatial Extensions) • PostGIS for PostgreSQL : PostGIS, PostgreSQL veritaban›n›n co¤rafi bilgi sistemlerinde co¤rafi verileri depolayabilmesini ve veriler üzerinde co¤rafi ifllemler yapmas›n› sa¤lar. PostgreSQL veritaban›, OpenGIS ad› verilen uluslararas› standart aç›s›ndan veri tipi ve yordamlar yönünden onaylanm›fl bir veritaban›d›r. OpenGIS standartlar›na eksiksiz uymaktad›r. Web Uygulamalar› (Web Applications): Bu kategoride günümüzde yayg›n olarak kullan›lan forum, wiki ve içerik yönetim yaz›l›mlar› bulunmaktad›r. E¤er PostgreSQL veritaban›n›n bu sistemler için kullan›lmas› planlan›yorsa, ilgili uygulamalar›n bu arayüzden kurulumu kolayl›k sa¤lamaktad›r. • Drupal: Aç›k kaynak kodlu içerik yönetim sistemlerinin yayg›n olanlar›ndan birisidir. Her amaca göre özellefltirilebilir bir sistemdir. Ek bilgi ve sistemle ilgili ayr›nt›lar http://www.drupal.org/ sitesinden al›nabilir. • mediaWiki: Wikipedia (http://www.wikipedia.org/) sitesinin de kulland›¤›, aç›k kaynak kodlu bir web uygulamas›d›r. • phpBB: ‹lan tahtas› tarz›nda, kullan›c›lar›n haberleflmesini ve mesajlaflmas›n› sa¤layan aç›k kaynak kodlu forum yaz›l›m›d›r. Arka planda PostgreSQL çal›flt›ran ve bu duruma göre yap›land›r›lm›fl bir forum yaz›l›m› phpBB seçene¤i iflaretlenerek kurulabilir. Web Deployment (Web üzerinden kullan›m): Bu kategori alt›nda PostgreSQL veritaban›n› kullanmak için önceden yap›land›r›lm›fl Apache web sunucusu ve PostgreSQL veritaban›n› yönetmek için kullan›lan phpPgAdmin web uygulamas› bulunmaktad›r. • ApachePHP: Apache web sunucusu web sunucular›n›n büyük bir bölümünde kullan›lan aç›k kaynak kodlu ücretsiz bir web sunucu yaz›l›m›d›r. Apache iste¤e ba¤l› olarak Linux ve Windows iflletim sistemleri için ayr›ca indirilerek kurulabilir. Ancak PostgreSQL veritaban› eklentisi için ayr›ca yap›land›rma gerektirdi¤inden, bu aflamada kurulmas› kolayl›k sa¤lamaktad›r. • phpPgAdmin: phpPgAdmin web üzerinden PostgreSQL’in yönetilmesini sa¤layan programd›r. Çal›flmak için Apache web sunucusuna ihtiyaç duyar. ApachePHP ve phpPgAdmin yaz›l›mlar› kurulduktan sonra, PostgreSQL veritaban›na verilen yetkiler ve izinler çerçevesinde ba¤lan›larak gerekli ayarlar ve düzenlemeler yap›labilir. Ancak, veritaban›n› yönetecek

31

2. Ünite - PostgreSQL Kurulumu

bir Web uygulamas› kuruldu¤unda, bu uygulamaya ‹nternet’e ba¤l› herkes ulaflabilir. Veritaban› güvenli¤ini sa¤laman›n yan›nda Web uygulamas›n›n da güvenli¤ini sa¤lama flart› do¤ar. Bu nedenle web uygulamas› güvenli bir sunucuda kurulmal›, içinde farkl› harf, rakam ve noktalama iflaretleri bulunan güçlü flifrelerle ve mümkünse s›n›rl› bir eriflim modeliyle korunmal›d›r. Bu kitapta yer alan uygulamalar ve al›flt›rmalar için yukar›da belirtilen eklentilerin hiç birinin kurulmas›na gerek yoktur. ‹lerideki ünitelerde yer alan co¤rafi sorgulamalarda PostGIS kullan›lacak olmas›na ra¤men, bu aflamada kurulmamal›d›r. ‹stenilen ek ve yard›mc› programlar›n seçimi, fiekil 13’te görülen “Sonraki” tufluna bas›larak bitirilir. E¤er ilgili programlardan bir veya daha fazlas›na sonradan ihtiyaç olursa, “Application Stack Builder” tekrar çal›flt›r›larak eksik olan programlar yüklenilebilir. Kurulum arayüzünde “Sonraki” dü¤mesine bas›ld›¤›nda seçilen programlar›n indirilece¤i sunucunun seçilece¤i ekran gelir. fiekil 12’de PosgreSQL veritaban› yaz›l›m›n›n indirilebilece¤i yans›malar›n bulundu¤u ekran görülmektedir. Co¤rafi olarak size en yak›nda bulunan adres seçilmelidir. fiekil 2.12 Eklenti programlar› indirmek için yans›ma sunucusu seçimi.

fiekil 13’teki kurulum özet ekran›nda yap›lan seçimler son kez kullan›c›ya özetlenir. E¤er kurulacak program›n ve eklentilerinin seçiminde bir de¤ifliklik yap›lmas› gerekiyorsa “Geri” tufluna bas›larak önceki ekranlara dönülebilir. E¤er istenilen program ve eklerinin seçimi do¤ruysa, bundan sonraki aflamada ‹nternet’ten indirilecek kurulum dosyalar›n›n geçici olarak saklanaca¤› klasörün seçimi yap›l›r.

32

Veritaban› Uygulamalar›

fiekil 2.13 PostgreSQL Kurulumu: Eklenti programlar› kurulumu öncesi özet ekran›.

“Sonraki” tufluna bas›ld›¤›nda, kurulum yaz›l›m› ‹nternet’ten yaz›l›m bileflenlerinin en son sürümünü indirmeye bafllayacakt›r. Tufla basmadan önce bilgisayar›n ‹nternet’e ba¤l› oldu¤undan emin olunuz. Bu ifllem ‹nternet ba¤lant›s›n›n h›z›na göre uzun bir süre alabilir. ‹ndirme ifllemi bitti¤inde fiekil 14’teki sonuç ekran› ile karfl›lafl›l›r. “Application Stack Builder” program› bu aflamada indirilmifl olan dosyalar› çal›flt›rarak istenilen ek programlar›n bilgisayara kurulumunu gerçeklefltirir. Kurulum, bilgisayar› yeniden bafllatmadan sonuna kadar tamamlanmal›, kurulum esnas›nda bilgisayar› yeniden bafllatmakla ilgili sorulara “No” (Hay›r) veya “Restart Later” (Daha sonra bafllat) fleklinde cevaplar verilmelidir. ‹ndirilen dosyalar›n kurulumu bafllad›¤›nda, programlar›n s›ras›yla son kullan›c› sözleflmeleri ekrana getirilerek, kullan›c›dan onay vermesi istenecektir. E¤er sözleflme kabul ediliyorsa fiekil 14’teki gibi “kabul ediyorum” kutucu¤u iflaretlenerek kuruluma devam edilmelidir. Kurulum s›ras›nda iflaretlenen ek programlar›n kurulum ekranlar› ile karfl›lafl›labilir. E¤er özel bir kurulum istenmiyorsa varsay›lan de¤erlerin kabul edilerek kuruluma devam edilmesi yararl› olacakt›r. Kurulum s›ras›nda baz› programlar için üretici firman›n web sitesinde kullan›c› hesab›n›z bulunmas› gerekli olabilir. E¤er bu tip programlar kurulacaksa gerekli kullan›c› ad› ve flifre ücretsiz olarak firmalar›n web sayfas›ndan al›nabilir. Tüm eklenti programlar›n›n kurulumu tamamland›¤›nda fiekil 15’teki sonuç ekran›yla karfl›lafl›l›r.

33

2. Ünite - PostgreSQL Kurulumu

fiekil 2.14 PostgreSQL Kurulumu: Son kullan›c› sözleflme ekran›.

fiekil 2.15 PostgreSQL Kurulumu: Eklenti pr›gramlar›n›n kurulum sonuç ekran›

PostgreSQL veritaban› yaz›l›m› ve eklenti programlar›n›n kurulumu tamamlanm›fl olur. Kurulan eklenti programlar› Bafllat menüsünde bulunabilir. Windows iflletim sistemi yeni kurulan programlar› varsay›lan olarak Bafllat menüsünde farkl› bir renk ile iflaretler. E¤er kurulumdan sonra eklenti programlar›n›n bulunmas›nda s›k›nt› yaflan›rsa, bu özellik kullan›larak programlara kolayl›kla eriflilebilir.

34

Veritaban› Uygulamalar›

fiekil 2.16 Bafllat menüsündeki PostgreSQL eklentileri

2. Ünite - PostgreSQL Kurulumu

35

Özet

N A M A Ç

1

N A M A Ç

2

PostgreSQL yaz›l›m›n› herhangi bir bilgisayara kurabileceksiniz. PostgreSQL’in bir bilgisayara kurulumu, www.postgresql.org adresinden kurulum yaz›l›m›n›n istenen iflletim sistemi için en son sürümü indirilerek bafllat›labilir. Bu kitaptaki örnekler ve uygulamalar, PostgreSQL 8.4.4 sürümü kullan›larak haz›rlanmas›na ra¤men, gelecekte ç›kmas› muhtemel sürümlerde sorun ç›karmadan çal›flabilecektir. PostgreSQL yaz›l›m›yla birlikte gelen ek yaz›l›mlar›n neler oldu¤unu listeleyebileceksiniz. PostgreSQL, pek çok farkl› amaç için kullan›labilece¤inden, farkl› yükleme modellerini de destekler. Web uygulamalar› için, web sunucusunu kurarken, co¤rafi bilgi sistemleri için PostGIS opsiyonunu da kurulum bileflenlerinde kullan›c›ya sunar.

N A M A Ç

3

PostgreSQL kurulumuyla birlikte Bafllat menüsüne eklenen programlar›n neler oldu¤unu aç›klayabileceksiniz. PostgreSQL yaz›l›m› kurulduktan sonra, Bafllat menüsüne çeflitli programlar›n linkleri kurulmaktad›r. “Start Server” ve “Stop Server” programlar›, veritaban›nda tutars›zl›k olmamas› için, büyük de¤ifliklikler öncesinde sunucuyu kapatmak ve sonras›nda açmak için kullan›l›r. ApachePHP ve phpPgAdmin yaz›l›mlar›, web sunucusu kurmak ve gerekirse PostgreSQL veritaban› yönetim sistemini web üzerinden yönetmek için kullan›l›r.

36

Veritaban› Uygulamalar›

Kendimizi S›nayal›m 1. PostgreSQL yaz›l›m›n›n kurulumu s›ras›nda, varsay›lan olarak gelen yönetici ismi afla¤›dakilerden hangisidir? a. postgres b. admin c. root d. Administrator e. Noone

6. PostgreSQL yaz›l›m›n›n web üzerinden yönetilmesini sa¤layan yaz›l›m afla¤›dakilerden hangisidir? a. ApachePHP b. phpPgAdmin c. psqlODBC d. phpBB e. PostGIS

2. PostgreSQL’in TCP ba¤lant› port numaras› afla¤›dakilerden hangisidir? a. 21 b. 80 c. 113 d. 8080 e. 5432

7. “Stop Server” ve “Start Server” komutlar›n›n ifllevi nedir? a. Bilgisayar sistemine elektrik verildi¤i zaman PostgresSQL VTYS’ini çal›flt›rmak, bilgisayar kapat›lmadan önce de VTYS’ini kapatmak b. Bilgisayar›n iflletim sistemini kapatmak ve açmak c. Yönetim yaz›l›m›n›n yetkisiz kiflilerce farkedilmeden kullan›lmas›n› engellemek ve kontrollü flekilde tekrar çal›flt›rabilmek d. Veritaban› yap›s›nda de¤ifliklikler olaca¤›nda sunucuyu eriflime kapatmak ve ifllem bitti¤inde yeniden bafllatabilmek e. VTYS’i çal›flmaz hale geldi¤inde kapatmak ve yeniden açmak

3. Afla¤›dakilerden hangisi PostgreSQL sisteminin yönetim program› afla¤›dakilerden hangisidir? a. pgAdminIII b. Drupal c. Apache d. PHPBB e. MySQL Migration Wizard 4. PostGIS nedir? a. PostgreSQL yaz›l›m›n›n co¤rafi nesneleri depolamas› için kullan›lan ektir. b. Co¤rafi bilgi sistemidir. c. PostgreSQL yaz›l›m›n›n ayarlar›n› yapan yönetim modülüdür. d. PostgreSQL’in e-Posta uygulamalar›nda kullan›lmas›n› sa¤layan ek yaz›l›md›r. e. Aç›k kaynak kodlu yedekleme sistemidir. 5. Veritaban› yönetim yaz›l›m›nda kullan›lan yönetici flifrelerinin sa¤lam olabilmesi için afla¤›dakilerden hangisi yap›lmal›d›r? a. Alfanümerik ve noktalama iflaretlerinin birlefliminden oluflmal›d›r. b. En az yirmi adet nümerik karakterden türetilmelidir. c. ‹flletim sisteminin Administrator flifresiyle ayn› olmal›d›r. d. Sistemde yer alan her veritaban› için ayr› flifre kullan›lmal›d›r. e. fiifre oluflturulurken, baflka bir kiflinin görmemesine dikkat edilmelidir.

8. PostgreSQL kurulumu bittikten sonra, ek yaz›l›mlar›n kurulabilmesini sa¤layan program afla¤›dakilerden hangisidir? a. Application Stack Builder b. phpBB c. Start Server d. psqlODBC e. pgAdmin 9. mediaWiki nedir? a. Wikipedia sitesinin de kulland›¤› yaz›l›md›r. b. Resim ve videolar›n izlenebildi¤i YouTube benzeri bir arayüz sunan yaz›l›md›r. c. Çevrimiçi ansiklopedi yaz›l›m›d›r. d. Resim ve videolar›n depolanmas›n› sa¤layan arfliv yaz›l›m›d›r. e. Çevrimiçi harita sistemidir. 10. PostgreSQL kurulumu s›ras›nda yüklenebilen phpBB eklentisinin ifllevi nedir? a. Forum sitesi oluflturabilmek b. Çevrimiçi içerik yönetim sistemi kurabilmek c. Web üzerinden baz› veritaban› komutlar›n› göndermeyi sa¤lamak d. Yedekleme sistemi kurmak e. Co¤rafi modelleri veritaban›nda kullanabilmek

2. Ünite - PostgreSQL Kurulumu

Kendimizi S›nayal›m Yan›t Anahtar›

Yararlan›lan Kaynaklar›

1. a

PostgreSQL web sitesi http://www.postgresql. org/ EnterpriseDB web sitesi http://www.enterprisedb.com/ PostGIS web sitesi http://postgis.refractions.net/ Drupal web sitesi http://drupal.org/ MediaWiki web sitesi http://www.mediawiki.org/ Vikipedi web sitesi http://www.wikipedia.org/ phpBB web sitesi http://www.phpbb.com/. Apache Web Sunucusu web sitesi http://httpd.pa che.org/ phpPgAdmin web sitesi http://phppgadmin.sourceforge.net/

2. d 3. a 4. a 5. a 6. b

7. d 8. a

9. a

10. a

Yan›t›n›z yanl›fl ise “PostgreSQL Kurulum Dosyas›n›n ‹ndirilmesi” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “PostgreSQL Yaz›l›m›n›n Kurulumu” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “PostgreSQL Yaz›l›m›n›n Kurulumu” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “PostgreSQL Yaz›l›m›n›n Kurulumu” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “PostgreSQL Yaz›l›m›n›n Kurulumu” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “PostgreSQL Yard›mc› Programlar›n Kurulumu” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “PostgreSQL Yaz›l›m›n›n Kurulumu” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “PostgreSQL Kurulum Dosyas›n›n ‹ndirilmesi” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “PostgreSQL Yard›mc› Programlar›n Kurulumu” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “PostgreSQL Yard›mc› Programlar›n Kurulumu” bafll›kl› bölümü tekrar inceleyiniz.

37

3

VER‹TABANI UYGULAMALARI

Amaçlar›m›z

N N N N N N

Bu üniteyi tamamlad›ktan sonra; PostgreSQL’in yönetim paneli olan pgAdmin program›nda sa¤lanan özellikleri kullanabileceksiniz. Herhangi bir veritaban› yönetim sistemiyle birlikte gelen yönetim yaz›l›m›ndaki özellikleri kullanabileceksiniz. Yönetim program› üzerinden yeni bir veritaban›, veritaban› içine yeni tablolar, tablolara yeni kolonlar (alan) ekleyebileceksiniz. Veritaban› sunucusunda yap›labilecek bak›m ifllemlerini gerçeklefltirebileceksiniz. Veritaban›n›n tamam›n› veya bir k›sm›n› yedekleyebilecek, yedeklerden veritaban›n› yeniden oluflturabileceksiniz. Veritaban›yla ilgili çeflitli raporlar› oluflturabileceksiniz.

Anahtar Kavramlar • iliflkisel veritaban› yönetim sistemi • PostgreSQL • pgAdmin

• veritaban› yedekleme • veritaban› kopyalama • veritaban›nda raporlama

‹çerik Haritas›

Veritaban› Uygulamalar›

Veritaban› Yönetimi

• G‹R‹fi • pgAdmin III PROGRAMINA GENEL BAKIfi • YEN‹ VER‹TABANI OLUfiTURMA • TABLO OLUfiTURMA • PostgreSQL SUNUCU DURUMU ‹NCELEME • SUNUCU BAKIMI • VER‹TABANI YEDEKLEME • RAPORLAMA

Veritaban› Yönetimi G‹R‹fi Her sistem gibi veritaban› yönetim yaz›l›m›n›n da sa¤l›kl› çal›flabilmesi için sürekli olarak bak›ma ihtiyac› vard›r. Sistemde oluflan ufak sorunlar ve sorgularda yaflanan yavafll›k daha ciddi problemlerin habercisi olabilir. Bu nedenle veritaban› sistemi düzenli olarak kontrol edilmeli, sa¤l›kl› çal›flmaya devam etmesi için gerekli programlar ve komutlar çal›flt›r›lmal›d›r. PostgreSQL ve di¤er bütün veritaban› yönetim sistemlerinde, kontrol ve denetim amac›yla kullan›c›lara sunulan yönetim modülleri bulunmaktad›r. PostgreSQL yaz›l›m›nda, yönetim iflleriyle ilgili olarak pgAdmin program› bulunur. PgAdmin program›n›n sa¤lad›¤› hizmetlerden baz›lar› flöyledir: • Yeni veritaban› oluflturma • Varolan veritaban›na yeni tablolar ekleme • Tablolarda indeks oluflturma • Veritabanlar›n›n yedeklenmesi • Yedeklerden veritaban›n›n yeniden yüklenmesi • Dosya sisteminde gerçekleflen ve yavafll›k yaratan sorunlar nedeniyle, veritaban› dosyalar›ndaki hatalar› onarma • Veritaban›n›n di¤er bir sunucuya kopyas›n›n al›nmas› • SQL komutlar›n›n çal›flt›r›lmas› • PL/pgSQL dilinde yaz›lan program parçalar›n›n çal›flt›r›lmas› Veritaban› yaz›l›m›n›n üzerinde bulundu¤u donan›m›n veya iflletim sisteminin bozulmas› durumunda, sistem belirli bir noktadan itibaren tekrar çal›flabilir durumda olmal›d›r. Bu tip bir sorun an›nda belirli bir noktaya dönebilmek için sistem yap›land›rmas› ve veritaban› tablolar›ndaki verilerin yedeklerinin al›nmas› gereklidir. Veritaban› sistemlerinde bak›m, yedekleme ve sistemi yedeklendi¤i ana geri döndürmek için araçlar bulunmaktad›r. Bu ünitede PostgreSQL veritaban› yaz›l›m›n› yönetmek ve sa¤l›kl› çal›flmas›n› sa¤lamak için kullan›lacak araçlar ve yöntemler üzerinde durulacakt›r.

pgAdmin PROGRAMINA GENEL BAKIfi PostgreSQL veritaban› yönetim sisteminin kurulumu gerçeklefltirildikten sonra pgAdmin yönetim ara yüzü de kurulmufl olur. Bütün iliflkisel veritaban› yönetim sistemleri SQL diliyle çal›fl›r. Bütün temel ifllemlerin SQL dilinde yaz›lm›fl komutlarla yap›lmas› gereklidir. pgAdmin, PostgreSQL veritaban› yönetim sisteminin kolayl›kla yönetilmesi için haz›rlanm›fl bir programd›r ve kullan›c›n›n SQL dili kullana-

40

Veritaban› Uygulamalar›

rak yapmas› gereken ifllemleri görsel bir ara yüz üzerinden gerçeklefltirmesine olanak verir. Fare yard›m›yla ekranda yap›lan ifllemler pgAdmin taraf›ndan SQL komutlar›na çevrilerek çal›flt›r›l›r. pgAdmin üzerinden, sadece yerel bilgisayarda de¤il a¤ üzerinden eriflilebilecek bilgisayarlardaki PostgreSQL veritaban› sunucular›na da ba¤lant› kurulabilir. Sunucular›n farkl› bir donan›m mimarisine veya iflletim sistemine sahip olmas› sorun de¤ildir. pgAdmin program› PostgreSQL veritaban› üzerinde yap›labilecek tüm ifllemlerin yap›labilmesini sa¤lar. Ayr›ca kullan›c› kendi yazd›¤› SQL sorgular›n› pgAdmin üzerinden çal›flt›rabilir. pgAdmin program›n› açmak için Bafllat menüsünden Programlar seçilerek PostgreSQL 8.4 sekmesi alt›ndaki pgAdmin eleman› seçilir (fiekil 1). Daha rahat bir eriflim için PostgreSQL yard›mc› programlar›ndan s›k kullan›lanlar›n›n görev çubu¤una veya masaüstüne k›sa yollar› konulmal›d›r. Bu sayede s›k kullan›lan bu programlara daha h›zl› bir eriflim sa¤lanm›fl olur. pgAdmin program› bafllat›lfiekil 3.1 d›¤›nda henüz herhangi bir veritaban›na ba¤lant› yap›lmad›¤› pgAdmin: Program› için bofl bir ekranla karfl›lafl›l›r. bafllatma Ekran üzerinde üç ayr› bölüm bulunmaktad›r (fiekil 2). Bunlardan ilki sol k›s›mda bulunan nesne izleme (Object Browser) bölümüdür. Bu ekranda veritaban› sistemi içerisindeki nesneler listelenmektedir. Bu nesnelerle ilgili ayr›nt›l› bilgiler ise ekran›n sa¤ k›sm›nda gösterilir. ‹ncelenmek istenilen nesnenin türüne göre Özellikler (Properties) sekmesinin yan›nda ‹statistikler (Statistics), Ba¤›ml›l›klar (Dependencies) ve Ba¤›ml›lar (Dependents) sekmelerinden bilgiler al›nabilir. pgAdmin arayüzü üzerinden yap›lacak olan ifllemlerin SQL dilindeki karfl›l›klar› ana ekran›n alt k›sm›ndaki SQL panosunda (SQL Pane) görüntülenmektedir. Burada gösterilen SQL cümlecikleri kopyalanabilir, gerekirse kay›t edilebilir veya de¤ifltirilip daha sonra çal›flt›rabilir.

41

3. Ünite - Veritaban› Yönetimi

fiekil 3.2 pgAdmin: Aç›l›fl ekran›.

pgAdmin ile çal›flmaya bafllamak için öncelikle bir veritaban›na ba¤lan›lmas› gereklidir. Kurulum tamamlanm›flsa yerel makinedeki veritaban› ekranda görünür durumda olacakt›r. E¤er kurulum aflamas›nda farkl› bir port numaras› verilmiflse veya a¤ üzerinde bulunan bir sunucuda bulunan veritaban›na eriflim isteniyorsa, Dosya (File) menüsünden Sunucu Ekle (Add Server) seçilerek, uzak sunuculara ba¤lant› kurulabilir. Kurulum aflamas›nda varsay›lan port numaras›n›n kullan›laca¤› varsay›ld›¤›nda, ekran›n sol k›sm›ndaki Nesne ‹zleme (Object Browser) bölümünde sunucu listesi görülecektir (fiekil 2). “PostgreSQL 8.4 (localhost:5432)” olarak görülen yerel makinedeki veritaban› üzerinde k›rm›z› bir çarp› iflareti bulunur. Bu durum veritaban›n›n var oldu¤unu ancak pgAdmin üzerinden henüz ba¤lant› kurulmad›¤›n› gösterir. Ba¤lant›y› kurmak için “PostgreSQL 8.4 (localhost:5432)” eleman›na çift t›klamak yetecektir. Ba¤lant›n›n kurulmas› için gerekli flifre kullan›c›ya sorulur. Bu flifre, veritaban› yönetim sisteminin kurulumu s›ras›nda girilmifl olan flifredir. Veritaban› yönetici flifresinin unutulmamas› önemlidir, flifre unutuldu¤unda kurulumun tekrar gerçeklefltirilmesi gerekecektir. Bu durumda veri kayb› olmas› beklenebilir.

42

Veritaban› Uygulamalar›

fiekil 3.3 PostgreSQL veritaban›na ba¤lanma.

Yönetici flifresi do¤ru olarak girilirse, fiekil 3’teki gibi Nesne tarama ekran› içerisinde veritabanlar› (Databases), tablo alanlar› (Tablespaces), grup rolleri (Group Roles) ve Kullan›c› girifl rolleri (Login Roles) dü¤ümleri listelenir. Listelenen nesneler veritaban› sisteminin temel bileflenleridir. Veritabanlar› (Databases): Bir PostgreSQL veritaban› içerisinde birden fazla veritaban› örne¤i bulunabilir. Örne¤in, bir flirkette bir veritaban› stok bilgileri için kurulurken, bir di¤eri personel verileri için oluflturulabilir. pgAdmin ayn› veritaban› sunucusu alt›ndaki farkl› veritaban› örneklerini kullan›c›ya bir arada gösterebilmektedir. Tablo Alanlar› (Tablespaces): Veritaban› içerisinde saklanacak olan verilerin fiziksel olarak sistemdeki bir disk sürücü üzerinde belirli bir klasör yap›s› alt›nda dosyalar halinde bulunmas› gerekmektedir. Bu dosyalar›n dosya sisteminde nerede bulunaca¤› tablo alanlar› taraf›ndan belirlenir. Sistem ilk defa çal›flmaya bafllad›¤›nda varsay›lan tablo alan› kurulum aflamas›nda seçilen klasörü kullan›r. Farkl› veritaban› örnekleri veya ayn› veritaban› örne¤i içerisindeki farkl› veritaban› nesneleri farkl› tablo alanlar›n› kullanabilir. Veritaban› yöneticileri sistemi daha verimli bir hale getirmek için, veritaban› dosyalar›n›n farkl› alanlarda tutulmas›na özen göstermektedir. Sisteme yeni bir tablo alan› eklemek için tablo alanlar› dü¤ümüne sa¤ tuflla basarak Yeni Tablo Alan› (New Tablespace) opsiyonu seçilir. Gerekli bilgiler girilerek yeni tablo alan› oluflturulabilir. ‹fllemleri basit tutmak amac›yla ünitenin geri kalan›nda varsay›lan tablo alan› kullan›lacakt›r. Grup Rolleri (Group Roles): PostgreSQL, veritaban› içerisindeki nesnelere her bir kullan›c›n›n eriflimini farkl› seviyelerde yetkilendirebilir. Baz› kullan›c›lar veritaban›nda sadece sorgulama yapabilirken, baz›lar›n›n de¤ifltirme yetkisi bulunur. Ancak kullan›c› ve nesne say›s› artt›¤›nda yetkilendirme iflleminin yönetilmesi zorlaflabilir. Bu nedenle veritaban› yönetim yaz›l›m› içerisinde kullan›c› gruplar› oluflturma özelli¤i bulunmaktad›r. Bu flekilde yetkilendirme öncelikle gruplar üzerinden yap›lmaktad›r. Her grubun içinde kullan›c›lar bulunur. Baz› gruplar belirli tablolar› salt okunur olarak görürken, di¤er bir grup tabloya eriflemez veya üçüncü bir grup ise

43

3. Ünite - Veritaban› Yönetimi

yine tablo üzerinde tüm ifllemleri yapmaya yetkili olabilir. Yine de baz› durumlarda kullan›c›lara kendi gruplar›n›n d›fl›nda baz› nesnelere eriflim yetkisi verilmesi gerekebilir. Bu durumda kullan›c› ad›yla ayr›ca ek bir yetkilendirme yap›labilir. Kullan›c› Girifl Rolleri (Login Roles): Sistemde ifllem yapmaya yetkili kullan›c› hesaplar›n› içeren k›s›md›r. Yeni bir kullan›c› tan›mlama, silme veya kullan›c› yetkileri üzerinde de¤ifliklik yapmak için kullan›l›r. Kurulum aflamas›ndan sonra sistemde sadece varsay›lan kullan›c› olan “postgres” tan›mlanm›fl durumdad›r. Bu kullan›c› veritaban› sahibi ve tam yetkili bir kullan›c›d›r. Bu nedenle “postgres” kullan›c›s›n›n flifresi yaln›zca veritaban› yöneticisinde bulunmal›, di¤er veritaban› kullan›c›lar›yla kesinlikle paylafl›lmamal›d›r. Yeni bir kullan›c› tan›mlamak için kullan›c› girifl rolleri sekmesine sa¤ tuflla bas›larak Yeni Girifl Rolü (New Login Role) eleman› seçilmelidir. Sonras›nda aç›lan ekrana gerekli bilgiler girilerek sisteme yeni bir kullan›c› eklenebilir. ‹fllemleri basit tutmak amac›yla ünitenin geri kalan›nda postgres kullan›c›s› kullan›lacakt›r.

YEN‹ VER‹TABANI OLUfiTURMA Veritaban›na ba¤land›ktan sonra ana ekran›n sol k›sm›ndaki nesne tarama penceresinde Veritabanlar› (Databases) dü¤ümü aç›ld›¤›nda sistemde daha önceden tan›mlanm›fl veritabanlar› görüntülenir. Bu veritaban› örneklerinden “postgres” veriSIRA S‹ZDE bilgileri, taban› örne¤i, veritaban› sistemi, içsel iflleyifli ve yap›land›rmas› hakk›nda di¤er bir deyiflle meta verileri içermektedir. Bu veritaban› üzerinde normal flartlar alt›nda ifllem yap›lmamal›d›r. Örne¤in yeni bir tablo kesinlikleD“postgres” veritabaÜ fi Ü N E L ‹ M n› içerisinde oluflturulmamal›d›r. E¤er PostgreSQL kurulumundan sonra “Application Stack Builder” program› çal›flt›r›larak PostGIS eklentisi kurulmuflsa, sistem içeO R U risinde postgis veritaban› örne¤i de görülebilir. Bu örnek flekil S3’te görülmektedir.

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M S O R U

Veritabanlar› içinde görülen postgres veritaban› üzerinde kesinlikleD ifllem ‹ K K A Tyap›lmamal›d›r. Aksi taktirde, veritaban› çal›flamaz hale gelebilir. SIRA S‹ZDE

D‹KKAT

N N

Yeni bir veritaban› örne¤i oluflturmak için Veritabanlar› (Databases) dü¤ümüne sa¤ t›kAMAÇLARIMIZ lanarak aç›lan menüden Yeni Veritaban› (New Database) opK ‹ T A P siyonu seçilir. Bu aflamada fiekil 4’te gösterilen yeni veritaban› örne¤i oluflturma ekran› göTELEV‹ZYON rüntülenir. Yeni veritaban› oluflturma penceresinin üst k›sm›nda birden fazla sekme bulunmaktad›r. Özellikler (Properti‹NTERNET es) sekmesinde ekran üzerinde oluflturulacak olan veritaban› örne¤i ile ilgili girilmesi gereken alanlar görülür. Bu alanlardan baz›lar› girilmesi zorunluyken, (örne¤in Veritaban› Ad› - Name gibi), baz›lar› ise zorunlu olmayan alanlard›r (örne¤in Yorum - Comment alan› gibi).

SIRA S‹ZDE

fiekil 3.4

pgAdmin: Sistemde AMAÇLARIMIZ tan›ml› veritabanlar›. K ‹ T A P

TELEV‹ZYON

‹NTERNET

44

Veritaban› Uygulamalar›

pgAdmin, bilgilerin girilmesinden sonra ifllemi SQL komutlar›na dönüfltürerek çal›flt›racak ve yeni veritaban›n› oluflturacakt›r. Çal›flt›r›lacak olan SQL komutu pencerenin en sa¤›ndaki SQL sekmesi aç›larak görüntülenebilir. fiekil 3.5 pgAdmin: Yeni veritaban› oluflturma ekran›.

Örnek olarak oluflturulacak veritaban›n›n ad› AUDB olarak girilecektir. Sahip (owner) alan›na el ile girifl yapmak yerine, listeden “postgres” kullan›c›s› seçilmelidir. Karakter kodlamas› (Encoding) seçene¤i UTF8’de b›rak›lmal›d›r. UTF8 en genifl karakter setini destekleyen, yeryüzünde bulunan alfabelerin büyük k›sm›n› destekleyen koddur. fiablon (Template) olarak “template1” seçilebilir. fiablonlar sistemde daha önceden tan›mlanm›fl ve yeni bir nesne oluflturulaca¤› zaman temel özelliklerin kopyaland›¤› nesnelerdir. Tablo alan› (Tablespace) oluflturulacak veritaban›n›n bulunaca¤› dizini belirler. Bu alan “default tablespace” olarak seçilmelidir. Harmanlama (Collation) alan› veritaban› oluflturulduktan sonra sisteme girilecek olan verilerin s›ralanmas›nda kullan›lacak kurallar› belirlemektedir. Bu alanda “Turkish, Turkey” seçilmelidir. Karakter tipi (Character type) veritaban›nda kullan›lacak karakterleri s›n›fland›rmak için kullan›l›r. Yine bu alanda, veritaban›nda Türkçe harfler içeren veriler kullan›laca¤›n› göstermek için “Turkish, Turkey” girilmelidir. Ba¤lant› S›n›r› (Connection Limit) oluflturulacak veritaban›na ayn› anda kaç kullan›c›n›n ba¤l› olabilece¤ini belirler. Varsay›lan de¤er olan -1 herhangi bir s›n›r olmayaca¤› anlam›na gelir ve seçenek bu flekilde b›rak›lmal›d›r. Yorum (Comment) alan›na girilecek yaz›lar ve aç›klamalar tercihe ba¤l›d›r, bu nedenle bofl b›rak›labilir. fiema k›s›tlamas› alan› (Schema restriction) da bofl kalabilir. fiemalarla ilgili bilgiler ilerleyen sayfalarda verilecektir.

SIRA S‹ZDE

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

3. Ünite - Veritaban› Yönetimi S O R U

S O R U

Veritaban› oluflturulurken karakter kodlaman›n UTF8 olarak seçilmesi, verilerin D ‹ Kgirilecek KAT de¤iflik dillerde olabilmesini sa¤lar. SIRA S‹ZDE

D‹KKAT

N N

Tüm alanlar girildikten sonra PostgreSQL veritaban›n›n girilen bilgiler do¤rultusunda çal›flt›raca¤› SQL sorgusu pencerenin üstündeki SQL sekmesine bas›larak görüntülenebilir (fiekil 6). Geri kalan iki sekme, De¤iflkenler (Variables) AMAÇLARIMIZ ve Ayr›cal›klar (Priviledges) sekmeleridir. Ayr›cal›klar sekmesi sistemdeki grup ve kullan›c›lara, oluflturulacak veritaban› üzerinde yetki vermek için kullan›l›r. Yetkilendirme K ‹baz› T A gruplar›n P ifllemi veritaban› örne¤i oluflturulduktan sonra tekrar yap›labilir, yetkileri kald›r›l›rken, yeni gruplara yeni yetkiler atanabilir. De¤iflkenler sekmesi ise bu noktada ifllevsel de¤ildir. TELEV‹ZYON

‹NTERNET

Tüm girifller yap›ld›ktan sonra OK dü¤mesine bas›larak veritaban› oluflturulur. Yeni veritaban› pgAdmin ekran›n›n sol k›sm›ndaki Nesne izleme alan›nda fiekil 7’deki gibi görüntülenecektir. ‹lk aflamada k›rm›z› çarp› iflaretiyle görünen veritaban› örne¤i üzerine sol fare tufluyla t›kland›¤›nda aktif hale geçer. Veritaban› örne¤i dü¤ümü alt›nda, kataloglar (Catalogs), flemalar (Schemas) ve kopyalama (Replication) dü¤ümleri bulunmaktad›r. Kataloglar (Catalogs) bölümü, veritaban›ndaki tablolar, indeksler, kullan›labilen fonksiyonlar, kullan›c›lar gibi yap›larla ile ilgili verileri tutar. fiemalar (schemas) nesne tarama ekran›nda kataloglar alt›nda görülmektedir. Katalogdaki bilgiler kullan›larak, flema bölümündeki gerçek veritaban› nesneleri, örne¤in tablolar ve indeksler oluflturulur. Bafllang›çta bir tane genel (public) flema bulunmaktad›r. Genel flemaya eriflim s›n›rlamas› yap›lmas› iyi bir yaklafl›m olmad›¤›ndan önemli verilerin tutuldu¤u bir veritaban› örne¤i oluflturulacaksa, yeni bir flema yarat›lmas› ve tan›mlanacak olan tablolar›n ve di¤er nesnelerin bu flema al-

45

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

TELEV‹ZYON

fiekil 3.6

Doldurulmufl yeni veritaban› oluflturma ekran›‹ NveT Eçal›flRNET t›r›lacak SQL cümleci¤i.

46

Veritaban› Uygulamalar›

t›nda oluflturulmas› daha sa¤l›kl› olacakt›r. Yeni bir flema oluflturmak için fiemalar dü¤ümüne sa¤ tuflla t›klayarak aç›lan menüden Yeni fiema (New Schema) seçilerek, aç›lan ekranda gerekli bilgiler girilir. Bu alanlara girilecek bilgiler fleman›n ad›, sahibi ve hangi kullan›c› ve gruplar›n hangi yetkilere sahip olaca¤› gibi bilgilerdir. Kullan›m kolayl›¤› aç›s›ndan ünitenin devam›nda genel (public) flema kullan›lacakt›r. Veritaban› örne¤i dü¤ümünün alt›nda bulunan son eleman ise Kopyalama (Replication) dü¤ümüdür. Kopyalama, bir veritaban› sistemi çal›fl›rken ayn› anda en az bir kopyas›n›n da baflka bir sunucu sistemde çal›flt›r›lmas› yöntemidir. Bu sayede e¤er aktif ana veritaban› herhangi bir sebepten dolay› durursa, kopya veritabanlar›ndan birisi aktif hale geçer ve sistem çal›flmaya devam eder. Bu flekilde çal›flan sunucular›n tamam›na sunucu kümesi ad› verilir. E¤er “Application Stack Builder” program› çal›flt›r›larak Slony-I eklentisi kurulduysa, Kopyalama dü¤ümünden yeni bir sunucu kümesi oluflturmak veya kurulan sistemi var olan bir sunucu kümesine eklemek mümkün olabilir. SIRA S‹ZDE

1

SIRA S‹ZDE Yukar›da belirtilen ad›mlar› izleyerek, siz de kendi kullan›m›n›z için bir veritaban› oluflturun.

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

fiekil 3.7 S O R U Veritaban› örne¤i ve içindeki nesneler.

S O R U

D‹KKAT

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

N N

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

K ‹ T A P

TELEV‹ZYON

TELEV‹ZYON

‹NTERNET

‹NTERNET

TABLO OLUfiTURMA Veritaban› sistemlerinin kullan›m amac› verileri depolamak, gerekti¤inde düzenlemek ve sorgulamakt›r. ‹liflkisel veritaban› modelinde, verilerin depolanmas› için tablolar kullan›l›r. Bir tablo, içinde depolanacak verinin biçimine ve di¤er tablolarla olan iliflkilerine göre tasarlan›r. Tablolar SQL dilinde yaz›lm›fl komutlarla oluflturulabilece¤i gibi, pgAdmin üzerinden görsel yöntemlerle de yarat›labilir. Kitab›n ilerleyen bölümlerinde, iliflkisel veritaban› kavram› ve SQL diliyle ilgili ayr›nt›l› bilgiler yer almaktad›r. Bu ünitede, iliflkisel veritaban› modelinde tablo yap›s›n›n veri depolamak için kullan›ld›¤›n› kabul ederek, tablolar› pgAdmin üzerin-

47

3. Ünite - Veritaban› Yönetimi

den görsel flekilde oluflturaca¤›z. Tablo oluflturmak için, ilk aflamada veritaban› örne¤i içinde fiemalar dü¤ümünün alt›ndaki Tablolar (Tables) dü¤ümü seçilmelidir. Tablolar dü¤ümüne sa¤ fare tufluyla bas›ld›¤›nda aç›lan menüden Yeni Tablo (New Table) seçene¤i seçilerek, fiekil 8’deki yeni tablo oluflturma ekran› görüntülenir. Öncelikle özellikler (Properties) sekmesi içerisindeki alanlar doldurulmal›d›r. ‹lk olarak tabloya bir isim verilmesi gereklidir. Bu isim rakamla bafllamamal› veya veritaban› sistemi için özel anlam ifade eden bir kelime olmamal›d›r. PostgreSQL, SIRA S‹ZDE ULKELER ve isimlerde küçük büyük harf ayr›m› yapmaktad›r. Di¤er bir deyiflle, Ulkeler isimli birbirinden farkl› iki ayr› tablo oluflturulabilmektedir. Ancak, tablolar› olufltururken, bir tarz benimsemeniz yerinde olacakt›r. Örne¤in, isimleD Ü fi Ü N E L ‹tablo M rinin tamam›n›n büyük harf veya ilk harf d›fl›nda di¤erlerinin küçük harf seçilmesi SIRA S‹ZDE veya bütün harflerin küçük harf olmas› gibi yaklafl›mlar, isimlerde tutarl›l›k sa¤lanS O R U mas› aç›s›ndan önemlidir. D Ü fi Ü N E L ‹ M

D ‹ K K Akesinlikle T Veritaban›ndaki nesnelerin isimlerinde, ö, ü, ›, ç, ¤ gibi Türkçe karakterler kullan›lmamal›d›r. S O R U

SIRA S‹ZDE

N N N N

D ‹ Kseçilmesi, KAT Tablo isimlerinin, tablonun ifllevini aç›klayacak kadar uzun isimlerden yap›lan ifllemlerde hata yap›lmas›n› engeller.

AMAÇLARIMIZ SIRA S‹ZDE

fiekil 8’deki ekranda, tablo sahibi olarak postgres kullan›c›s› ve tablo alan› olarak varsay›lan tablo alan› (default tablespace) seçilmelidir. Doldurma (Fill K ‹ T A Katsay›s› P AMAÇLARIMIZ Factor) tablonun yeni kay›t ekleme veya güncelleme için ayr›lm›fl depolama alan› oranlar›yla ilgilidir. Bofl b›rak›larak %100 de¤eri atanmas› uygun olacakt›r. ‹leri seviyede, bir tablonun sabit kay›tlar› ve de¤ifltirilen kay›tlar› aras›ndaki bilinirT E L E V ‹ Z Y Ooran N K ‹ T A P se, bu alan daha iyi bir de¤erle de¤ifltirilebilir. OID, nesne tan›mlay›c›s› anlam›na gelmektedir. OID’ye sahip mi (Has OIDs) alan›, e¤er PostgreSQL’in yeni oluflturulacak bir tabloya, otomatik olarak OID isimSIRA ‹ ZNYEOT Nuygulama‹ENLTEEVRS‹ZDE li kolonu eklemesi isteniyorsa seçilebilir. Ancak, OID’ler ileri Tveritaban› lar›nda kullan›lan nesnelerdir. Burada, “OID’ye sahip” bölümü iflaretlenmemelidir. Tablo ile ilgili aç›klamalar, hangi tarihte ne amaçla oluflturuldu¤u D Ü fi Ügibi N E L ‹ Mbilgiler, yorumlar (Comments) alan›na girilebilir. Türetim (Inherits) sekmesi yeni tablo, var ‹NTERNET olan bir tablo baz al›narak oluflturulacaksa kullan›l›r ve üzerinde çal›flt›¤›m›z örnek S O R U için bofl b›rak›lacakt›r.

pgAdmin yaz›l›m›nda tablo veya benzeri bir veritaban› nesnesi olufltururken, D ‹ K K A T karfl›n›za ç›kan ekranda, amac›n› bilmedi¤iniz bir alan karfl›n›za ç›karsa bofl b›rak›n›z. Bu flekilde PostgreSQL, varsay›lan de¤eri oraya atayacakt›r. SIRA S‹ZDE AMAÇLARIMIZ

N N

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M SIRA S‹ZDE S O R U D Ü fi Ü N E L ‹ M D‹KKAT S O R U

SIRA S‹ZDE D‹KKAT

AMAÇLARIMIZ SIRA S‹ZDE K ‹ T A P AMAÇLARIMIZ TELEV‹ZYON K ‹ T A P

T‹SIRA ENLTEEVRS‹ZDE ‹ NZ YE OT N

D Ü fi Ü N E L ‹ M

‹NTERNET S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

K ‹ T A P

TELEV‹ZYON

TELEV‹ZYON

‹NTERNET

‹NTERNET

48

Veritaban› Uygulamalar›

fiekil 3.8 pgAdmin: Yeni tablo oluflturma ekran›.

Sonraki aflama tablo kolonlar›n› ekleme aflamas›d›r. Kolonlar, tablo içerisindeki verinin farkl› parçalar›n› ifade eder. Üçüncü ünitede verilen ULKELER tablosunun yap›s› Tablo 1’de verilmifltir. Bu yap›ya uygun olarak yeni tabloya kolonlar eklenecektir. Tablo 3.1 ULKELER tablosunun yap›s›.

Kolon Ad›

Kolon Tipi

UlkeID

integer

UlkeAdi

varchar(50)

Tablo Ad›: ULKELER

Tabloya yeni bir kolon eklemek için, öncelikle tablo ekleme ekran›nda (fiekil 8) Kolonlar (Columns) sekmesi seçilir. Yeni bir kolon (alan, sütun) eklemek için Ekle (Add) dü¤mesine bas›l›r. Bu aflamada fiekil 9’da görülen Yeni Kolon (New Column) penceresi aç›l›r. Bu pencerede eklenecek sütunla ilgili girilmesi gereken bilgi alanlar› bulunmaktad›r. ‹lk kolon ismi olarak UlkeID girilir. Veri tipi olarak tamsay› (integer) seçilir. UlkeID sütunu tamsay› tipinde oldu¤u için Uzunluk (Length) ve Hassasiyet (Precision) alanlar› kapal› olarak görülecektir. Kullan›c› veri girifli yaparken kolona bir de¤er girmedi¤inde kullan›c› ad›na otomatik bir de¤er atanmas› isteniyorsa, bu de¤er Varsay›lan De¤er (Default value) alan›na girilmelidir. Kolon ile ilgili aç›klamalar, örne¤in kolonlar› oluflturan kiflinin ad›, oluflturulma amac› gibi bilgiler Yorum (Comment) alan›na girilebilir. Tamam (OK) dü¤mesine bas›larak ilk sütun oluflturulur. Ayn› ifllemler UlkeAdi kolonu için de gerçeklefltirilir ancak bu sefer tamsay› (integer) tipi yerine de¤iflken uzunlukta karakter dizisi anlam›na gelen “character varying” tipi seçilmelidir. Uzunluk alan›na 50 de¤eri girilebilir. pgAdmin, Tablo 1’de görülen “varchar” ti-

49

3. Ünite - Veritaban› Yönetimi

pini “character varying” olarak göstermektedir. Asl›nda iki veri tipi de ayn› anlama gelir. Bu fark sadece okunuflu kolaylaflt›rmak için kullan›l›r. UlkeID, her bir ülkeye verilecek eflsiz bir numara olacakt›r. Bu de¤erin bofl b›rak›lmas›n› engellemek için, penceredeki “Not NULL” bölümü iflaretli olmal›d›r. NULL ifadesi, bofl b›rak›lm›fl de¤er anlam›na gelir. fiekil 3.9 pgAdmin: Tabloya yeni sütun ekleme.

Tablo için iki kolon eklendikten sonra, UlkeID sütunu birincil anahtar (primary key) olarak tan›mlanmal›d›r. Primary key kavram›, kolondaki bilginin her kayd› temsil eden eflsiz bir numara oldu¤unu belirtmektedir. Tablodaki kolonlardan biri için birincil anahtar tan›mlamak için, K›s›tlamalar (Constraints) sekmesinden (fiekil 8), Birincil Anahtar seçiliyken Ekle (Add) dü¤mesine bas›l›r ve birincil anahtar ekleme penceresi aç›l›r. Birincil anahtar ismi olarak, daha aç›klay›c› olsun diye PK_ULKEID verilebilir. Varsay›lan tablo alan› kullan›larak Kolonlar (Columns) sekmesine geçilir. Bu ekranda alttaki seçim alan›nda UlkeID sütunu seçilerek Ekle (Add) dü¤mesine bas›l›r. OK dü¤mesine bas›larak pencere kapat›ld›¤›nda UlkeID kolonu birincil anahtar olarak belirlenmifl olur (fiekil 10). Bu sayede UlkeID kolonunda bir ülke numaras› yaln›zca bir kere girilebilir, birden fazla kay›tta ayn› de¤erin girilmesine PostgreSQL izin vermez. E¤er birincil anahtar olarak veritaban›n›n otomatik üretti¤i bir de¤er kullan›lacaksa, bu sütunun tipi “serial” olarak verilmelidir.

50

Veritaban› Uygulamalar›

fiekil 3.10 UlkeID kolonunun birinci anahtar olarak girilmesi

SIRA S‹ZDE

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

S O R U

S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

Birincil anahtar, veritaban› uygulamalar›nda, tablolar aras›ndaki iliflkileri kurD ‹ K Kiliflkisel AT mak için zorunludur.

N N

SIRA S‹ZDE

pgAdmin içerisinde oluflturulan tablolara veri girmek, girilen verileri görüntülemek ve SQL komutlar› yazmak için Veri düzenleme (Edit data) ve SQL düzenleyicisi (SQL Editor) araçlar› bulunmaktad›r. AMAÇLARIMIZ

PostgreSQL SUNUCU DURUMU ‹NCELEME

K ‹ T A P

TELEV‹ZYON

‹NTERNET

‹ T A P PostgreSQLK veritaban› sunucusu çal›fl›r durumdayken sistemin genel yüküne ve aktivitesine, yap›lan ifllemler için tutulan günlük dosyalar›na (log files), tablolar üzerinde bulunan kilitlere (locks) ve hareketlere (transactions), Sunucu Durumu T E L E Vpenceresinden ‹ZYON (Server Status) eriflilir. Sunucu durumu penceresini açmak için nesne tarama alan›nda aktif PostgreSQL sunucusu seçiliyken Araçlar (Tools) menüsünden Sunucu Durumuna (Server Status) t›klanmal›d›r. (fiekil 11). ‹NTERNET

51

3. Ünite - Veritaban› Yönetimi

fiekil 3.11 Sunucu durumu menüsünün seçilmesi

Aç›lan penceredeki faaliyet (Activity) alan›nda sunucunda çal›flan ifllemler görüntülenmektedir (fiekil 11). Her bir ifllemin hangi veritaban› örne¤i üzerinde ne zaman ve hangi istemci taraf›ndan bafllat›ld›¤› bilgisini bu alandan bulmak mümkündür. Veritaban› tablolar› üzerinde bir kullan›c› baz› komutlar çal›flt›r›rken di¤er kullan›c›lar›n ayn› tabloya eriflimlerinin k›s›tlanmas› gerekebilir. Örne¤in, bir uçak rezervasyon/check-in sisteminde, bir kullan›c›n›n 17-F numaral› koltu¤u seçip onaylamas› s›ras›nda, tablodaki verilerin tutarl› kalmas› için di¤er kullan›c›lar›n tabloya SIRA S‹ZDE eriflimlerinin k›sa süreli ask›ya al›nmas› gereklidir. ‹fllem bittikten sonra, di¤er kullan›c›lar›n ifllem yapmas›na izin verilmelidir. Çünkü, ayn› anda iki ayr› kullan›c› 17F koltu¤unu almaya çal›fl›rsa verilerde tutars›zl›k ortaya ç›kacakt›r. gibi durumD Ü fi Ü NBu EL‹M larda ilk kullan›c› tablo üzerine bir kilit koyar, di¤er kullan›c›lar koyulan kilidin seviyesine göre ilgili tabloya eriflemezler veya k›s›tl› olarak eriflirler. Sunucu Durumu S O R U bölümünde, tablolar üzerinde bulunan bu kilitleri görmek mümkündür. D ‹ taraf›ndan KKAT Kilit mekanizmas›, tablodaki verilerin belirli bir anda tek bir kullan›c› de¤ifltirilmesini sa¤lad›¤› için verilerin tutarl›l›¤›n› sa¤lar.

SIRA S‹ZDE

N N

Veritaban› üzerinde çal›flt›r›lan baz› komut dizilerinin bölünemez di¤er bir deyiflle atomik olmas› gerekebilir. Bir baflka ifadeyle, komut dizisindeki komutlardan herhangi biri hata vererek çal›flt›r›lamazsa kendisinden önce AMAÇLARIMIZ çal›flt›r›lm›fl komutlar›n da iptal edilmesi gerekir. Bu durumdaki komutlar ayn› hareket (transaction) içerisinde çal›flt›r›lmal›d›r. Sistemde var olan aktif hareketler sunucu durumu penK ‹ T A P ceresinin hareketler alan›nda görüntülenir.

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

TELEV‹ZYON

TELEV‹ZYON

‹NTERNET

‹NTERNET

52

Veritaban› Uygulamalar›

Veritaban› sisteminin çal›flmaya bafllamas›yla geçen sürede gerçekleflen önemli olaylar belirli dosyalarda kay›t alt›na al›nmaktad›r. Bu dosyalara günlük dosyalar› denilmektedir. Günlük bilgileri farkl› tarihler için farkl› dosyalar olarak tutulurlar. Bu dosyalar tarih baz›nda seçilerek, Günlük Dosyas› (LogFile) alan›nda görüntülenebilir. Bu dosyalar›n incelenmesiyle sistemin genel durumu veya oluflan hatalar hakk›nda bilgilere ulafl›labilir. fiekil 3.12 pgAdmin: Sunucu durumunu inceleme.

SUNUCU BAKIMI PostgreSQL sunucusunun yüksek baflar›mla ve kapasiteyle çal›flmaya devam etmesi için yap›lmas› gereken bak›m ifllemleri bulunmaktad›r. Veritaban› üzerinde gerçeklefltirilen büyük çapl› ifllemler veritaban›n›n ilgili tablolar hakk›nda tutulmufl olan istatistik verilerin güncelli¤ini bozabilir. Büyük silme ifllemlerinden sonra, art›k kullan›lmayan disk alan› hemen boflalt›lmayabilir. Veritaban› yönetim sisteminin, bu tip durumlarda istatistik bilgilerini güncellemesi, yeni durum için gerekli bilgileri toplamas› ve gereksiz disk alan›n› boflaltmas› gereklidir. Bu ifllemler otomatik hale getirilebildi¤i gibi, kullan›c›n›n bafllatmas›yla da gerçeklefltirilebilir. Bunun için pgAdmin ekran›nda veritaban› örne¤i üzerine sa¤ tuflla bas›larak aç›lan menüden Bak›m (Maintenance) eleman› seçilerek (fiekil 12) Bak›m program› çal›flt›r›l›r. Bak›m program›n›n ara yüzü fiekil 13’te görülmektedir.

53

3. Ünite - Veritaban› Yönetimi

fiekil 3.13 Veritaban› üzerinde bak›m iflleminin (maintenance) seçilmesiVeritaban› üzerinde bak›m iflleminin (maintenance) seçilmesi

fiekil 3.14 Sunucu bak›m modülü.

Bak›m penceresindeki (fiekil 14) seçenekler flu flekilde özetlenebilir; • Vakum (Vacuum): Veritaban› üzerinde kullan›m alan› taramas› yapar. Bu ifllemi gerçeklefltirirken üç tip yöntem kullan›labilir. Tam (FULL) vakum yap›ld›¤›nda tablolar derinlemesine taran›r, kullan›lmayan alanlar boflalt›l›r ve birbiriyle ba¤lant›l› nesneler daha yak›n konuflland›r›lmaya çal›fl›l›r. Analizli (ANALYZE) vakum yap›ld›¤›nda sistemde kullan›lmayan alan boflalt›l›r, sonras›nda sorgular›n daha verimli çal›flmas› için sistem istatistikleri güncellenir. Dondurma (FREEZE) seçene¤i veri girifli olmayan flablon veya salt okunur veritabanlar› için kullan›lmaktad›r.

54

Veritaban› Uygulamalar›

• Analiz (ANALYZE): PostgreSQL yaz›l›m› SQL komutlar›n› daha h›zl› çal›flt›rmak için tablolar hakk›nda istatistiksel veriler tutmaktad›r. Tablolar üzerinde yap›lan büyük de¤ifliklikler bu istatistiksel bilgilerin güncelli¤ini yitirmesine sebep olur. Bak›m program› analiz seçene¤i ile çal›flt›r›ld›¤›nda ilgili istatistiksel bilgileri günceller. • Yeniden ‹ndeksleme (REINDEX): Veritaban› tablolar› içindeki verilere daha h›zl› eriflim için indeksler kullan›lmaktad›r. Üzerinde indeks bulunan bir tablodan çok miktarda kay›t silindi¤inde indeks etkinli¤ini yitirmektedir. Bu durumun önüne geçmek için Bak›m program› yeniden indeksleme seçene¤i ile çal›flt›r›lmal›d›r. Yeniden indeksleme ifllemi Yeniden Oluflturma (RECREATE) seçene¤i ile kullan›ld›¤›nda tablolar üzerinde bulunan indeksler silinerek tekrar yarat›l›r. Bak›m program› sonuç olarak sistemin daha sa¤l›kl› ve verimli çal›flmas›n› sa¤lasa da bu program› çal›flt›r›rken dikkat edilmesi gereken çeflitli noktalar vard›r. Bak›m program› çal›flt›r›ld›¤›nda, veritaban› yönetim sistemi üzerine belirli bir yük getirmekte ve baz› ifllemlerde tablolar üzerine kilitler koymaktad›r. Sistemin yo¤un olarak çal›flt›¤› anlarda bak›m program›n› çal›flt›rmak, sistemin belirli bir süre kilitlenmesine, istemcilerin sorun yaflamas›na yol açacakt›r. Bu neden bak›m program› sistemin daha az yo¤un oldu¤u anlarda çal›flt›r›lmal›d›r.

VER‹TABANI YEDEKLEME SIRA S‹ZDE

D Ü fi Ü N E L ‹ M S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

Her sistemde olabilece¤i gibi PostgreSQL veritaban› sistemi de çal›flmaz hale gelebilir. Bu durum, ço¤unlukla sabit disk gibi donan›m birimlerinin bozulmas›ndan S‹ZDE veya iflletimSIRA sistemindeki sorunlardan kaynaklanmaktad›r. Düzenli olarak bak›m›n yap›lmas› veya sürekli olarak sistemin izlenmesi sistemde verilerin tutuldu¤u diskin bozulmas›n› Yaz›l›m veya donan›m sorunlar›ndan dolay› sisteD Ü fi Ü N E engelleyemez. L‹M min çal›flmamas› durumuna karfl› verinin sa¤l›kl› bir flekilde yedeklenmifl olmas› hayati önem tafl›maktad›r. PostgreSQL içinde bulunan verilerin ve nesnelerin yeS O R U deklenmesi için pgAdmin üzerinde kullan›labilecek çeflitli araçlar bulunmaktad›r. D ‹ K K As›k T s›k yedeklenmelidir. Aksi taktirde verilerinizi iflletim sistemdeki ve Dikkat: veritaban› donan›m birimlerden gerçekleflen sorunlar nedeniyle kaybedebilirsiniz.

N N

SIRA S‹ZDE

pgAdmin kullanarak veritaban›n›n yede¤ini almak için veritaban› örne¤inin üzerine sa¤ tuflla bas›larak Yedekle (Backup) eleman› seçildi¤inde, fiekil 14’teki veritaban› AMAÇLARIMIZ yedekleme penceresi görüntülenir.

K ‹ T A P

K ‹ T A P

TELEV‹ZYON

TELEV‹ZYON

‹NTERNET

‹NTERNET

55

3. Ünite - Veritaban› Yönetimi

fiekil 3.15 pgAdmin: Veritaban› yedek alma program›.

Yedek alma ekran›nda öncelikle al›nacak yede¤in saklanaca¤› dosyay› seçmek gereklidir. Bu dosya baflka bir sistemde veya yedek sabit diskte saklanmal›d›r. Yani dosya hem üçüncü flah›slar›n eline geçmemeli hem de bir baflka ar›zadan etkilenip kaybolmamal›d›r. Örne¤in, veritaban› yedek dosyalar›n› veritaban› sunucusunda bulundurmak yanl›flt›r. Sistemdeki diskte oluflacak herhangi bir hata orijinal verilerle birlikte yedek dosyalar›n›n da kaybolmas›yla sonuçlanabilir ve al›nan yedekler kullan›lamaz duruma gelir. Yedek alma penceresindeki Biçim (Format) seçeneklerinden S›k›flt›rma (Compress) ve TAR dosya biçiminde saklama seçenekleri s›k kullan›lan yöntemlerdir. Ancak baz› durumlarda tüm sistemin de¤il sistemdeki baz› nesnelerin metin temelli dosya biçimlerinde yedeklerinin al›nmas› gerekebilir. Bu gibi durumlarda Yal›n (PLAIN) seçene¤i iflaretlenmelidir. Yedekleme biçimi olarak Yal›n seçene¤i iflaretlendi¤inde sisteme ait hangi bilgilerin yede¤inin al›naca¤› Yal›n Seçenekleri (PLAIN options) grubu alt›nda eriflilebilir hale gelir. Bu grupta s›ras›yla yaln›z veri, yalSIRA S‹ZDE n›z flema, sahipsiz, veritaban› oluflturma, veritaban› silme, tetikleri etkisiz hale getirme gibi seçenekler bulunmaktad›r. Yal›n seçene¤i kullan›larak al›nan yedek dosyas› herhangi bir metin düzenleyici program›nda, örne¤in notepad aç›D Ü fi Ü Nyaz›l›m›yla EL‹M larak görüntülenebilir. Dosyan›n içerisinde istenilen seçeneklere ait SQL komutlar› bulunmaktad›r. Yal›n yedek dosya kullan›larak sistemi geri alma ifllemi dosya S O R U içerisindeki bu SQL cümleciklerinin tekrar çal›flt›r›lmas› ile gerçeklefltirilir. Dikkat: Veritaban› yedeklerini veritaban› sunucusunda tutmay›n›z.

Veritaban›n› Yedekten Geri Yükleme

D Ü fi Ü N E L ‹ M S O R U

D‹KKAT

D‹KKAT

SIRA S‹ZDE

SIRA S‹ZDE

N N

Veritaban› sisteminde herhangi bir yaz›l›m veya donan›m ar›zas› oldu¤unda, önemli veriler bir flekilde silindi¤inde veya sistemin belirli bir andaki haline geri döndürülmesi gerekti¤inde, sistem en son yedek al›nd›¤› duruma döndürülebilir. Bunun AMAÇLARIMIZ

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

K ‹ T A P

TELEV‹ZYON

TELEV‹ZYON

56

Veritaban› Uygulamalar›

için bir yedek dosyas›na ihtiyaç vard›r. Ayr›ca yedek al›rken yedek dosyalar›n›n isimlerini yede¤in içerdi¤i veritaban› ve yede¤in al›nd›¤› tarihi içeren bir birleflimle verilmesi, eski haline alma an›nda yedek dosyalar›n›n hangisinin kullan›laca¤›n›n bulunmas›n› kolaylaflt›r›r. pgAdmin kullanarak veritaban›n›n yede¤inden sistemi eski durumuna döndürmek için öncelikle bir veritaban› oluflturulmal›d›r. Bu ifllem için var olan bir veritaban› da kullan›labilir ancak geri yükleme ifllemi var olan tablolar›n üzerine yazaca¤›ndan bofl bir veritaban› oluflturmak daha iyi olacakt›r. Sonras›nda nesne izleme alan›ndan yede¤in yüklenmek istenildi¤i veritaban› örne¤inin üzerine sa¤ fare tufluyla bas›larak Eski Haline Getir (Restore) eleman› seçilerek fiekil 15’teki eski haline getirme penceresi görüntülenir. fiekil 3.16 pgAdmin: Veritaban› yedek geri yükleme ekran›

Öncelikle hangi yedek dosyas› kullan›larak geri yükleme yap›lacaksa bu dosyan›n seçilmesi gereklidir. Geri yükleme iflleminin tüm veritaban›n› içermesi gerekmez. Yedek dosyas› içerisinde tablo yap›lar›, veriler, sahiplikler, tetikler gibi nesneler bulunmaktad›r. Geri yükleme an›nda bu nesnelerin tümünü veya seçilen herhangi birini kendi bafl›na yükleme olana¤› vard›r. Yedek dosyas› içerisindeki nesneleri görüntülemek için Göster (View) dü¤mesine bas›lmal›d›r. ‹stenilen seçimler yap›ld›ktan sonra Tamam (OK) dü¤mesine bas›larak geri yükleme ifllemi tamamlan›r. ‹fllem sonucu, Mesajlar (Messages) sekmesinde listelenir.

RAPORLAMA Veritaban› yönetim sisteminde, raporlama veritaban› yöneticilerinin yapt›klar› ifller aras›nda önemli bir yer tutmaktad›r. Sistemde bulunan nesnelerin yap›s›n› belgelendirmek için pgAdmin içerisindeki raporlama araçlar› kullan›labilir. Bu yöntemle istenilen nesne ile ilgili bilgiler belgelendirilmifl olur. Az önce oluflturulan AUDB veritaban›n›n özellikleriyle ilgili bir rapor olufltural›m. Raporlama ifllemine bafllamak için Nesne ‹zleme bölümünde (Object Browser)

57

3. Ünite - Veritaban› Yönetimi

AUDB veritaban› nesnesinin üzerine sa¤ fare tufluyla t›klanarak aç›lan menüdeki Raporlar (Reports) grubunun içinden, özellikler (Properties) rapor türünü seçelim. Bu ifllemden sonra raporun kaydedilece¤i dosyan›n ad› ve raporun özelliklerinin girilece¤i bir pencere ç›kacakt›r (fiekil 16). Pencerede, ç›k›fl biçimi (Output format) olarak, XML türünün seçilmesi, raporun herhangi bir ‹nternet izleyicisi üzerinden kolayl›kla görüntülenmesini sa¤layacakt›r. Ç›k›fl dosyas› ad› olarak uzant›s› “.xml” olacak flekilde herhangi bir isim yaz›labilir. Tamam butonuna bas›ld›¤› zaman Internet Explorer veya Firefox izleyicilerinden biri raporu ekranda görüntüleyecektir (fiekil 17). Raporda, veritaban›n› olufltururken girilen bütün veriler görülmektedir. XML türü dosya biçimi hakk›nda, ilerideki ünitelerde ayr›nt›l› bilgi verilecektir. fiekil 3.17 Özellikler (properties) raporunun oluflturulmas›

58

Veritaban› Uygulamalar›

fiekil 3.18 Veritaban› özelliklerinin görüldü¤ü özellikler raporu

3. Ünite - Veritaban› Yönetimi

Özet

N A M A Ç

1

N A M A Ç

2

N AM A Ç

3

PostgreSQL’in yönetim paneli olan pgAdmin program›nda sa¤lanan özellikleri kullanabileceksiniz. pgAdmin, PostgreSQL yaz›l›m›n›n yönetimi için kullan›lan programd›r. Veritaban› ifllemlerini görsel olarak yapmam›z› sa¤lar. pgAdmin görsel yap›lan ifllemleri SQL diline çevirerek çal›flt›r›r. pgAdmin yaz›l›m› çal›flt›r›ld›¤›nda, program penceresi üzerinde menü, nesne izleyicisi, nesnelerin özelliklerini gösteren özellikler ve SQL panosu bölümleri görülür. Nesne izleyicisi, pgAdmin taraf›ndan idare edilen veritabanlar›n› ve bunlar›n alt›ndaki nitelikler üzerinde gezinmemizi sa¤lar. Herhangi bir nesne üzerine t›klanarak seçilirse, özellikler bölümünde nesneyle ilgili bilgiler görülebilir. SQL panosu, görsel yap›lan ifllerin SQL karfl›l›¤›n› görmemizi sa¤lar. Herhangi bir veritaban› yönetim sistemiyle birlikte gelen yönetim yaz›l›m›ndaki özellikleri kullanabileceksiniz. Bütün veritaban› yönetim sistemlerinin yönetim yaz›l›mlar› bulunmaktad›r. pgAdmin program›nda oldu¤u gibi, SQL komutlar›n›n yaz›lmas›, yeni veritaban› oluflturulmas›, yeni tablolar eklenmesi gibi ifllemler yönetim yaz›l›mlar› sayesinde gerçeklefltirilebilmektedir. Yönetim programlar›n›n bir di¤er özelli¤i de, veritaban›n›n sa¤l›kl› flekilde kullan›labilmesi için rutin bak›m ifllemlerinin yap›labilmesini sa¤lamas›d›r. Yönetim program› üzerinden yeni bir veritaban›, veritaban› içine yeni tablolar, tablolara yeni kolonlar (alan) ekleyebileceksiniz. ‹liflkisel veritabanlar› içindeki temel veri öbekleri tablolard›r. Tablo pgAdmin yaz›l›m› üzerinden oluflturulabilir. Tablonun ismi, alfanümerik de¤erlerden oluflur ve ilk harfi alfabeden al›nmal›d›r. Veritaban›ndaki di¤er bir tablo, yeni oluflturulacak tabloyla ayn› ismi tafl›yamaz. Tablo oluflturulurken, kolonlar›n her birinin ismi ve veritipleri belirlenmelidir. E¤er istenirse, tablo alanlar›ndan biri her kay›t için eflsiz bir numara içermesi için birincil anahtar olarak tan›mlanabilir.

N A M A Ç

4

N A M A Ç

5

N A M A Ç

6

59

Veritaban› sunucusunda yap›labilecek bak›m ifllemlerini gerçeklefltirebileceksiniz. Veritaban›, sunucu sisteminde çal›flan bir yaz›l›m ve verilerin tutuldu¤u dosyalardan oluflur. Baz› durumlarda, veri dosyalar› içinden silinen veriler nedeniyle boflal›r ve içinde arama yapmak yavafllar. Bu nedenle, dosyalar›n VACUUM denilen bir ifllemle daha küçük hale getirilmesi ve gereksiz bilgilerin silinmesi gerekebilir. Veritaban›n›n tamam›n› veya bir k›sm›n› yedekleyebilecek, yedeklerden veritaban›n› yeniden oluflturabileceksiniz. Yedekleme ifllemi, verilerin kaybolmas›n› engelleyen temel ifllemlerden biridir. Günümüzde, veritaban› yöneticileri veritaban›nda yer alan tablolalar› s›k aralarla yedeklerler ve yedek dosyalar› baflka sistemlere tafl›rlar. Sistemde olabilecek bir ar›zada yedek dosyalar›nda yer alan veriler tekrar veritaban›na yüklenir. Veritaban›yla ilgili çeflitli raporlar› oluflturabileceksiniz. Veritaban›nda raporlama, veritaban›yla ilgili bilgilerin al›nmas› ve saklanmas›d›r. Veritaban›n›n temel ifllevi, veritaban›n›n yap›s›na dayan›r. Her tablonun yap›s›n›n ve bu tabloyu oluflturan SQL komutunun raporlanmas›, veritaban› yöneticilerine büyük kolayl›k sa¤lamaktad›r.

60

Veritaban› Uygulamalar›

Kendimizi S›nayal›m 1. Afla¤›dakilerden hangisi pgAdmin program›n›n görevlerinden biri de¤ildir? a. Veritaban› yedeklemesi b. Tablo oluflturma c. Kullan›c› silme d. Tablolar›n bulundu¤u disk hatalar›n› onarma e. Kay›t dosyalar›n› inceleme 2. pgAdmin ile ilgili afla¤›daki ifadelerden hangisi do¤rudur? a. pgAdmin, PostgreSQL veritaban›n›n temel bir bileflenidir. b. Veritaban› eriflimi için pgAdmin program›n› açmak yeterlidir. c. pgAdmin ile uzaktaki veritaban› sunucular› da yönetilebilir. d. pgAdmin, veritaban› üzerinde yap›lan de¤ifliklikleri do¤rudan dosya sistemi üzerinde yapar. e. pgAdmin, veritaban› nesnelerini kullan›c›dan gizleyerek güvenli¤i artt›r›r. 3. Afla¤›dakilerden hangisi pgAdmin ile oluflturulan gruplar›n özelliklerinden biri de¤ildir? a. Sistemde birden fazla grup olabilir. b. Her bir gruba farkl› yetkiler atanabilir. c. Bir kullan›c› birden fazla grupta yer alabilir. d. Bir grupta birden fazla kullan›c› bulunabilir. e. Bir veritaban› üzerinde en fazla bir grup yetkilendirilebilir. 4. Yeni bir veritaban› oluflturlurken seçilen özelliklerle ilgili afla¤›daki ifadelerden hangisi yanl›flt›r? a. Veritaban› ismi, oluflturulacak veritaban›n› sistemdeki di¤er veritabanlar›ndan ay›rt etmek için kullan›l›r. b. Veritaban› oluflturulduktan sonra oluflturma ekran›nda girilen baz› özellikler de¤ifltirilebilir. c. Veritaban›na farkl› dillerde veri girifli yap›lacakca karakter kodlamas› olarak UTF8 seçilir. d. Alan ad› verisi veritaban›n›n saklanaca¤› dizini belirlemekte kullan›l›r. e. Ba¤lant› s›n›r› -1 olarak b›rak›l›rsa veritaban›na geçici olarak ba¤lant›lar engellenir.

5. PosgreSQL veritaban›nda tablo oluflturmakla ilgili afla¤›daki ifadelerden hangisi do¤rudur? a. Tablo isimlerinde küçük-büyük karakter ayr›m› yap›lmaktad›r. b. Bir veritaban›ndaki bütün tablolar ayn› tablo alan› içerisinde bulunmal›d›r. c. Tablo isimlerinde 25 karakterlik uzunluk s›n›r› bulunmaktad›r. d. Oluflturulan tabloya yaln›z tabloyu oluflturan kullan›c›n›n eriflim hakk› vard›r. e. Tablo oluflturulma ekran›nda bofl girifl alan› b›rak›lamaz. 6. Tablo oluflturma iflleminde oluflturulacak kolonlarla ilgili afla¤›daki ifadelerden hangisi do¤rudur? a. Kolonlar isim s›ras›na göre oluflturulmal›d›r. b. Kolon isimlerinin ilk karakterleri kolonlar›n s›ra numaras› olarak verilmesi bir zorunluluktur. c. Tablo oluflturulduktan sonra yeni bir kolon ekleme ifllemi gerçeklefltirilebilir. d. Tamsay› tipinde kolon oluflturulurken uzunluk bilgisi girilebilecek en büyük tam say›y› belirlemede kullan›l›r. e. Kolon özelliklerinde “Not Null” seçildi¤inde tabloda o kolona ait sat›rlara varsay›lan olarak s›f›r de¤eri atan›r. 7. pgAdmin ile PostgreSQl veritaban› sunucusu durumunu izleme arayüzünden afla¤›daki bilgilerden hangisine ulafl›lamaz? a. Aktivite b. Günlük dosyalar› c. Tablolar›n kaplad›¤› disk alan›na d. Kilitlere e. Birim-ifllemlere

3. Ünite - Veritaban› Yönetimi

61

Kendimizi S›nayal›m Yan›t Anahtar› 8. Sunucu bak›m› ifllemleriyle ilgili afla¤›daki ifadelerden hangisi yanl›flt›r? a. Vakum’la, tablolarda kullan›mayan alanlar boflalt›l›r. b. Analiz ifllemiyle, tablolar ile ilgili istatistiki bilgiler güncellenir. c. Yeniden indeksleme ifllemiyle, var olan indeksler silinir ve yerlerine sistemin önerdi¤i yeni indeksler otomatik olarak oluflturulur. d. Dondurma ifllemiyle, salt okunur tablolarda iyilefltirme yap›l›r. e. Yeniden oluflturma ifllemiyle, var olan indeksler silinir ve ayn› flekilde tekrar oluflturulur. 9. Veritaban› yedeklemeyle ilgili afla¤›daki ifadelerden hangisi do¤rudur? a. Veritaban› yede¤i fazla yer tutmamas› için ancak ihtiyaç oldu¤uda al›nmal›d›r. b. Veritaban› yedek dosyalar› h›zl› eriflim için veritaban› sunucusu ile ayn› donan›m üzerinde bulunmal›d›r. c. Veritaban› yede¤ini tüm kullan›c›lara vermek verinin birden fazla kopyas›n› bulundurarak güvenli¤i art›rmas› sebebiyle daha avantajl›d›r. d. Bir veritaban›n›n yede¤i kullan›larak farkl› bir fiziksel makinede geri alma ifllemi yap›labilir. e. Veritaban›n› eski haline getirirken yede¤i al›nm›fl tüm nesnelerin beraber geri al›nmas› zorunludur. 10. Raporlama ifllemiyle ilgili afla¤›daki ifadelerden hangisi yanl›flt›r? a. Raporlama seçenekleri içerisinde kullan›c› aktiviteleri listeleme bulunmaktad›r. b. Raporlama sistemin dokümantasyonunun ç›kart›lmas›nda yararl› bir araçt›r. c. Raporlama araçlar› kullan›larak sistem eriflim güvenli¤i art›r›l›r. d. Raporlama seçenekleri içerisinde sunucu özellikleri listeleme bulunmaktad›r. e. Birden fazla biçimde rapor ç›kt›s› al›nabilir.

1. d 2. c 3. e 4. e 5. a 6. c 7. c

8. c 9. d 10. c

Yan›t›n›z yanl›fl ise “pgAdmin III Program›na Genel Bak›fl” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “pgAdmin III Program›na Genel Bak›fl” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “pgAdmin III Program›na Genel Bak›fl” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Yeni Veritaban› Oluflturma” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Tablo Oluflturma” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Tablo Oluflturma” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “PostgreSQL Sunucu Durumu ‹nceleme” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Sunucu Bak›m›” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Veritaban› Yedekleme” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Raporlama” bafll›kl› bölümü tekrar inceleyiniz.

S›ra Sizde Yan›t Anahtar› S›ra Sizde 1 fiekil 5’teki pencere üzerinde, arkadafllar›n›z›n isimlerin, ve telefon numaralar›n› tutan veritaban›n›n ismini giriniz. SQL sekmesinden, veritaban› oluflturmak için gerekli SQL program›n› görünüz.

Yararlan›lan ve Baflvurulabilcek Kaynaklar pgAdmin web sayfas›. http://www.pgadmin.org/. PostgreSQL resmi sitesi. http://www.postgresql.org/docs/. PostgreSQL Guide. http://www.postgresqlguide.com/.

VER‹TABANI UYGULAMALARI

4 Amaçlar›m›z

N N N N N

Bu üniteyi tamamlad›ktan sonra; ‹liflkisel veritaban›n›n hangi uygulamalarda yararl› oldu¤una karar verebileceksiniz. ‹liflkisel veritaban› uygulamalar›n› di¤er veritaban› türlerinden ay›rabileceksiniz. Bir veritaban›n› oluflturan temel bileflenleri listeleyebilecek iliflkisel veritaban› yönetim sisteminin nas›l çal›flt›¤›n› aç›klayabileceksiniz. Temel SQL sorgular› kurabileceksiniz. Veritaban› tasarlarken, temel normalizasyon kurallar›n› uygulayabileceksiniz.

Anahtar Kavramlar • • • • •

‹liflkisel veritabanlar› Tablo Kay›t Kolon Çokuzlu veri

• • • •

SQL Birincil anahtar Yabanc› anahtar Normalizasyon

‹çerik Haritas›

Veritaban› Uygulamalar›

‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›

• G‹R‹fi • ‹L‹fiK‹SEL VER‹TABANLARI • ‹L‹fiK‹SEL VER‹TABANLARININ TEMEL B‹LEfiENLER‹ • ‹L‹fiK‹SEL VER‹TABANI YÖNET‹M S‹STEMLER‹N‹N ÖZELL‹KLER‹ • YAPISAL SORGU D‹L‹NE (SQL) G‹R‹fi • B‹R ‹L‹fiK‹SEL VER‹TABANI TASARIMI VE OLUfiTURMA • B‹R‹NC‹L ANAHTAR (PRIMARY KEY) KAVRAMI • YABANCI ANAHTAR (FOREIGN KEY) KAVRAMI • VER‹TABANI NORMAL‹ZASYONUYLA VER‹TABANI TASARIMI

‹liflkisel Veritabanlar› ve Veritaban› Tasar›m› G‹R‹fi Profesyonel yaz›l›m uygulamalar›n›n ço¤unlu¤u büyük miktarda veri kullanarak çal›fl›r. Özellikle çevrimiçi çal›flan uygulamalar, iflle ilgili verileri bir yerde depolamak ve tüm bu verilere ihtiyaç duyuldu¤u anda h›zla eriflmek zorundad›r. Veriler bir metin dosyas›nda veya bir hesap tablosu dosyas›nda da tutulabilir; ancak büyük miktardaki veri içinden arama yapmak ve istenen bilgiye ulaflmak büyük bir ifllem gücü gerektirebilir. Kullan›lan ve de¤iflen verilerin depolanabilmesi için günümüzde kullan›lan en iyi yöntem, veritaban› yönetim sistemi kullanmakt›r. Verilerin gitgide fazlalaflmas› ve veri öbekleri aras›ndaki iliflkilerin karmafl›klaflmas›, tarihsel süreç içinde yeni veritaban› modellerinin ortaya ç›kmas›na neden olmufltur. ‹liflkisel veritaban› modelinin gelifltirilmesi ve bu modelin çal›flt›r›lmas› için gerekli altyap›y› sa¤layan veritaban› yönetim sistemlerinin çeflitli yaz›l›m firmalar› taraf›ndan sunulmas›yla, iliflkisel veritaban› uygulamalar› yayg›nlaflm›flt›r. ‹liflkisel veritaban›nda, bilgiler, tablo ad› verilen veri öbeklerinde tutulmakta ve tablolarda yer alan birbiriyle iliflkili kolonlar sayesinde, veri öbekleri aras›nda iliflkiler kurulmaktad›r. Bu bölümde iliflkisel veritabanlar›n›n temel özellikleri incelenecek ve SQL dilindeki komutlarla temel veritaban› ifllemlerinin nas›l yap›laca¤› anlat›lacakt›r. Ayr›ca, iliflkisel veritabanlar›n› etkin bir flekilde tasarlayabilmek için, tekrar eden verilerin ortadan kald›rmay› sa¤layan normalizasyon ifllemi üzerinde durulacakt›r.

‹L‹fiK‹SEL VER‹TABANLARI ‹liflkisel veritabanlar›, verilerin hiyerarflik olmayan bir yap›da ve sistematik bir flekilde grupland›r›larak depolanmas›na izin verir. ‹liflkisel veritabanlar›nda veriler tablolar halinde gruplan›r. Tablolar aras›ndaki iliflkiler, tablolarda bulunan kolonlar›n birbirleriyle iliflkilendirilmesiyle kurulur. Kurulan iliflkiler sayesinde, iliflkisel veritabanlar› büyük miktarda verinin verimli bir flekilde yönetilmesine izin verirler. Örnek olarak kiflilerin nüfus bilgileri bir tabloda, adres bilgileri ikinci bir tabloda, maafl bilgileri de baflka bir tabloda tutulabilir. Kiflinin sicil numaras› ile iliflkilendirerek farkl› tablodaki verilere eriflebilir, birlefltirebilir, yönetebilir ve de¤ifltirebiliriz. Veritaban› Yönetim Sistemleri (VTYS), veritabanlar›n› bar›nd›ran ve bunlar›n d›fl dünya ile ba¤lant›s›n› kuran sistemlerdir. Bu sistemler sayesinde veritabanlar›na hangi kullan›c›lar›n ba¤lanaca¤›, bu kullan›c›lar›n veritaban›na hangi bilgisayarlardan veya IP adreslerinden eriflebilece¤i, hangi kullan›c›lar›n hangi tablolara ne

64

Veritaban› Uygulamalar›

tür eriflim izinlerinin oldu¤u (örne¤in salt okuma, okuma-yazma, silme gibi) belirlenebilir. Yine bu sistemler veritaban› üzerindeki tablolar›n yedeklenmesi, kopyalanmas› ve raporlanmas› gibi bak›m ifllemlerini de yürütürler. Bir önceki ünitede, iliflkisel veritaban› yönetim sistemi olan PostgreSQL yaz›l›m› üzerinde durulmufl ve bir VTYS’nin kullan›c›lara sa¤lad›¤› olanaklarla ilgili pratik bilgilere sahip olmufltuk. Ücretsiz bir yaz›l›m olarak PostgreSQL, ticari iliflkisel veritaban› sistemlerinde sa¤lanan özelliklerin büyük bölümünü kullan›c›lar›na sunmaktad›r. Bu ünitedeki örnekler ve uygulamalar, PostgreSQL VTYS kullan›larak gerçeklefltirilecektir. ‹liflkisel veritabanlar›n›n yönetildi¤i sistemlere ‹liflkisel Veritaban› Yönetim Sistemi ad› verilir. Ticari olarak sunulan çok say›da iliflkisel veritaban› yönetim sistemi bulunmaktad›r. Bunlardan baz›lar›, Oracle, IBM DB2, Microsoft SQL Server, PostgreSQL, MySQL, Apache Derby, Firebird, FrontBase, HSQLDB, Informix Dynamic Server, Ingres, InterBase, Microsoft Access, Microsoft Visual Foxpro, Msql, Openbase, Panaroma, SmallSQL, SQLLite, Teradata, TxtSQL, Unidata ve Valentina’d›r. Bu sistemlerin hepsinin kendine özgü özellikleri, avantajlar› ve dezavantajlar› vard›r. Oracle, IBM DB2, Microsoft SQL Server gibi yaz›l›mlar ticari ürünlerdir ve ücretlidir. Baz›lar›n›n iflletim sistemi k›s›tlar› vard›r. Örne¤in, Microsoft SQL server, Microsoft Access ve FoxPro gibi sistemler sadece Microsoft iflletim sistemlerinde kullan›labilmektedir. Apache Derby ve PostgreSQL gibi yaz›l›mlar›n kaynak kodlar› aç›kt›r ve ücretsiz olarak kullan›labilir. Uygulama gelifltiricileri taraf›ndan kullan›lacak olan veritaban› yönetim sistemi proje isterlerine göre do¤ru bir flekilde seçilmeli ve uygulama buna göre gelifltirilmelidir.

‹L‹fiK‹SEL VER‹TABANLARININ TEMEL B‹LEfiENLER‹ Günümüzde gelifltirilen uygulamalarda en çok kullan›lan veritaban› modeli iliflkisel veritabanlar›d›r. Bir iliflkisel veritaban› afla¤›daki bileflenlerden oluflur: • Tablo (Table) • Kay›t (Record) • Kolon (Field) • Özellik (Attribute) Tablo iliflkisel veritabanlar› için temel bilgi öbe¤idir. Tablolar, kolonlardan (alan veya sütun olarak da adland›r›labilirler) oluflur. Tablolar›n her bir sat›r›na kay›t ad› verilir. Bir tabloda bulunan kay›tlar›n hepsinin biçimi ayn›d›r. fiekil 1’de örnek iliflkisel veritaban›n›n yap›s› verilmifltir. Bu yap› üzerinden giderek temel veritaban› bileflenleri ayr›nt›l› flekilde aç›klanacakt›r. ‹liflkisel veritaban› yönetim sistemlerinde genellikle tek bir veritaban› bulunmaz. Çünkü, bu sistemler birden fazla veritaban›n› ayn› anda yönetebilmek için tasarlanm›fllard›r. Bu nedenle iliflkisel veritaban› yönetim sistemlerinde her bir veritaban›n›n eflsiz (unique) bir ismi olmak zorundad›r. Örne¤in fiekil 1’de gösterilen veritaban›n›n ismi CografiBilgiler olarak belirlenmifltir ve veritaban› 3 adet tablodan oluflmaktad›r. Bu tablolara s›ras›yla Ülkeler, Şehirler ve Dağlar ismi verilmifltir. Her tablo çeflitli say›da kay›t içermektedir. Örne¤in, Daglar tablosunda dört adet kay›t bulunurken, Ulkeler tablosunda 3 kay›t vard›r. Tabloda tutulacak kay›tlar›n içeri¤ini belirleyecek olan ve asl›nda kolon bafll›klar›na karfl›l›k gelen veritaban› bileflenlerine ise özellik (attribute) ad› verilir. Bu özelliklerin her bir sat›rdaki karfl›l›¤›na ise alan (field) ad› verilir.

65

4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›

fiekil 4.1 Örnek bir iliflkisel veritaban› yap›s›

Ulkeler Tablosu UlkeID 1 90 93

Tablo Ad›: Ulkeler

Veritaban› Ad›: CografiBilgiler

Tablo Ad›: Sehirler

Tablo Ad›: Daglar

UlkeAdi A.B.D. Türkiye Afganistan

Sehirler Tablosu SehirID 1 2 3

UlkeID 93 1 90

SehirAdi Kabil New York City Ankara

Daglar Tablosu DagID 25 796 1288 1289

UlkeID 93 1 90 90

DagAdi Hindikufl Da¤lar› McKinley Da¤› A¤r› Da¤› Nemrut Da¤›

Tablolardaki kay›tlar›n her biri matematiksel aç›dan çokuzlu veri (tuple) halindedir. Her bir çokuzlu, tan›mlanm›fl veri tiplerine sahip alanlardan (field) oluflan s›ral› bir gruptur. Tablo içinde yer alan tüm çokuzlular ayn› say›da bileflene sahiptir. Örne¤in fiekil 1’deki Sehirler tablosu için her bir kay›t {SehirID, UlkeID, SehirAdi} biçiminde olmal›d›r. Bu biçime uygun olan kay›t örnekleri olarak, {1, 93, “Kabil”} ve {2, 1,”New York City”} verilebilir. Çokuzludaki alanlar, tablodaki kolonlarla s›ras›yla eflleflir. Çokuzludaki ilk alan kay›ttaki SehirID kolonuna, ikinci alan flehrin hangi ülkeye ait oldu¤unu belirten flehir kodunu gösteren UlkeID alan›na, üçüncüsü de fiehrin Ad›na karfl›l›k gelmektedir. Tablolardaki kay›t say›s› tablonun tasar›m›na göre de¤iflkenlik gösterebilir. Örne¤in bir tablodaki kay›t say›s› 10 iken, bir di¤erinde milyonlarca say›da olabilir. Bir tabloda, ayn› kolonda bulunan bütün de¤erler ayn› veri tipinde girilmelidir. Örne¤in bir kolonun veri tipi karakter olarak tan›mlanm›flsa ilgili sütundaki tüm veriler karakter tipindedir. Sehirler tablosunda bulunan kay›tlar›n birinci ve ikinci kolonlar› tamsay› (INT) biçiminde olmal›d›r. Üçüncü kolonda bulunan alan ise uzunlu¤u de¤iflken bir karakter dizisi (VARCHAR) olarak tan›mlanm›flt›r. Bu tan›mlamalar tabloyu olufltururken bir defaya mahsus olarak yap›l›r ve gerekmedikçe de¤ifltirilmezler. Özellikler (attributes), tablodaki kolonlar›n bafll›klar› olarak tan›mlanabilir. Örne¤in Ulkeler tablosunda ilk kolonunu tan›mlamak için kulland›¤›m›z UlkeID sözcü¤ü, bu tablonun ilk kolonundaki verilere eriflebilmek için kullan›l›r. Ayn› flekilde Daglar tablosundaki DagAdi sütunu Daglar tablosunun 3’üncü kolonuna verilmifl k›sa bir isim olarak düflünülebilir.

66

Veritaban› Uygulamalar›

‹L‹fiK‹SEL VER‹TABANI YÖNET‹M S‹STEMLER‹N‹N ÖZELL‹KLER‹ Üreticisi hangi firma olursa olsun tüm iliflkisel veritaban› yönetim sistemlerinde yap›lan ifllemler ufak farkl›l›klarla temelde ayn›d›r. Bu ifllemleri gerçeklefltirmek için SQL (Structured Query Language - Yap›land›r›lm›fl Sorgulama Dili) isimli standart bir dil kullan›lmaktad›r. Bütün veritaban› yönetim sistemlerinin destekledi¤i belli bafll› ifllemler flunlard›r: • Veritaban› oluflturma: ‹liflkisel veritaban› yönetim sistemleri genellikle birden fazla veritaban›n› yönetebilecek flekilde tasarlan›rlar. Gerek duyuldu¤unda, yeni bir veritaban› eklenebilir. • Kullan›c› oluflturma: ‹liflkisel veritaban› yönetim sistemlerinde birden fazla kullan›c› oluflturabilir ve kullan›c›lar›n haklar› veritaban› ve tablo düzeyinde belirlenebilir. • Temel tablo ifllemleri: Tabloya kay›t ekleme, kay›t düzeltme ve silme, sorgulama gibi ifllemler tablolar üzerinde yap›labilen temel ifllemlerdir. • Görüntü (View) oluflturma: Bir veya birden fazla tablodaki verilerin birlefltirildi¤i, ve tek bir tabloymufl gibi gösterildi¤i veritaban› özelli¤ine görüntü (view) ad› verilir. ‹liflkisel veritaban› yönetim sistemleri çok say›da görüntü oluflturulmas›na ve yönetilmesine olanak sa¤lamaktad›r. • Kullan›c›lar›n uzak bilgisayarlardan veritabanlar›na ve tablolara eriflmelerine izin verme: ‹liflkisel veritaban› yönetim sistemlerinin büyük bir k›sm›, a¤da bulunan veritabanlar›na TCP/IP protokolleri üzerinden uzaktan eriflilebilmesine izin verir. Güvenlik seviyesini yükseltmek için, a¤da bulunan veritabanlar›na ve tablolara kullan›c› baz›nda eriflim yetkileri tan›mlanabilir. • Birden fazla kullan›c› ve istemcinin ayn› veritaban› üzerinde ifllem yapabilmesini sa¤lama: Veritaban› yönetim sistemleri, tek bir veritaban›na ayn› anda birden fazla kullan›c›n›n ba¤lanmas›n› ve ayn› anda çok say›da ifllem yürütmesine izin verirler. Tablo kilitleriyle, çok kullan›c›l› sistemlerde oluflabilen veri tutars›zl›¤› giderilebilmektedir. • Tablo düzeyinde kullan›c› eriflim hakk› belirleme: ‹liflkisel veritaban› yönetim sistemleriyle, tablo düzeyinde kullan›c› yetkilendirilmesi yap›labilir. Bu yetki sayesinde sadece belirli kullan›c›lar taraf›ndan ilgili tablolar üzerinde ifllem yap›labilir. Di¤er kullan›c›lar›n herhangi bir ifllem yapmas›na izin verilmez. • Sorgu düzeyinde kullan›c› eriflim hakk› belirleme: ‹liflkisel veritaban› yönetim sistemleri, sorgu düzeyinde kullan›c› yetkilendirilmesini sa¤larlar. • ‹ndeks oluflturma: ‹ndeks oluflturma ifllemi, s›k kullan›lan kolonlardaki verilere h›zl› eriflim sa¤layabilmek için kullan›lan yöntemdir. ‹liflkisel veritaban› yönetim sistemleri tablolar üzerindeki çeflitli kolonlardaki veriler için indeks oluflturulmas›na izin verirler. • Veri s›k›flt›rma: ‹liflkisel veritabanlar› büyük miktardaki veriyi depolayacak ve eriflim sa¤layacak flekilde tasarlanm›flt›r. Verinin yerden tasarruf etmek için s›k›flt›r›lmas› ve bu flekilde depolanmas› iliflkisel veritaban› yönetim sistemlerinin ço¤unlu¤u taraf›ndan desteklenmektedir. • Veri optimizasyonu: ‹liflkisel veritabanlar›nda veriye en h›zl› flekilde ulaflabilmek için, arama a¤açlar› gibi çeflitli algoritmik yöntemler kullan›l›r. Bunlar sayesinde milyonlarca kay›t içinden aran›lan veriye çok k›sa sürede eriflilebilir.

4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›

67

• Yedekleme: ‹liflkisel veritabanlan› yönetim sistemleri, sistemde bulunan veritabanlar›n›n ve tablolar›n yedeklerini oluflturabilir ve herhangi bir felaket senaryosunun gerçekleflmesi durumunda veritabanlar›n› yedeklendikleri andaki durumlar›na getirirler.

YAPISAL SORGU D‹L‹NE (SQL) G‹R‹fi SQL (Yap›sal Sorgu Dili - Structured Query Language) dili, hemen hemen bütün veritaban› yönetim sistemlerinde geçerli olan veritaban› komut dilidir. Bir SQL program› ard›fl›k komutlardan oluflur. Her komut, sonlar›nda noktal› virgül bulunacak flekilde birden fazla kelimenin ard›fl›k halde dizilmesiyle oluflturulur. Komut içinde kullan›lan her bir kelime, SQL taraf›ndan kullan›lan bir anahtar sözcük, tan›mlay›c›, say› veya özel bir karakter olabilir. Kelimeler aras›nda boflluk b›rak›labilir veya komutun devam› alt sat›rda yaz›labilir. Örne¤in, afla¤›dakiler SQL dilinde geçerli komutlard›r: SELECT * FROM Ulkeler; UPDATE Ulkeler SET UlkeID = 5 WHERE UlkeID = 90; INSERT INTO Ulkeler VALUES (99, ‘Güney Afrika Cumhuriyeti’);

Yukar›daki komutlarda görülen, SELECT, FROM, UPDATE, SET, INSERT INTO, VALUES gibi kelimeler, SQL dilinde tan›ml› anahtar kelimelerdir. Anahtar kelimeler, büyük ve küçük harflere duyars›zd›r. Örne¤in, SELECT kelimesi, Select, select, SeLeCt olarak da yaz›labilir. UlkeID, Ulkeler gibi ifadeler, SQL dilinde tan›mlay›c›lar olarak isimlendirilir. E¤er gerekirse, bu tan›mlay›c›lar çift t›rnak iflaretleri aras›nda yer alabilirler. Örne¤in: SIRA S‹ZDE

SELECT * FROM “Ulkeler”; UPDATE “Ulkeler” SET “UlkeID” = 5 WHERE UlkeID = 90; D Ü fi Ü N E L ‹ M SIRA S‹ZDE INSERT INTO “Ulkeler” VALUES (99, ‘Güney Afrika Cumhuriyeti’); S O R U D Ü fi Ü N E L ‹ M

SQL dilinde arka arkaya yaz›lan komutlar›n kar›flmamas› için aralar›nda virgül D ‹ K K A noktal› T S O R U kullan›lmal›d›r. Noktal› virgül iflareti, komutun bitti¤ini gösterir. SIRA S‹ZDE

N N N N

Anahtar kelimelerin büyük ve küçük harflere hassas olmamas›na ra¤men, okuyan D ‹ K Kkomutu AT kiflinin komutu daha rahat anlayabilmesi için büyük harf kullan›lmas› iyi olacakt›r. AMAÇLARIMIZ SIRA S‹ZDE

Karakter dizileri (string) tek t›rnak içinde tan›mlan›r. Örne¤in yukar›daki örnekte, “INSERT INTO” ile bafllayan sat›rdaki ‘Güney Afrika Cumhuriyeti’ ifadesi bir karakter dizisidir. Nümerik de¤erler, tan›ml› veri tiplerine göre farkl› K ‹ Tflekilde A P yaz›labiAMAÇLARIMIZ lirler. Örne¤in, tamsay› (integer) olarak tan›mlanm›fl bir alana yaz›labilecek de¤erler flöyle olabilir: 3, 12, -45, +1001. Gerçek say›lar için yaz›labilecek de¤erler flöyledir: -1.23, .001, 1.4e-23, -1.2e+12. TKE L‹E VT ‹ ZA Y OP N

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M SIRA S‹ZDE S O R U D Ü fi Ü N E L ‹ M D‹KKAT S O R U

SIRA S‹ZDE D‹KKAT AMAÇLARIMIZ SIRA S‹ZDE

K ‹ T A P AMAÇLARIMIZ

T KE L ‹E VT‹ ZAY OPN

TELEV‹ZYON ‹NTERNET

TELEV‹ZYON ‹NTERNET

‹NTERNET

‹NTERNET

68

Veritaban› Uygulamalar›

Tablo oluflturma (CREATE): Tablo oluflturma ifllemi CREATE komutuyla gerçeklefltirilen bir ifllemdir. Tablo oluflturulurken tabloda bulunacak olan alanlar›n özellikleri, her sat›rda kaç kolon (alan) bulundu¤u, kolonlarda bulunan verilerin tipleri, birincil anahtar ve yabanc› anahtar tan›mlamalar› CREATE komutunda yer al›r. Bir tablo oluflturmak için verilmesi gereken komut flöyledir: CREATE TABLE TabloAdi ( kolon1 veritipi, kolon2 veritipi, kolon3 veritipi, ); Kolon isimleri, kolon1, kolon2 ve kolon3 olarak yaz›lm›flt›r. Kolondaki verilerin tipi, veritipi bölümünde tan›mlanmal›d›r. Veritipleri, VTYS’lerin anlad›¤› tiplerden biridir. Örne¤in, character (harf), character varying (karakter dizisi), integer (tamsay›), bigint (büyük tamsay›), real (gerçek say›), date (tarih) ve benzeri veri tipleri geçerlidir. Tablodan veri getirme (SELECT): Tablodan veri getirme ifllemi SELECT komutu kullan›larak gerçeklefltirilir. Bu sorgu çeflitli parametreler al›r ve bunlara göre kay›tlar›n ilgili alanlar›n›n veritaban›ndan getirilmesini sa¤lar. SELECT tabloadi.alan1,tabloadi.alan2 FROM tabloadi SELECT komutunda, sorguda döndürülecek alanlar›n aralar›nda virgül olmal›d›r. Tablonun alt›ndaki alan› göstermek için, “tabloadi.alan” biçimi kullan›l›r. FROM ifadesi, verilerin hangi tablodan getirilece¤ini belirtir. SELECT komutu, koflullu hale de getirilebilir. WHERE kelimesinden sonra koflul ifadesi yaz›labilmektedir. Hatta, SELECT komutu, birden fazla tablodaki verileri de sorgulayabilir ve koflula uyanlar› getirebilir. Ulkeler tablosundaki UlkeID alan›ndaki de¤er 5’ten büyükse, UlkeID alan›ndaki de¤erleri getiren sorgu flöyledir: SIRA S‹ZDE

1

D Ü fi Ü N E L ‹ M

D Ü fi Üveri NEL‹M Tablolara ekleme (INSERT): ‹liflkisel veritabanlar›nda, genellikle tablolar dinamik içeri¤e sahiptir ve yeni kay›tlar›n eklenmesi gerekebilir. SQL dilinde tan›ml› olan INSERT S O R U komutu, herhangi bir tabloya yeni bir kay›t eklemek için kullan›lmaktad›r. Örne¤in, Ulkeler tablosuna yeni bir ülke eklenecekse, afla¤›daki komut kullan›labilir:

S O R U

D‹KKAT

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ SIRA S‹ZDE K ‹ T A P

Sehirler tablosundan, SIRA S‹ZDE flehir ad› ‘Ankara’ olan kayd›n sehirID de¤erini getiren SQL komutunu yaz›n›z.

INSERT INTO Ulkeler SIRA S‹ZDE VALUES (99, ‘Güney Afrika Cumhuriyeti’);

N N

2

AMAÇLARIMIZ

S‹ZDE yeni bir kay›t ekleyen SQL komutunu yaz›n›z. SehirlerSIRA tablosuna K ‹ T A P

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

TELEV‹ZYON S O R U

TELEV‹ZYON S O R U

D‹KKAT ‹NTERNET

D‹KKAT ‹NTERNET

69

4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›

Tablolarda var olan verileri güncelleme (UPDATE): Bir tabloda bulunan kayd›n bir veya daha fazla alan›nda yer alan verilerin de¤ifltirilmesi ifllemidir. Bu ifllem için SQL dilinde UPDATE komutu kullan›l›r. Ülke numaras› 99 olan ülkenin numaras›n› 92 yapmak için kullan›lan SQL komutu flöyle olmal›d›r: UPDATE Ulkeler Set UlkeID = 92 WHERE UlkeID = 99; UPDATE kelimesinden sonra hangi tablolarda de¤ifliklik yap›laca¤› belirtilir. SET kelimesi alana atanacak yeni de¤eri verirken, WHERE de¤ifliklik yap›lacak kay›tlar›n hangi koflula göre seçilece¤ini gösterir. S‹ZDE ‹smi ‘Güney Afrika Cumhuriyeti’ olan ülkenin ismini ‘Güney Afrika’SIRA olarak de¤ifltiren SQL komutunu yaz›n›z.

3

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

Tablolarda var olan verileri silme (DELETE): DELETE komutu, bir tabloda var olan kay›tlar›n silinmesi için kullan›l›r. Komut, WHERE anahtar kelimesiyle birS O R U 99 olan ülkelikte kullan›ld›¤›nda, koflula uygun olan kay›tlar› siler. Ülke numaras› nin kayd›n› silmek için afla¤›daki SQL komutu kullan›labilir: DELETE FROM Ulkeler WHERE UlkeID = 99;

S O R U

D‹KKAT

D‹KKAT

SIRA S‹ZDE

SIRA S‹ZDE

N N

Tablo birlefltirme (JOIN): SELECT komutu ile birlikte kullan›lan bu yap› sayesinde birden fazla tablodaki birbiriyle iliflkili verilerin birlefltirilerek getirilmesi sa¤AMAÇLARIMIZ lanmaktad›r. Bu ifllemi gerçeklefltirmenin birden fazla yolu vard›r. S›kl›kla kullan›lan yöntemlerden biri SELECT sorgusuyla birlikte INNER JOIN ve OUTER JOIN ifadelerini kullanmakt›r. Birbiriyle iliflkili tablolar›n tek bir tabloK olarak ‹ T A Pgösterilmesi, ilerideki ünitelerde ayr›nt›l› bir flekilde anlat›lacakt›r. Tablo yap›s›n› de¤ifltirme (ALTER): Bu ifllem veritaban›nda tan›ml› olan tablolar›n yap›s›n›n de¤ifltirilmesini sa¤lar. Bu ifllemi var olan tabloya T E L E V ‹ Z Yyeni O N kolonlar eklemek veya olan bir kolonu tan›mdan ç›karmak için kullanabiliriz. ‹fllemin gerçeklefltirilmesi için kullan›lan ALTER TABLE komutudur. Afla¤›daki SQL komutu, Ulkeler tablosuna integer tipinde nufus isimli yeni bir alan eklemektedir. ‹ N T E R NTABLE ET Alanlar›n özelliklerinde yap›lmas› istenen de¤iflikliklerinde ALTER komutu kullan›labilmektedir.

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

TELEV‹ZYON

‹NTERNET

ALTER TABLE Ulkeler ADD COLUMN nufus integer; UlkeIsim alan›n›n maksimum 50 karakterlik uzunlukta olacak flekilde “character varying” tipinde tan›mland›¤›n› düflünelim. Maksimum uzunlu¤u 100 yapmak için gerekli komut flöyle olmal›d›r: ALTER TABLE Ulkeler ALTER COLUMN UlkeIsim SET DATA TYPE character varying (100); SIRA say›s›n› S‹ZDE 150’ye ç›Sehirler tablosundaki SehirAdi alan›ndaki maksimum karakter karacak SQL komutunu yaz›n›z.

4

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

S O R U

S O R U

D‹KKAT

D‹KKAT

70

Veritaban› Uygulamalar›

Tablo silme (DROP): DELETE iflleminden farkl› olarak DROP anahtar kelimesiyle yap›lan ifllem bir tablonun veya herhangi bir veritaban› nesnesinin tamamen veritaban›ndan ç›kar›lmas›d›r. Afla¤›daki SQL komutu, Ulkeler tablosunu silmektedir: DROP TABLE Ulkeler;

SIRA S‹ZDE

SIRA S‹ZDE

DROP sadece tablolar›n silinmesi için kullan›lmamaktad›r. Veritaban›n› da afla¤›daki SQLD Ükomutunda oldu¤u gibi silinebilmektedir. fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

DROP DATABASE CografiBilgiler;

S O R U

S O R U

D ‹ Kkullan›rken KAT DROP ifllemini dikkat ediniz. Sildi¤iniz tablo veya veritaban›n›n geri al›nmas›, yede¤iniz olmad›¤› sürece imkans›z olabilir.

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

N N

K ‹ T A P

TELEV‹ZYON

‹NTERNET

SIRA S‹ZDE

B‹R ‹L‹fiK‹SEL VER‹TABANI TASARIMI VE OLUfiTURMA

AMAÇLARIMIZ Veritaban›ndaki tablolar tasarlanmadan önce depolanmas› istenen verinin düzenli bir flekilde modellenebilmesi son derece önemlidir. Modelleme esnas›nda dikkat edilmesi gereken en önemli noktalardan biri depolanacak verilerin do¤ru bir flekilK ‹ T A PÖrne¤in fiekil 1’deki tasar›mda depolanacak verilerin, Ulkeler, de gruplanmas›d›r. Sehirler ve Daglar olmak üzere 3 grup ya da baflka bir ifadeyle 3 ayr› tablo alt›nda topland›¤› görülebilmektedir. T E L E Vdikkat ‹ Z Y O N edilmesi gereken bir di¤er özellik ise gruplanan veriler aras›nTasar›mda daki iliflkilerin nas›l kuruldu¤udur. Örne¤in Sehirler tablosunda depolanan bir flehir bilgisinin hangi ülkeye ait oldu¤unu gösterecek bir sütun bulundurulmal›d›r. Bu sütunda‹ Nflehrin T E R N E Tbulundu¤u ülkenin UlkeID de¤eri referans gösterilerek, tablolar aras›nda iliflki kurulmal›d›r. Bu alandaki bilgiler arac›l›¤›yla Sehirler ve Ulkeler tablolar› kullan›larak bir flehrin bulundu¤u ülkeye kolayca eriflim sa¤lanabilir.

Ülkeler Tablosu

Bu tablo ülke kodlar› ve ülke isimlerinin tutulmas› için tasarlanm›flt›r. UlkeID kolonunda, her bir ülke için eflsiz bir ülke kodu verilmektedir. ‹kinci kolonda ise ülkelerin isimleri tutulmaktad›r. Bu tablonun tasar›m yap›s› Tablo 1’de verilmifltir. Ülkelerin nüfuslar›, yüzölçümleri gibi özellikler de bu tabloya eklenebilirdi, fakat tasar›m›n basit olmas› aç›s›ndan Ulkeler tablosu sadece ülke isimlerini tutacak flekilde tasarlanm›flt›r. Tablonun ilk sütunu olan UlkeID, Birincil Anahtar (Primary Key) olarak tan›mlanm›flt›r. Birincil anahtar kolonu, her kay›t, di¤er bir deyiflle her ülke için eflsiz bir numara bulundurur. ‹lerideki ünitelerde birincil anahtar konusu ayr›nt›l› flekilde incelenecektir. Tablo 4.1 Ulkeler tablosunun yap›s›

Sütun Ad›

Sütun Tipi

UlkeID(Birincil Anahtar)

integer

UlkeAdi

varchar(50)

Tablo Ad›: Ulkeler

71

4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›

Ulkeler tablosu içindeki veriler afla¤›daki gibi olabilir: UlkeID

UlkeAdi

1

A.B.D.

20

M›s›r

32

Belçika

49

Almanya

90

Türkiye

93

Afganistan

...

...

Tablo 4.2 Ulkeler tablosunun örnek içeri¤i

Ulkeler tablosunu oluflturmak için gerekli olan SQL komutu afla¤›da verilmifltir. CREATE TABLE Ulkeler ( UlkeID integer PRIMARY_KEY, UlkeAdi varchar(50) NOT NULL );

Tablo 1’de görülen sütun tipleri, kolondaki içeri¤in hangi veri tipinde oldu¤unu belirler. Örnek olarak UlkeID sütunu integer olarak belirlenmifltir. Bu ifade, tabloya eklenecek sat›rlardaki UlkeID’ye karfl›l›k gelen sütunlar›ndaki bütün de¤erlerin tamsay› cinsinden olmas› gerekti¤ini belirtir. Tablodaki di¤er sütun olan UlkeAdi ise, ülke isimleri de¤iflken uzunlukta olabilece¤i için varchar(50) olarak tan›mlanm›flt›r. Bu ifade de¤iflken uzunluktaki karakter dizilerini temsil eder. Varchar ifadesinin yan›ndaki 50 say›s› bu sütünda bulunan karakter dizilerinin 50 karakteri aflmamas›n› garanti alt›na al›r.

Sehirler Tablosu

Ulkeler tablosuna benzer olarak Sehirler tablosu flehir bilgilerini depolamak için tasarlanm›flt›r. Tablo, 3 sütundan oluflmaktad›r. ‹lk sütun olan SehirID’de her bir flehir için farkl› olacak flekilde bir tamsay› de¤er tutulur. Bu de¤erin tabloya kaydedilen Sehirler için farkl› olmas› gerekmektedir. Bunu garanti alt›na almak için SehirID alan› birincil anahtar olarak tan›mlanm›flt›r. Tablonun ikinci sütunu olan UlkeID ise tabloda kay›tl› bulunan flehirlerin hangi ülkenin flehri oldu¤unu tutar. Bu sütundaki kay›tlar›n her biri Ulkeler tablosundaki UlkeID alan›na bir referans olarak düflünülebilir. Tan›mlanan referans de¤er sayesinde Sehirler tablosundaki flehir bilgisi Ulkeler tablosundaki veriyle birlefltirilerek bir flehrin hangi ülkeye ait oldu¤u bulunabilir. Üçüncü sütun olan SehirAdi’na ise flehir isimleri tutulmaktad›r. Sehirler tablosunun tasar›m› Tablo 3’te verilmifltir. Sütun Ad›

Sütun Tipi

SehirID((Birinci Anahtar)

integer

UlkeID((Yabanc› Anahtar)

integer

SehirAdi

varchar(50)

Tablo Ad›: Sehirler

Tablo 4.3 Sehirler tablosunun yap›s›

72

Veritaban› Uygulamalar›

Sehirler tablosunu oluflturmak için gerekli olan SQL komutu flöyledir: CREATE TABLE Sehirler ( SehirID integer PRIMARY_KEY, UlkeID integer, SehirAdi varchar(50), FOREIGN KEY (UlkeID) REFERENCES Ulkeler(UlkeID) ON UPDATE CASCADE ON DELETE CASCADE );

Tablo 3’deki tasar›mda dikkat edilmesi gereken en önemli nokta UlkeID sütununun yan›ndaki yabanc› anahtar ifadesidir. Bu ibare Sehirler tablosundaki UlkeID kolonunun Yabanc› Anahtar (Foreign Key) olarak tan›mland›¤›n› gösterir. Yabanc› anahtar olarak tan›mlanan sütunlarda bulunan de¤erler genelde baflka tablolarda bulunan birincil anahtarlara referans göstermek için kullan›l›r. Referans gösterme ifllemi sayesinde birincil anahtarda yap›lacak de¤ifliklikler üzerinde çeflitli ön tan›ml› yap›land›rmalar yap›labilir. Örne¤in Ulkeler tablosunda bir ülkenin UlkeID’si de¤iflti¤inde otomatik olarak Sehirler tablosunda o UlkeID’ye sahip olan flehirlerde UlkeID de¤erlerinin de¤iflmesini sa¤layabiliriz. Yabanc› anahtar kavram› üzerinde ünitenin ilerleyen k›s›mlar›nda detayl› olarak durulacakt›r.

Daglar Tablosu

Daglar tablosu yap› olarak Sehirler tablosunun benzeridir. Bu tablo ülkelerde bulunan da¤lar›n isimlerini depolamak için tasarlanm›flt›r. Daglar tablosu 3 sütundan oluflmaktad›r. ‹lk sütun olan DagID’de her bir da¤ için farkl› olacak flekilde bir tamsay› de¤er tutulur. Bunu garanti alt›na almak için DagID alan› birincil anahtar olarak tan›mlanm›flt›r. Bunun sayesinde Daglar tablosuna ayn› DagID de¤erine sahip kay›tlar›n eklenmesi engellenmifl olur. Her kay›t için farkl› bir numara olmas›n› veritaban› yönetim sistemi sa¤lamaktad›r. Tablonun ikinci sütunu olan UlkeID ise tabloda kay›tl› bulunan da¤›n hangi ülkeye ait oldu¤unun bilgisini tutar. Bu sütundaki kay›tlar›n herbiri Ulkeler tablosundaki UlkeID alan›na bir referans olarak düflünülebilir. Tan›mlanan bu referans de¤er sayesinde Daglar tablosundaki flehir bilgisi Ulkeler tablosundaki veriyle birlefltirilerek bir da¤›n hangi ülkeye ait oldu¤u bilgisi bulunabilir. Üçüncü sütun olan DagAdi’nda ise da¤lar›n isimleri tutulmaktad›r. Tablonun tasar›m› Tablo 4’te verilmifltir: Tablo 4.4 Daglar tablosunun yap›s›

Sütun Ad›

Sütun Tipi

DagID((Birincil Anahtar)

integer

UlkeID((Yabanc› Anahtar)

integer

SehirAdi

varchar(50)

Tablo Ad›: Daglar

4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›

Daglar tablosunu oluflturmak için gerekli olan SQL komutu flöyle olmal›d›r: CREATE TABLE Daglar ( DagID integer PRIMARY_KEY, UlkeID integer, DagAdi varchar(50), FOREIGN KEY (UlkeID) REFERENCES Ulkeler(UlkeID) ON UPDATE CASCADE ON DELETE CASCADE );

Yukar›daki tasar›mda dikkat edilmesi gereken en önemli nokta UlkeID sütununun yan›ndaki Yabanc› Anahtar ibaresidir. Bu ibare Daglar tablosundaki UlkeID sütununun Yabanc› Anahtar (Foreign Key) olarak tan›mland›¤›n› gösterir. Ulkeler tablosunda bir ülkenin UlkeID’si de¤iflti¤inde otomatik olarak Daglar tablosunda o UlkeID’ye sahip olan flehirlerinde UlkeID de¤erlerinin de¤iflmesini sa¤layabiliriz.

B‹R‹NC‹L ANAHTAR (PRIMARY KEY) KAVRAMI

CografiBilgiler veritaban›nda, her ülkenin ülke kodu do¤al olarak birbirinden farkl› olaca¤› için, Ulkeler tablosunda UlkeID alan› birincil anahtar olarak tan›mlanm›flt›r. Yine benzer olarak Sehirler ve Daglar tablolar›nda da s›ras›yla SehirID ve DagID kolonlar› birincil anahtar olarak yer almaktad›r. Genel olarak tablolar modellenirken birincil anahtar olarak vatandafll›k numaralar›, sosyal güvenlik numaralar› ve ehliyet numaralar› gibi, tek bir kifliye verildi¤i bilinen numaralar tercih edilir. Bu tip alanlar birincil anahtar olarak kullan›lmaya uygun alanlard›r. Tablolardaki kay›tlar için, TC kimlik numaras› veya sosyal güvenlik numaras› örneklerinde oldu¤u gibi do¤al flekilde birincil anahtar›n tan›mlanamad›¤› durumlarda, veritaban› yönetim sisteminin sa¤lad›¤› çeflitli fonksiyonlar kullan›labilir. Bu fonksiyonlar sayesinde veritaban› yönetim sisteminin, tabloya eklenen her bir kay›t için eflsiz bir de¤er üretmesi sa¤lanabilir. PostgreSQL veritaban› yönetim sisteminde bu tip durumlar için sunulan çözüm, Tablo oluflturulurken birincil anahtar olan alan›n SERIAL veri tipinde tan›mlanmas›d›r. Bu flekilde, yeni bir kay›t eklenmesi s›ras›nda o kolon için tablodaki di¤er kay›tlar›n sahip olmad›¤› eflsiz bir de¤er otomatik olarak üretilir. Örne¤in Ulkeler tablosundaki ülke kodlar›n›n tutuldu¤u UlkeID alan›nda bulunacak de¤erlerin PostgreSQL veritaban› yönetim sistemi taraf›ndan otomatik olarak üretilmesi istenirse, Ulkeler tablosu afla¤›daki gibi oluflturulmal›d›r: CREATE TABLE Ulkeler ( UlkeID SERIAL PRIMARY_KEY, UlkeAdi varchar(50) NOT NULL );

Tablo 2’deki tablo verileri göz önüne al›n›rsa, bu flekilde tan›mlanan Ulkeler tablosuna UlkeID de¤eri 49 olan baflka bir kay›t eklenemeyecekti. Çünkü UlkeID sütunu birincil anahtar olarak tan›mlanm›flt›r ve bu sütunda 49 de¤erine sahip sadece tek bir kay›t olabilir. Bu kay›t tabloda oldu¤u için tasar›m nedeniyle ayn› numaradan yeni bir ülke kayd›n›n eklenmesine VTYS izin vermez.

73

74

Veritaban› Uygulamalar›

YABANCI ANAHTAR (FOREIGN KEY) KAVRAMI Bir tablonun birincil anahtar› baflka bir tablonun da bir alan›nda kullan›l›yorsa, bu alan Yabanc› Anahtar (Foreign Key) olarak kullan›labilir. Yabanc› Anahtar tan›mlamalar› iliflkisel veritaban›n› “iliflkisel” olmas›n› sa¤layan en temel unsurlardan biridir. Yabanc› anahtar oluflturmak iste¤e ba¤l›d›r. Örnek olarak A tablosunun Birincil Anahtar›’n›n B tablosunda Yabanc› Anahtar olarak kullan›labilmesi için B tablosunu olufltururken FOREIGN KEY ve REFERENCES anahtar sözcü¤ü ile A tablosunun ilgili alan› B tablosunun ilgili alan›na ba¤lanmas› gereklidir. FOREIGN KEY anahtar sözcü¤ü bir alan›n bafl›na getirildi¤inde o alan›n yabanc› anahtar oldu¤unu gösterir. REFERENCES anahtar sözcü¤ü ise ilgili yabanc› anahtar›n referans gösterilece¤i tablo ve alan›n tan›mlanabilmesini sa¤lar. Örnek olarak yukar›daki tablo tasar›m›nda Sehirler tablosunun UlkeID sütunu yabanc› anahtar olarak tan›mlanm›flt›r. UlkeID sütunu Ulkeler tablosunda birincil anahtar oldu¤u için bu tan›mlamay› yapabiliriz. Bir baflka deyiflle birincil anahtar olmayan alanlar baflka tablolarda yabanc› anahtar olarak tan›mlanamaz. Yabanc› anahtar tan›mlamalar› bizi çeflitli zorluklardan kurtar›r. Yabanc› Anahtar atamas› sayesinde, örne¤in, Ulkeler tablosundan bir ülke silindi¤i zaman bu ülkeye ait olan flehirlerin de Sehirler tablosundan otomatik olarak silinmesini sa¤layabiliriz. Bunun tam tersini de yapmak mümkündür. Örne¤in bir ülke için bir veya birden fazla flehir bilgisi oluflturulmuflsa ülke bilgisinin do¤rudan silinmesini engelleyebiliriz. Görüldü¤ü gibi yabanc› anahtarlar›n as›l kullan›m amac› veri tutarl›l›¤›n› sa¤lamakt›r. Ayr›ca, do¤ru yap›lm›fl yabanc› anahtar atamalar› bizi gereksiz sorgulardan kurtar›r. Yabanc› anahtarlar›n kullan›m amaçlar› ve bu amaçlar› gerçeklefltirebilmek için veritaban› yönetim sisteminde tablolar yarat›l›rken kullan›lmas› gereken anahtar sözcüklerin aç›klamalar› ve kullan›mlar›na dair örnekler afla¤›da verilmifltir.

ÖRNEK 4.1

Ulkeler tablosunda bulunmayan bir ülke için Sehirler tablosuna flehir bilgisi girilemesin. Bu ifllem için Sehirler tablosu oluflturulurken tablodaki UlkeID de¤erinin Ulkeler tablosuna referans gösterilmesi yeterli olacakt›r. Bunun için Sehirler tablosunu oluflturmak için afla¤›daki SQL komutu kullan›labilir. CREATE TABLE Sehirler ( SehirID integer PRIMARY_KEY, UlkeID integer, SehirAdi varchar(50), FOREIGN KEY (UlkeID) REFERENCES Ulkeler(UlkeID) );

ÖRNEK 4.2

Ulkeler tablosundan bir ülke silindi¤inde Sehirler tablosunda o ülkeye ait olan kay›tlar›n da otomatik olarak silinmesini sa¤layal›m. Bu ifllem için Sehirler tablosu oluflturulurken tablodaki UlkeID de¤eri Ulkeler tablosunda referans gösterildikten sonra ON DELETE CASCADE komutunun afla¤›daki gibi kullan›lmas› gerekmektedir.

4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›

75

CREATE TABLE Sehirler

(

SehirID integer PRIMARY_KEY, UlkeID integer, SehirAdi varchar(50), FOREIGN KEY (UlkeID) REFERENCES Ulkeler(UlkeID) ON DELETE CASCADE

);

Ulkeler tablosundan bir ülke silinmek istendi¤inde, e¤er Sehirler tablosunda o ülkeyi referans gösteren baflka kay›tlar bulunuyorsa silme iflleminin gerçeklefltirilmemesini sa¤layal›m.

ÖRNEK 4.3

Bu ifllem için ON DELETE RESTRICT komutunun afla¤›daki SQL komutundaki gibi kullan›lmas› gerekmektedir: CREATE TABLE Sehirler ( SehirID integer PRIMARY_KEY, UlkeID integer, SehirAdi varchar(50), FOREIGN KEY (UlkeID) REFERENCES Ulkeler(UlkeID) ON DELETE RESTRICT ); Ulkeler tablosundan bir ülkenin UlkeID de¤eri de¤iflti¤inde Sehirler tablosunda o ülkenin içindeki flehirlerin kay›tlar›n›n UlkeID de¤erleri otomatik olarak de¤iflsin. Bu ifllem için Sehirler tablosu oluflturulurken tablodaki UlkeID de¤eri Ulkeler tablosunda referans gösterildikten sonra güncelleme iflleminin sa¤lanmas› için ON UPDATE CASCADE komutunun kullan›lmas› gerekmektedir. CREATE TABLE Sehirler ( SehirID integer PRIMARY_KEY, UlkeID integer, SehirAdi varchar(50), FOREIGN KEY (UlkeID) REFERENCES Ulkeler(UlkeID) ON UPDATE CASCADE );

VER‹TABANI NORMAL‹ZASYONUYLA VER‹TABANI TASARIMI Veritaban› yönetim sistemleri, programc›lara veritaban› ifllemleri konusunda destek sa¤lasa da, veritaban›n›n tasar›m› uygulama gelifltiricilerinin sorumlulu¤undad›r. Uygulama yaz›l›mlar›n›n baflar›s›, arka tarafta kullan›lan veritaban›n›n iyi flekilde tasarlanmas›na ba¤l›d›r. Veritaban›nda hangi verilerin depolanaca¤› konusu uygulamay› kullanacak kiflilerin talepleri do¤rultusunda belirlenmekle birlikte, tablolar aras›ndaki iliflkiler ve tablolardaki alanlar›n belirlenmesi ifli programc›lar›n inisiyatifindedir. Etkin çal›flan bir veritaban› tasar›m›n›n sistematik olarak gerçekleflti-

ÖRNEK 4.4

76

Veritaban› Uygulamalar›

rilmesi için, veritaban› normalizasyonu (ayr›flt›rma) olarak bilinen bir süreç iflletilir. Normalizasyon, çok say›da kolondan oluflan tablolarda veri tekrar›n› engelleyebilmek için bu tablolar›n daha az kolondan oluflan atomik tablolara ayr›flt›r›lmas› ifllemi olarak tan›mlanabilir. Normalizasyon veritaban›nda bulunan tablolardaki kolonlar›n hangi alanlardan oluflaca¤›na karar vermeyi de içerir. Genel olarak kabul görmüfl 5 normalizasyon kural› vard›r. Veritaban› tasar›m› yaparken, bu kurallar›n uygulanmas› zorunlu olmamakla beraber ilk 3 tanesinin kullan›m›nda büyük fayda bulunmaktad›r. Bu bölümde, bahsi geçen 5 normalizasyon kural›n›n ilk 3 tanesinden bahsedilecektir. Son iki normalizasyon kural› her ne kadar veri tekrar›n› azaltsa da tablolar›n okunabilirli¤ini düflürdü¤ü için nadiren kullan›l›r. 1. Normalizasyon Kural›: Veritaban›ndaki tablolarda bir sat›rda bulunan bir alan sadece tek bir bilgi içerebilir. Örne¤in bir YONETMENBILGILERI tablosunda yönetmenlerin çekmifl olduklar› filmlerin bilgisini tutmak istedi¤imizi düflünelim. Bu filmleri FILM1, FILM2 diye ayr› ayr› sütunlarda tutmak ilk normalizasyon kural›na ayk›r›d›r. Afla¤›da bu kurala uygun olmayan bir tablo tasar›m› verilmektedir. Tablo 4.5 Birinci normalizasyon kural›na uymayan tablo tasar›m›

YONETMENID

YONETMENADI

UYRUK

FILM1

FILM2

FILM3

1

Steven Spielberg

A.B.D

Er Ryan’› Kurtarmak

E.T.

Az›nl›k Raporu

2

Robert Zemeckis

A.B.D

Gelece¤e Dönüfl

Mesaj

Forrest Gump

3

Akira Kurosowa

Japonya

Yedi Samuray

Yojimbo

Rashomon

...

...

...

...

...

...

TabloAd›: YONETMENB‹LG‹LER‹

Tablo 5’te gösterilen tasar›mdaki s›k›nt›, 100 tane film çekmifl bir yönetmen için 100 ayr› sütunun tan›mlanmas›n›n gerekmesidir. Böyle bir tasar›m, hem tablo yönetimini zorlaflt›racak, hem de tek bir film çekmifl yönetmen için 99 tane bofl sütun oluflmas›na sebep olacakt›r. Tasar›m›n bir numaral› kurala uygun olmas› için, yönetmenlerin çektikleri film bilgilerinin kolonlara de¤il de sat›rlara yay›lmas› gereklidir. Tablo 4.6 Birinci normalizasyon kural›na uygun tablo tasar›m›

YONETMENID

YONETMENADI

UYRUK

FILM

1

Steven Spielberg

A.B.D.

Er Ryan’› Kurtarmak

1

Steven Spielberg

A.B.D.

E.T.

1

Steven Spielberg

A.B.D.

Az›nl›k Raporu

2

Robert Zemeckis

A.B.D.

Gelece¤e Dönüfl

2

Robert Zemeckis

A.B.D.

Mesaj

3

Robert Zemeckis

A.B.D.

Forrest Gump

3

Akira Kurosowa

Japonya

Yedi Samuray

3

Akira Kurosowa

Japonya

Yojimbo

3

Akira Kurosowa

Japonya

Rashomon

...

...

...

...

Tablo Ad›: YONETMENLER

77

4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›

YONETMENLER tablosunun içeri¤inin Tablo 6’daki hale getirilmesi, birinci normalizasyon kural›na uygundur. Bu kural›n uygulanmas›yla ayn› türden veriler tek bir sütunda depolan›r hale gelmifltir. 2. Normalizasyon Kural›: Bu normalizasyon kural› ana tablodaki birincil anahtarlarla ba¤lant›s› olan sütunlar› baflka tablolara ayr›flt›rmam›z› önerir. Bu durumda ayr› bir tabloda tutup yönetmen numaras›na referans gösterilmesi gibi bir çözüm gerçeklefltirilebilir. Bu durumda 2 farkl› tabloya ihtiyac›m›z olacakt›r. YONETMENID

YONETMENADI

UYRUK

1

Steven Spielberg

A.B.D.

2

Robert Zemeckis

A.B.D.

3

Akira Kurosowa

Japonya

...

...

Tablo 4.7 Yonetmenler tablosu ID ve isim tutacak flekilde oluflturulmufltur.

TabloAd›: YONETMENBILGISI

FILMID

YONETMENID

FILMADI

1

1

Er Ryan’› Kurtarmak

2

1

E.T.

3

1

Az›nl›k Raporu

4

2

Gelece¤e Dönüfl

5

2

Mesaj

6

2

Forrest Gump

7

3

Yedi Samuray

8

3

Yojimbo

9

3

Rashomon

...

...

...

TabloAd›: FILMLER

Bu tablo tasar›m›nda filmin hangi yönetmen taraf›ndan çekildi¤ini bulabilmek için FILMLER tablosundaki YONETMENID sütünundan ilgili ID’ye bak›p YONETMENBILGISI tablosundan ilgili yönetmenin kayd›na ulaflmam›z gerekmektedir. Birinci normalizasyon kural›na uygun olan bu tasar›mda, bir yönetmen için herhangi bir k›s›tlama olmadan s›n›rs›z say›da film depolanabilmektedir. 3. Normalizasyon Kural›: Bu normalizasyon kural› ana tablodaki birincil anahtarlarla ba¤lant›s› olmayan sütunlar› baflka tablolara ayr›flt›rmam›z› önerir. Örne¤in ana tablodaki UYRUK kolonu böyle bir aland›r. Bu normalizasyon kural› uyguland›¤›nda ek bir tablo oluflturulmas›na gerek duyulur. Kural uyguland›¤›nda tablolar›n içerikleri Tablo 9’da verilmifltir.

Tablo 4.8 YONETMENLER tablosunun ikinci k›sm›d›r.

78

Veritaban› Uygulamalar›

Tablo 4.9 Üçüncü normalizasyon kural›na uygun olarak tan›mlanm›fl UYRUKBILGISI tablosu.

UYRUKID

UYRUKADI

1

A.B.D.

2

A.B.D.

3

Japonya

... UYRUKBILGISI TabloAd›:U

Tablo 4.10 YONETMENBILGISI tablosunun üçüncü normalizasyon kural›na göre ayr›flt›r›ld›ktan sonraki durumu.

YONETMENID

YONETMENADI

UYRUKID

1

Steven Spielberg

1

2

Robert Zemeckis

1

3

Akira Kurosowa

2

...

...

TabloAd›: YONETMENBILGISI

Üçüncü normalizasyon kural›nda FILMLER tablosunda her hangi bir de¤ifliklik bulunmamaktad›r. Bu tablonun içeri¤i Tablo 4.7 ile ayn›d›r. YONETMENBILGISI tablosundaki tekrar eden uyruk sütunlar› için yeni bir tablo haz›rlanarak tablo içinden uyruk tablosuna referans gösterilmesi sa¤lanm›flt›r. Bunun sonucunda uyruk adlar› tek bir tabloda tutulacak ve YONETMENBILGISI tablosundan UYRUK tablosuna UYRUKID referans›yla eriflim sa¤lanacakt›r.

4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›

79

Özet

N A M A Ç

1

N AM A Ç

2

‹liflkisel veritaban›n›n hangi uygulamalarda yararl› oldu¤una karar verebileceksiniz. ‹liflkisel veritaban› modeli, günümüzde kullan›lan bir çok veritaban› uygulamas›nda baflar›yla kullan›lmaktad›r. Veri tekrar›n› engelleyecek flekilde verilerin birbiriyle iliflkili tablolarda tutulmas›, sorgu h›z›n› art›rmakta ve veritaban› performans›n› yükseltmektedir. ‹liflkisel veritaban› uygulamalar›n› di¤er veritaban› türlerinden ay›rabileceksiniz. Hiyerarflik ve a¤ modellerinde, çoktan çoka veri modellerinde s›k›nt›lar yaflanmakta ve iliflkisel veritaban› modeli daha iyi sonuç vermektedir. Ancak, birbirine ba¤l› binlerce tablonun bulunmas› ve çok say›da tabloyu ilgilendiren sorgulamalarda, örne¤in veri madencili¤i gibi uygulamalarda, iliflkisel veritaban› modeli iyi çal›flmamaktad›r. Bu nedenle, veri madencili¤i uygulamalar›nda farkl› modeller kullan›lmaktad›r.

N A M A Ç

3

N A M A Ç

4

Bir veritaban›n› oluflturan temel bileflenleri listeleyebilecek ve iliflkisel veritaban› yönetim sisteminin nas›l çal›flt›¤›n› aç›klayabileceksiniz. ‹liflkisel veritaban› sistemlerinde, veriler tablo ad› verilen yap›larda tutulur. Her tablo, farkl› say›da alandan veya di¤er bir deyiflle özellikten oluflur. Tabloya veri girilirken, alanlara karfl›l›k gelen de¤erler, o alan›n veri tipinde girilerek kay›tlar oluflturulur. Farkl› tablolar›n kolonlar› aras›ndaki iliflkiler, iliflkisel veritaban›n›n en temel tasar›m özelli¤idir. Temel SQL sorgular› kurabileceksiniz. SQL (Yap›sal Sorgu dili), 1980’lerde gelifltirilen ve günümüzde yayg›n flekilde kullan›lan uluslararas› bir standarda dayal› veritaban› sorgu dilidir. Veritaban› yönetim sistemlerinin büyük bir k›sm›, SQL dilini standartlara uygun flekilde destekler. SQL diliyle, veritaban› ve içinde tablolar oluflturulabilir, farkl› koflullara dayal› sorgular kurulabilir, veritaban› veya tablo silinebilir, kay›t eklenebilir, silinebilir ve de¤ifltirilebilir. Bir kaç sat›rl›k komutlar sayesinde, veritaban›nda çok say›da kayd› ilgilendiren ifllemler kolayl›kla gerçeklefltirilebilir.

80

Veritaban› Uygulamalar›

Kendimizi S›nayal›m 1. ‹liflkisel veritaban› sistemlerinde iliflkiler afla¤›dakilerden hangisiyle sa¤lan›r? a. ‹ki ayr› veritaban›nda yer alan ve ayn› isimdeki tablolar›n kullan›lmas›yla b. Tablo içinde yer alan kolonlar›n özelliklerine göre c. Farkl› tablolarda tekrar eden kay›tlar›n eklenmesiyle d. Farkl› tablolardaki kolonlar aras›ndaki iliflkilerle e. ‹ndeks dosyalar›n›n kullan›lmas›yla 2. Veritaban›nda sorgu yapmaya yarayan SQL komutu afla¤›dakilerden hangisidir? a. SELECT b. UPDATE c. DROP d. INSERT INTO e. CREATE 3. Veritaban›n›n silinmesi için kullan›lan SQL komutu afla¤›dakilerden hangisidir? a. DELETE b. DROP c. UPDATE d. INSERT INTO e. ALTER TABLE 4. ID de¤erinin iki ayr› tabloda birbiriyle iliflkili flekilde tutuldu¤uvarsay›m›yla, bir tablodaki bir ID de¤eri de¤iflti¤inde di¤er tabloda yer alan kay›tlardaki ID de¤erininde de¤iflmesi için, CREATE TABLE komutunda yer almas› gereken komut afla¤›dakilerden hangisidir? a. ON UPDATE CASCADE b. ON DELETE RESTRICT c. ON DELETE CASCADE d. ON UPDATE RESTRICT e. ON UPDATE DELETE

5. SQL komutlar›nda kullan›lan SERIAL anahtar kelimesinin ifllevi nedir? a. Kolonun birincil anahtar olarak kullan›lmas›n› sa¤lamak b. Eklenen kay›tlar›n, s›rayla veritaban›na eklenmek c. Yabanc› anahtar de¤erlerinin otomatik olarak oluflturulmak d. Yeni bir kay›t eklendi¤inde, eflsiz bir say›n›n bir kolon için otomatik olarak üretilmesini sa¤lamak e. Kolonlara tamsay› de¤erini vermek 6. CREATE TABLE iflleminin içinde yer alan, “FOREIGN KEY (UlkeID) REFERENCES Ulkeler(UlkeID)” ifadesinin anlam› afla¤›dakilerden hangisidir? a. Ulkeler tablosunda sadece yabanc› anahtar bulundu¤unu belirtir. b. Ulkeler tablosundaki UlkeID kolonunun birincil anahtar oldu¤unu gösterir. c. Tablo içinde yer alan UlkeID kolonunun, Ulkeler tablosundaki UlkeID kolonuyla iliflkili oldu¤unu belirtir. d. UlkeID alan›n›n yabanc› anahtar ve birincil anahtar olarak tan›mland›¤›n› anlat›r. e. Ulkeler tablosunda yabanc› anahtar bulunmad›¤›n› gösterir. 7. Çeflitli SQL komutlar›n›n içinde bulunan WHERE anahtar kelimesinin ifllevi nedir? a. Hangi tablo üzerinde ifllem yap›laca¤›n› belirtmek b. ‹fllemin yap›lmas› için gerekli koflulu göstermek c. ‹fllemin, hangi veritaban›nda uygulanaca¤›n› göstermek d. Hangi sunucuda ifllemin gerçeklefltirilece¤ini belirtmek. e. Hangi kolonlar aras›nda iliflki oldu¤unu göstermek.

4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›

8. Veritaban› normalizasyonunun temel amac› afla¤›dakilerden hangisidir? a. Uygulama yaz›l›mlar›n›n h›zl› çal›flmas›n› sa¤lamak b. Veritaban› yönetim sisteminin h›z›n› art›rmak c. Kay›tlar›n tablolar›n eklenmesinde kullan›lacak k›s›tlamalar› gerçeklefltirmek d. Veritaban› tasar›m›nda tablolarda hangi verilerin tutulaca¤›na karar vermek e. Tablolardaki tekrar eden verileri ortadan kald›rmak 9. Bir tabloya yeni bir alan eklemek için kullan›lan komut afla¤›dakilerden hangisidir? a. SELECT * FROM Ulkeler; b. ALTER TABLE Ulkeler ALTER COLUMN UlkeID; c. DROP TABLE Ulkeler; d. DELETE TABLE ALTER UlkeID; e. ALTER TABLE Ulkeler ADD COLUMN nufus integer; 10. ‹ndeks oluflturma iflleminin amac› afla¤›dakilerden hangisidir? a. Kay›tlardaki tekrar eden verilerin bulunmas›n› sa¤lamak b. Kay›tlar› h›zl› bir flekilde ekleyebilmek c. S›k kullan›lan kolonlardaki verilere h›zl› eriflim sa¤layabilmek d. Veritaban›n›n kaplad›¤› sabit disk alan›n› azaltmak e. Tablolar› h›zl› bir flekilde yaratabilmek

81

82

Veritaban› Uygulamalar›

Kendimizi S›nayal›m Yan›t Anahtar›

S›ra Sizde Yan›t Anahtar›

1. d

S›ra Sizde 1 “SELECT sehirIID FROM Sehirler WHERE sehirAdi = ‘Ankara’ “ komutuyla, Sehirler tablosundan, flehir ad› ‘Ankara’ olan kayd›n sehirID de¤erini getirebilirsiniz.

2. a 3. b 4. a

5. d 6. c

7. b 8. e

9. e 10. c

Yan›t›n›z yanl›fl ise “Girifl” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Yap›sal Sorgu Diline (SQL) Girifl” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Yap›sal Sorgu Diline (SQL) Girifl” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Birincil Anahtar (Primary Key) Kavram›” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Bir iliflkisel Veritaban› Tasar›m›” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Birincil Anahtar (Primary Key) Kavram›” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Yap›sal Sorgu Diline (SQL) Girifl” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Yabanc› Anahtar (Foreign Key) Kavram›” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Yap›sal Sorgu Diline (SQL) Girifl” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “‹liflkisel Veritaban› Yönetim Sistemlerinin Özellikleri” bafll›kl› bölümü tekrar inceleyiniz.

S›ra Sizde 2 “INSERT INTO Sehirler VALUES (102, 99, ‹stanbul');” komutuyla Sehirler tablosuna yeni bir kay›t ekleyebilirsiniz. S›ra Sizde 3 “UPDATE Ulkeler SET UlkeAdi = ‘Güney Afrika’ WHERE UlkeAdi = ‘Güney Afrika Cumhuriyeti’;” komutuyla istenen ifllem gerçeklefltirilebilir. S›ra Sizde 4 “ALTER TABLE Sehirler ALTER COLUMN SehirAdi SET DATA TYPE character varying(150);” komutuyla istenen ifllem gerçeklefltirilebilir.

4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›

Yararlan›lan ve Baflvurulabilecek Kaynaklar P. Revesz (2010.) Introduction to Databases. New York, Springer, G. C. Simsion and G. C. Witt (2005.) Data modeling essentials, 3rd ed, Amsterdam ; Boston: Morgan Kaufmann Publishers, www.vikipedi.org Seminer.linux.org.tr Belgeler.linux.org.tr PostgreSQL dokümanlar› http://www.postgresql.org/docs/8.4/

83

5

VER‹TABANI UYGULAMALARI

Amaçlar›m›z

N N N N N

Bu üniteyi tamamlad›ktan sonra; SQL diliyle ve C++, C# ve Java gibi yordamsal diller aras›ndaki fark› aç›klayabileceksiniz. Bir anda yap›lmas› gereken SQL komutlar›ndan oluflan hareketi kurabileceksiniz. Tetik fonksiyonlar›n ifllevini aç›klayabileceksiniz. PL/pgSQL dilinde yaz›lm›fl programlar› çal›flt›rabileceksiniz. SQL proglamlama dilinde s›k kullan›lan komutlar› listeleyebileceksiniz.

Anahtar Kavramlar • • • •

SQL dili INSERT DELETE PL/PgSQL

• • • •

SELECT UPDATE Hareket (transaction) Tetikler (triggers)

‹çerik Haritas›

Veritaban› Uygulamalar›

Temel Sol Kavramlar› ve Komutlar›

• G‹R‹fi • SQL KOMUTLARI NASIL ÇALIfiTIRILIR • SQL KAVRAMLARI • SQL VER‹ T‹PLER‹ • SQL D‹L‹NDE FONKS‹YONLAR VE ‹fiLEÇLER • SQL KOMUTLARI • SELECT, INSERT INTO, UPDATE, DELETE

Temel SQl Kavramlar› ve Komutlar› G‹R‹fi SQL (Yap›sal Sorgu Dili), iliflkisel veritabanlar›yla ilgili bütün ifllemleri gerçeklefltirmek üzere gelifltirilen standartlaflm›fl bir programlama dilidir. Yazd›¤›m›z SQL komutlar›yla veritaban› yönetim sistemine ne istedi¤imizi belirtiriz. ‹stedi¤imiz verilerin nas›l getirilece¤i, SQL komutlar›nda bulunmaz. Bu anlamda, Java, C#, C ve C++ gibi programlama dillerinde yaz›lan programlardaki gibi, yap›lacak ifl ad›mlar halinde, di¤er bir deyiflle, algoritmik olarak belirtilmez. Veritaban› yönetim sistemleri verileri nas›l bulaca¤›n› kendisi belirler. Bu anlamda, SQL dili Java ve C# gibi programlama dillerine göre daha üst seviyeli bir dildir. Bir önceki ünitede, temel SQL komutlar›yla ilgili k›sa bir girifl yapm›fl ve SELECT, UPDATE, INSERT INTO gibi komutlar› tek tablo üzerine uygulayarak çeflitli örnekler vermifltik. Ancak, birden fazla tablodan veri getirilmesi söz konusu oldu¤unda, SQL komutlar› oldukça karmafl›k olabilir. SQL dilinde çeflitli amaçlarla kullan›lan çok say›da anahtar kelime ve komut oldu¤u unutulmamal›d›r. Bu ünitede, temel SQL kavramlar› anlat›ld›ktan sonra yayg›n olarak kullan›lan SELECT, UPDATE ve INSERT INTO gibi komutlar›n kullan›m› ayr›nt›l› flekilde ifllenecektir. Ünitenin içinde verilecek örneklerin uygulanmas› için, Türkiye ‹statistik Kurumu (TÜ‹K) verilerine dayanan ve dört tablodan oluflan örnek bir veritaban› oluflturulmufltur. TÜ‹K, Türkiye’yle ilgili istatistikler üreten ve kamuya web sitesi üzerinden sunan bir kurumdur. ‹statiksel bilgilere, http://www.tuik.gov.tr/ adresinden “veritabanlar›” ba¤lant›s›na t›klanarak eriflilebilir. Site, web sayfalar›nda girilen kriterlere göre, Excel veya PDF doküman› üretmektedir. Bu bilgiler kullan›larak bu kitapta kullan›lacak örnek veritaban› oluflturulmufltur. Yedek (backup) olarak kaydedilen bu veritaban›, http://www.anadolu.edu.tr/kitap/ornek.backup adresinden indirilebilir. ‹lk olarak, pgAdmin program›yla AUDB isimli veritaban› yarat›lmal›d›r. Nesne izleyicisi (Object Browser) içinden AUDB veritaban› üzerine sa¤ t›klayarak, “Restore” (yedekten yükleme) opsiyonu seçilmeli (fiekil 1) ve ard›ndan gelen pencerede ornek.backup dosyas› seçilerek OK (tamam) tufluna bas›lmal›d›r.

Programlama dillerinin seviyesi, insan diline olan yak›nl›¤›yla ölçülür. En yüksek seviyeli programlama dili insan dilidir. E¤er bilgisayarlar insan dilini anlayacak ve insanlar›n cümlelerle belirtti¤i iflleri yapabilecek duruma geldiklerinde, günümüzde kulland›¤›m›z programlama dillerine gerek duyulmayacakt›r.

86

Veritaban› Uygulamalar›

fiekil 5.1 Örnek veritaban›n›n yüklenmesi

Örnek veritaban›, dört tablodan oluflmaktad›r. Bu tablolar›n isimleri, ifllevleri ve tan›ml› alanlar› flöyledir: • iller: ‹l isimleri, illerdeki erkek ve kad›n nüfus bilgileri yer almaktad›r. • dogumist2008: 2008 y›l›n›n illere ve cinsiyete göre do¤um istatistiklerini içermektedir. • ilogrdurum: 2009 y›l›na ait illere göre 10 farkl› ö¤renim durumu ve cinsiyete göre nüfus bilgileri bulunur. • ogrdurum: on farkl› ö¤renim durumunun kodlar›n› ve aç›klamalar›n› içermektedir. ilogrdurum tablosunda kullan›lan kodlar›n aç›klamalar› bulunur. Veritaban›ndaki tablolar aras› iliflkiler fiekil 2’de görülebilir. ‹ller ve nüfuslar›n›n bulundu¤u iller tablosundan al›nan örnek veriler Tablo 1’de, dogumist2008 tablosundaki veriler Tablo 2’de yer almaktad›r. ‹llere ve ö¤renim durumlar›na göre kifli say›lar›, erkek ve kad›n olarak Tablo 3’te gösterilmektedir. iller tablosundaki id alan›, di¤er tablolarla ortak kullan›lan bir aland›r. Örne¤in, ö¤renim durumunu içeren ilogrdurum tablosunda bulunan ilid de¤eri kullan›larak, iller tablosundan ilin ismine ve nüfus bilgilerine eriflilebilir. Tabloda yer alan ogrdrmid kolonu, ogrdurum tablosundaki aç›klamalara iflaret etmektedir (Tablo 4). Tablo 3’te, 258inci sat›rda yer alan ve Eskiflehir’deki (ilid=26) 8 nolu ö¤renim durumundaki kifli say›s› 4220’dir. Sekiz numaral› ö¤renim durumunun Tablo 4’teki aç›klamas›na bak›l›rsa, Eskiflehir’deki yüksek lisans› derecesine sahip kifli say›s›n›n 4220 oldu¤u anlafl›labilir. fiekil 5.2 Örnek veritaban› yap›s›

iller id: smallint (PK) iladi: character varying(255) nufus: integer nufuserkek: integer nufuskadin: integer

dogumist2008 ilid: integer (PK) sayierkek: integer sayikadin: integer

ilogrdurum durumid: serial (PK) ilid: integer ogrdrmid: integer sayitoplam: integer sayierkek: integer sayikadin: integer ogrdurum ogrdrmid: integer aciklama: character varying(255)

87

5. Ünite - Temel SQL Kavramlar› ve Komutlar›

iller id

iladi

nufus

1 2 3 4

Adana Ad›yaman Afyon A¤r›

2062226 588475 701326 537665

nufuserkek

nufuskadin

1029640 294213 348194 280000

1032586 294262 353132 257665

dogumist2008 ilid

sayierkek

sayikadin

1 2 3 4

19670 6169 5094 6383

40621 12718 10556 13428

1 2 3 4 5 . 258 .

1 1 1 1 1 . 26 .

ogrdrmid sayitoplam 1 2 3 4 5 . 8 .

148634 398108 480531 211000 84733 ... ... ... 4220 ... ... ...

sayierkek

sayikadin

29472 197196 235663 111116 51534 ... ... ... 2173 ... ... ...

119162 200912 244868 99884 33199 ... ... ... 2047 ... ... ...

ogrdurum ogrdrmid 1 2 3 4 5 6 7 8 9 10

Tablo 5.2 2008 y›l›n do¤um istatistikleri örnek veriler

Tablo 5.3 ilogrdurum tablosunun içeri¤i

ilogrdurum durumid ilid

Tablo 5.1 iller tablosu örnek veriler

aciklama Okuma yazma bilmeyen Okuma yazma bilen fakat bir okul bitirmeyen ‹lkokul mezunu ‹lkö¤retim mezunu Ortaokul ve dengi okul mezunu Lise veya dengi okul mezunu Yüksekokul veya fakülte mezunu Yüksek lisans mezunu Doktora mezunu Bilinmiyor

Tablo 5.4 Ö¤renim durumu listesi

88

Veritaban› Uygulamalar›

SQL KOMUTLARI NASIL ÇALIfiTIRILIR? Oluflturaca¤›m›z SQL komutlar›n› veritaban› üzerinde çal›flt›rmak için, pgAdmin program› bize görsel bir arayüz sunar. Herhangi bir SQL komutunu çal›flt›rmak için, pgAdmin’de nesne izleyicisi içinde AUDB veritaban›n›n üzerinde sa¤ fare tufluna t›klay›nca ç›kan menüde “CREATE SCRIPT” opsiyonunu seçiniz (fiekil 3). Karfl›n›za SQL komutlar›n› yazabilece¤iniz bir pencere ç›kacakt›r. Pencerede, AUDB veritaban›n› olufltururken kullan›lan “CREATE DATABASE”le bafllayan SQL komutu bulunmaktad›r. SQL komutunu yazmak için, pencerede görünen program› tamamen siliniz (fiekil 4). fiekil 5.3 pgAdmin SQL editörünün seçilmesi

fiekil 5.4 SQL editörü

89

5. Ünite - Temel SQL Kavramlar› ve Komutlar›

SQL editöründe SQL komutlar› iki flekilde girilebilir. Bu kitapta kullan›lacak olan birinci yöntemde, SQL editörü sekmesindeki alanda SQL komutu do¤rudan yaz›labilir. ‹kinci yöntem, grafik sorgu arayüzü kullanmakt›r. SQL editör sekmesinin yan›nda yer alan “Graphical Query Builder” bölümünde, tablolar grafik arayüz üzerinden birbirine ba¤lanarak çeflitli komutlar türetilebilmektedir. Ancak, bu yöntem bu kitapta gösterilmeyecektir. SQL editöründe, “SELECT * from ilogrdurum” komutunu yazd›ktan sonra, menüdeki Query eleman›n›n alt›nda “Execute Query” (Sorguyu Çal›flt›r) opsiyonunu seçerek veya do¤rudan F5 tufluna basarak komutu çal›flt›rabilirsiniz. Komut çal›flt›r›l›nca pencerenin alt›nda bulunan “Data Output” (Veri Ç›kt›lar›) bölümünde sonuçlar gösterilecektir (fiekil 5). SELECT komutunda yer alan * harfiyle tablodaki bütün alanlar›n getirilmesi istendi¤inden, tabloda yer alan bütün de¤erler pencerenin alt k›sm›nda kolonlar halinde verilmektedir. fiekil 5.5 Komutun çal›flt›r›lmas› ve sonuçlar›n elde edilmesi

SQL KAVRAMLARI SQL dili, ilk kullan›ld›¤› dönemden itibaren düzenli bir geliflim seyri izlemifltir. Standartlar, iliflkisel veritabanlar›n› kullanan uygulama gelifltiricilerin yeni taleplerine ve gereksinimlerine göre ilerleme göstermifltir. Bu bölümde, tarihsel geliflim içinde gereksinimlere göre standartlara eklenen kavramlar anlat›lacakt›r.

Hareket (Transaction) Hareket (transaction), ayn› anda s›rayla yap›lmas› gereken birden fazla ifllemin tek bir seferde yap›lmas›d›r. Yar›da kesilmesi durumunda veri tutars›zl›¤› gerçekleflen ifllemlerden oluflur. Örne¤in, yeni il yap›lan bir ilçenin oldu¤u bir durumu düflünelim. ‹l yap›lan ilçenin nüfusunun, daha önce ba¤l› oldu¤u il nüfusundan ç›kar›lmas› ve ard›ndan da iller tablosuna yeni bir kay›t eklenmesi gereklidir. Bu iki ifllemin yap›lmas› s›ras›nda, ifllemlerden birinin hata vererek yap›lamamas›, tablodaki veri tutarl›l›¤›n› ortadan kald›racakt›r. Yap›lamayan ifllem nedeniyle, iller tablosundaki nüfus de¤erlerinin toplam› Türkiye’nin nüfusuna karfl›l›k gelmeyecektir. Hareket kullanan bir SQL komutunun örne¤i, fiekil 6’da gösterilmektedir. fiekil’de de gös-

90

Veritaban› Uygulamalar›

Veritaban› terminolojisinde, hareketin bölünmeyen (atomic), tutarl› (consistent), izole (isolated) ve dayan›kl› (durable) olmas› ve koflullar›n ilk harfleri bir araya getirildi¤inde ACID (Türkçe olarak AS‹T) olarak bilinen koflulu sa¤lamas› gereklidir.

terildi¤i gibi, hareketlerin gerçeklefltirilmesiyle ilgili çal›flt›r›lan SQL komutlar›n›n s›ras› flöyledir: 1. Hareketi bafllatmak için BEGIN komutu kullan›l›r 2. Birden fazla sorgu ve veri de¤iflikli¤i ifllemi arka arkaya yap›l›r. 3. E¤er hata yoksa, di¤er bir deyiflle bütün ifllemler hatas›z gerçeklefltiyse, hareket içinde yer alan ifllemler veritaban›na, COMMIT komutuyla uygulan›r ve d›flar›daki kullan›c›lar ancak bundan sonra de¤ifltirilen verilere eriflirler. 4. E¤er hata varsa ve ifllemlerden biri bile yap›lamad›ysa, daha veritaban›na uygulanmadan ROLLBACK komutuyla hareket sonland›r›l›r ve yap›lan ifllemler iptal edilir.

fiekil 5.6 Antalya’n›n de¤erlerini de¤ifltiren ve Alanya ilinin bilgilerini ekleyen hareket

BEGIN; UPDATE iller SET nufus=755427, nufuserkek=374990, nufuskadin=380437 WHERE id = 7; INSERT INTO iller VALUES (82, ‘Alanya’, 102553, 51443, 51110); COMMIT;

Kullan›c› Taraf›ndan Tan›mlanan Fonksiyonlar (Functions) Veritabanlar›nda s›k olarak çal›flt›r›lan komut dizileri, fonksiyon olarak tan›mlanabilmektedir. Fonksiyona girdi olarak verilen iki say›y› ekleyen ve toplam› geri döndüren ekle() fonksiyonunun SQL dilinde tan›mlanmas› fiekil 7’de gösterilmektedir. Fonksiyonda yer alan $1 ve $2, fonksiyona girdi olan de¤erlerin yüklendi¤i ve fonksiyon içinde görülen de¤iflkenlerdir. Örne¤in, ekle (3,6) komutu çal›flt›r›l›rsa, $1 de¤iflkeni 3 de¤erini al›rken ve $2’in de¤eri 6 olacakt›r. pgAdmin program› alt›nda, flekildeki SQL komutu çal›flt›r›l›nca, AUDB veritaban› alt›ndaki “Functions” bölümünde ekle() fonksiyonu görülecektir (fiekil 8). Bundan sonra, ekle() fonksiyonu, herhangi SQL komutunda kullan›labilmektedir. fiekil 5.7 ekle() fonksiyonu

CREATE FUNCTION ekle (integer, integer) RETURNS integer AS ‘select $1 + $2;’ LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT;

91

5. Ünite - Temel SQL Kavramlar› ve Komutlar›

fiekil 5.8 AUDB veritaban› alt›nda tan›ml› fonksiyonlar

Tetik fonksiyonlar Tetik (trigger), veritaban›nda tablolarda veya görüntülerde (view) gerçekleflen de¤ifliklik durumlar›nda otomatik olarak veritaban› yönetim sistemi taraf›ndan çal›flt›r›lan fonksiyonlard›r. Tetikler tablolardaki veri tutarl›l›¤›n› sa¤layan önemli özelliklerden biridir. Örne¤in, iller tablosundaki illerden biri silindi¤inde, ilogrdurum ve dogumist2008 tablolar›ndan da silinen ille ilgili kay›tlar›n kald›r›lmas› gerekecektir. Bu flekilde, iller tablosunda gerçekleflen bir silme ifllemiyle tetiklenen bir fonksiyonla, tablolardaki veri tutarl›l›¤› sa¤lanabilir. Genellikle tetik fonksiyonlar›n› tetikleyen INSERT, UPDATE, DELETE komutlar›d›r. SQL komutundan önce veya sonra çal›flt›r›lmak üzere iki flekilde tan›mlanabilirler. Tetik fonksiyonlar, C dilinde veya PL/pgSQL dilinde yaz›labilirler. Dosya sisteminde tutulan PL/pgSQL program›n›n, INSERT, UPDATE ve DELETE komutlar›n›n herhangi birinin çal›flt›r›lmas›ndan önce tetiklenmesi için yap›lmas› gerekli tan›m fiekil 9’da gösterilmektedir. fiekil 5.9

CREATE TRIGGER tetik BEFORE INSERT OR UPDATE OR DELETE ON iller FOR EACH ROW EXECUTE PROCEDURE komut();

Tetikler bilgisayarlar›n ve dolay›s›yla veritaban› yönetim sistemlerinin yavafl oldu¤u dönemlerden kalan bir mirast›r. Özellikle raporlama ifllerinde büyük tablolar üzerinde yap›lan ifllemlerin uzun zaman ald›¤› y›llarda, raporlardaki de¤ifliklikleri veri eklendi¤i zaman yapan tetikler büyük ifl görmüfltür. Örne¤in, bir muhasebe sisteminde son bir ayl›k sat›fl miktar›n›n s›k sorgulanan bir de¤er oldu¤unu düflünelim. Normal flartlarda, toplam sat›fl›n bulunmas› için tablodaki son bir ayda girilen kay›tlardaki sat›fl miktarlar›n›n her sorgulamada toplanmas› gereklidir. Bunun yerine, yeni bir kay›t eklendi¤inde çal›flan tetik fonksiyon içinde, bir tabloda tutulan sat›fl rakam› art›r›l›rsa daha k›sa sürede sonuç elde edilebilir. Tetikler s›k kullan›lan ifllemlerin daha h›zl› yap›lmas›n› sa¤lad›klar› için yayg›n kullan›lan özelliklerden biridir.

Tetik özelli¤inin tan›mlanmas›

92

Veritaban› Uygulamalar›

PL/pgSQL Dili SQL dilinde yordamsal özellikler bulunmaz. SQL sorgular›nda, veritaban›ndan hangi verilerin istendi¤i tarif edilir ve veritaban› yönetim sistemi SQL komutundaki ifadeyi yorumlayarak talep edilen verileri getirir. Yordamsal dillerde iflin nas›l yap›laca¤› algoritmik olarak anlat›lmal›d›r. Her iki yaklafl›m›n da kendine özgü avantajlar› ve dezavantajlar› bulunur. Ancak, yordamsal dillerle, SQL sorgular› birlefltirilirse iki yaklafl›m›n da en iyi taraflar› bir araya getirilmifl olur. Verilerin veritaban›ndan getirilmesi SQL komutlar›yla yap›l›rken, üzerinde yap›lacak karmafl›k ifllemler için yordamsal özellikler kullan›l›r. Di¤er veritaban› yönetim sistemleri gibi PostgreSQL de yordamsal dillere (procedural language) destek verir. Yordamsal bir dilde yaz›lan program›, veritaban› yönetim sistemi çal›flt›ramaz ve çal›flt›racak olan yorumlay›c› yaz›l›ma yönlendirir. Yorumlay›c›, veritaban› yönetim sistemiyle bütünleflik flekilde çal›fl›r. PL/pgSQL, PL/Tcl, PL/Perl ve PL/Python dillerinin yorumlay›c›lar› PostgreSQL da¤›t›m›yla beraber gelmektedir. Oracle ve IBM DB2 gibi yayg›n kullan›lan ticari veritaban› yönetim sistemlerinde kullan›lan PL/SQL diline benzedi¤i için, PL/pgSQL di¤er yordamsal dillere göre daha genifl bir programc› kitlesi taraf›ndan kullan›l›r. PL/pgSQL’in tasar›m amaçlar› flöyledir: 1. Kullan›c›lar›n tan›mlayaca¤› yordamlar›n ve tetik fonksiyonlar›n oluflturulmas› 2. SQL diline, for döngüsü, while döngüsü gibi kontrol yap›lar›n›n eklenmesi 3. Karmafl›k hesaplamalar›n yordamsal mant›kla yap›labilmesi 4. Veritaban› yönetim sisteminin güvenlik mekanizmalar›n›n yavafllat›c› etkisi olmadan, veritaban›na bütünleflik flekilde program çal›flt›rabilmesi 5. Kolay ö¤renilme ve kullan›m kolayl›¤› sa¤lama PL/pgSQL programlar›yla gerçeklefltirilen ifllerde elde edilen kazan›mlar flunlard›r: 1. PL/pgSQL programlar› veritaban› sunucusu içinde çal›flt›r›ld›¤›ndan, sunucu ve istemci aras›nda a¤ sistemi üzerinden akan trafik miktar›n› azalt›r. Verinin a¤ üzerinden aktar›lmas›, sunucu sistem içinde verinin transfer edilmesine göre çok daha yavaflt›r. 2. Uygulama yaz›l›m› ve sunucu aras›nda, ara sonuçlar›n aktar›m› gerekebilir. Gelen sonuçlara göre, farkl› sorgular›n gönderilmesi s›ras›nda gerçekleflen a¤ üzerinden yap›lan iletiflimi engeller. 3. Sunucu ve istemci aras›nda gerçekleflen ard›fl›k sorgulamalar› azalt›r. SQL sorgular›yla yap›labilen basit hesaplamalar, yordamsal programlarla yap›ld›¤›nda ek sorgulamalara gerek duyulmaz. Bir PL/pgSQL program›n›n yap›s› flöyledir: [ ] [ DECLARE değişken tanımları ] BEGIN Komutlar; END [ etiket ];

93

5. Ünite - Temel SQL Kavramlar› ve Komutlar›

Program yap›s›nda köfleli parantezler içinde yaz›lan k›s›mlar tercihe ba¤l›d›r. Genel olarak, bir PL/SQL program› BEGIN ve END anahtar kelimeleri aras›nda yaz›lan ve noktal› virgüllerle biten sat›rlardan oluflur. PL/pgSQL programlar› ço¤unlukla fonksiyon tan›mlamak için kullan›lmaktad›r ve bir örne¤i afla¤›da verilmifltir. CREATE OR REPLACE FUNCTION KDV_hesapla(real) RETURNS real AS $$ BEGIN RETURN $1 * 0.18; END; $$ LANGUAGE plpgsql KDV_hesapla() fonksiyonu, parametre olarak gerçek say› (real) türünde bir say› almaktad›r. Bu parametre, fonksiyon içinde $1 olarak kullan›l›r. Dönen say› da “RETURNS real” tan›m›ndan da anlafl›laca¤› gibi gerçek say›d›r. “CREATE OR REPLACE FUNCTION” ifadesi, yeni bir fonksiyon yaratma veya e¤er ayn› isimde baflka bir fonksiyon varsa bunun yerine oluflturma anlam›na gelir. BEGIN ve END bloklar› aras›nda KDV hesaplanarak RETURN deyimiyle döndürülmektedir. Yukar›daki PL/pgSQL fonksiyonu, pgAdmin program›nda AUDB veritaban› üzerine sa¤ fare butonuyla t›klayarak, “CREATE SCRIPT” opsiyonu seçildi¤inde ç›kan pencerede yaz›labilir (fiekil 10). Hat›rlanacak olursa, ayn› pencere SQL komutlar›n› çal›flt›rmak için de kullan›lm›flt›. Program› çal›flt›rmak için, F6 butonuna bas›labilir veya menüdeki “Query” seçene¤i alt›nda “Execute pgScript” opsiyonu seçilebilir. Program çal›flt›r›ld›ktan sonra, penceredeki “Messages” sekmesinde do¤ru çal›fl›p çal›flmad›¤› görülebilir (fiekil 11). E¤er fonksiyon do¤ru flekilde eklenirse, fiekil 10’da gösterildi¤i gibi AUDB veritaban›n›n flema bölümünün alt›ndaki “Functions” alan›nda “kdv_hesapla(real)” olarak görülecektir. fiekil 5.10 PL/pgSQL program editörü ve program› çal›flt›rma

94

Veritaban› Uygulamalar›

fiekil 5.11 PL/pgSQL fonksiyonunun yer ald›¤› bölüm

PL/pgSQL ve di¤er yordamsal dillerde yaz›lan fonksiyonlarla ilgili en büyük sorun, bir uygulamada veritaban› yönetim sistemi de¤ifltirilmek istendi¤inde, yaz›lan yordamsal programlar›n da de¤ifltirilmesinin gerekmesidir. Çünkü her veritaban› yönetim sistemi birbirinden farkl› yordamsal dilleri destekler. Örne¤in, Oracle’›n destekledi¤i PL/SQL dili, PL/pgSQL’den az da olsa farkl›d›r. Microsoft SQL Server sistemi ise, Transact-SQL denilen farkl› bir dili destekler. Standart SQL komutlar›n› VTYS’lerine göndererek gelen verileri kullanan ve yorumlayan uygulama yaz›l›mlar›, VTYS de¤iflikli¤i durumunda daha büyük kolayl›k sa¤lar. PL/pgSQL, veritaban›na çeflitli SQL komutlar›n› h›zla gönderebilecek ve al›nan de¤erleri iflleyebilecek kadar yetenekli bir programlama dilidir. Uygulama yaz›l›mlar›n›n yükünü azaltmak konusunda son derece baflar›l›d›r. Veritaban› yönetim sistemleri içinde kullan›lan yordamsal dillerde programlama yapmak, ancak veriler üzerinde karmafl›k hesaplamalar gerektiren uygulamalar için yarar sa¤lar. Veritaban› kullanan bir çok uygulama için, VTYS’ne a¤ üzerinden SQL komutlar› göndererek ifllem yapmak yeterli olmaktad›r.

fiemalar (schemas) PostgreSQL, birden fazla veritaban›n› kullan›c›lara sunabilmektedir. Ancak, herhangi bir tablo tan›ml› oldu¤u veritaban› d›fl›ndaki bir veritaban›nda yer alamaz. Di¤er bir deyiflle, veritabanlar› aras›nda veri paylafl›m› söz konusu de¤ildir. Her bir istemci, VTYS’ne gönderdi¤i komutlarla tek bir veritaban›na eriflebilmektedir. Bu k›s›t› esnetmenin yolu, veritabanlar›nda flema kullan›m›d›r. Bir veritaban›, içinde tablolar bulunan ve flema (schema) ad› verilen birden fazla yap›ya sahip olabilir. Her flema içinde, tablolarla birlikte veri tipleri, fonksiyonlar ve iflleçler de tan›ml›d›r. Ayn› tablo, farkl› flemalarda bulunabilir. Veritabanlar›na eriflim konusundaki k›s›t›n aksine, kullan›c› birden fazla flemaya eriflebilir. PostgreSQL veritaban› yönetim sisteminde, bir veritaban› oluflturuldu¤unda public ad› verilen bir flema da otomatik olarak yarat›lmaktad›r. Ancak, kullan›c› bunun yan›na farkl› flemalar da oluflturabilir. fiemalar›n kullan›lmas›ndaki avantajlar flöyle özetlenebilir:

95

5. Ünite - Temel SQL Kavramlar› ve Komutlar›

• Birden fazla tipteki kullan›c›n›n ayn› veritaban›na birbirlerini etkilemeden ulaflmas›n› sa¤lamak • Veritaban› nesnelerini (tablolar, fonksiyonlar, vb) daha kolay idare edebilmek için mant›ksal olarak gruplamak • Ayn› veritaban›nda ifllem yapan farkl› programlar›n yapt›klar› ifllemlerin kar›flmamas›n› farkl› flemalar› kulland›rarak sa¤lamak fiema kullan›m›, büyük flirketlerde, ayn› veritaban› üzerinde farkl› birimlerden elemanlar›n ifllem yapmas› durumunda büyük kolayl›k sa¤lamaktad›r. Muhasebe flemas›, muhasebe bölümündekilerin kulland›klar› tablolar üzerinde ifllem yaparken, sat›n alma bölümü muhasebe flemas›nda tan›ml› olmayan ama kendi flemalar›nda bulunan tablolara eriflebilmektedir. fiema tan›mlar›, organizasyonel aç›dan farkl› bölümlerde çok say›da kullan›c›n›n oldu¤u durumlarda, veritaban› yöneticilerine ve uygulama gelifltiricilerine büyük kolayl›k sa¤lar. pgAdmin penceresinde AUDB veritaban›ndaki “Schemas” alt›nda yerSIRA alan S‹ZDE “public” flemas›n›n yap›s›n› inceleyin. fiema içinde ne yer ald›¤›n› listeleyin.

Görüntü (View)

1

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

Bir SQL sorgusunun getirdi¤i de¤erlere görüntü (view) ad› verilir. Oluflturulan her görüntüye bir ad atan›r. Bu adla çal›flt›r›ld›¤›nda, görüntü içinde S O Ryer U alan sorgu otomatik olarak uygulamaya al›n›r ve sonuçlar döndürülür. SQL editörü penceresinde “CREATE OR REPLACE VIEW” ifadesiyle afla¤›daki gibi görüntü oluflturuD‹KKAT labilir: CREATE OR REPLACE VIEW illeri_goster AS SELECT id, iladi from iller;

SIRA S‹ZDE

S O R U

D‹KKAT

N N

AMAÇLARIMIZ SQL komutu çal›flt›r›ld›¤›nda, AUDB içindeki genel flemada (public schema), “views” adl› bölümde, oluflturulan illeri_goster görüntüsü görülebilir (fiekil 12). Görüntünün çal›flt›r›lmas› için, görüntü fareyle seçilmeli ve ard›ndan sa¤ fare K ‹ T A P tufluna bas›l›nca ç›kan menüde, “View Data” opsiyonu kullan›lmal›d›r. Görüntüden dönen kay›tlar fiekil 13’teki gibi gösterilmektedir. TELEV‹ZYON

SIRA S‹ZDE

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

fiekilT E5.12 LEV‹ZYON fiema alt›nda görüntüler bölümü

‹NTERNET

‹NTERNET

96

Veritaban› Uygulamalar›

fiekil 5.13 Görüntünün çal›flt›r›lmas›yla elde edilen kay›tlar

Veritaban›nda Eriflim Rolleri (database roles) PostgreSQL veritaban› yönetim sistemi, veritaban›na eriflim izinlerine rol (role) ad›n› vermektedir. Rol olarak veritaban› kullan›c›lar›ndan biri veya bir grup kullan›c› düflünülebilir. Roller, veritaban›nda bulunan tablolar›n sahipleri olabilirler ve tabloya eriflecek di¤er rollere eriflim yetkileri tan›yabilirler. Rol konusu, iflletim sistemiyle ilgili olmas› ve uygulamalara özgü tasarlanmas› nedeniyle bu kitapta ayr›nt›l› flekilde ifllenmeyecektir.

‹mleçler (Cursors) Veritaban› yönetim sistemlerinin ve uygulama yaz›l›mlar›n›n karfl›laflt›klar› en önemli sorunlardan biri, bir sorgu gönderildi¤inde gelen veri miktar›n›n, bilgisayardaki belle¤in kald›ramayaca¤› kadar çok olmas›d›r. ‹mleç ad› verilen özellikle, uygulamalar›n geri dönen kay›tlar› birer birer veya iflleyebilecekleri miktarda almalar› sa¤lanabilmektedir. ‹mleç, sorgunun getirdi¤i sat›rlar› tutan ve kay›tlar› birbiri arkas›na gelen sat›rlar halinde almas›n› sa¤layan bir veri yap›s›d›r. ‹mleçler, özellikle PL/pgSQL programlar›nda, büyük tablolar üzerinde yap›lan ifllemlerde karfl›lafl›labilecek sistem belle¤inin yetmemesi durumunu engellemektedir.

SQL VER‹ T‹PLER‹

bigint, de¤eri 9223372036854775808 ve +9223372036854775807 aras›nda bulunan say›lar› tutabilirken, integer tipi -2147483648 ve +2147483647 aras›ndaki de¤erleri alabilir.

Önceki ünitelerde, integer ve character varying gibi veri tiplerini CREATE TABLE komutuyla oluflturulan tablolarda, alan tiplerini tan›mlamak için kullan›l›rken görmüfltük. PostgreSQL çok say›da veri tipini daha desteklemektedir. Tablo 5’te, PostgreSQL’de geçerli olan veri tipleri görülmektedir. Veri tipleri içinde yer alan köfleli parantezler aras›ndaki ifadeler opsiyonel parametrelere karfl›l›k gelmektedir. Örne¤in, de¤iflken uzunluktaki karakter dizisi character varying ismiyle tan›mlanabildi¤i gibi, uzunlu¤a s›n›rland›rma getirerek character varying(50) olarak da gösterilebilir. Say› temelli veri tiplerinin bellekte kaplad›¤› alan bayt olarak art›nca çözünürlü¤ü de artar. Örne¤in, bigint 8 baytl›k bir say›yken, integer sadece 4 baytl›k-

5. Ünite - Temel SQL Kavramlar› ve Komutlar›

97

t›r. Sekiz baytl›k bigint veri tipinde tutulabilen maksimum say›, integer’a göre çok daha büyüktür. numeric ve decimal tipindeki de¤erlerin çözünürlü¤ü kullan›c› taraf›ndan belirlenebilmektedir. PostgreSQL içinde, ilerideki ünitelerde gösterilece¤i gibi, geometrik nesnelerin tutuldu¤u veri tipleri de tan›mlanm›flt›r. Box, circle, line, lseg, path, point ve polygon tipleri kullan›larak, geometrik nesnelerin bulundu¤u haritalar ve co¤rafi modeller oluflturulabilir. Zaman dilimi (time zone), her ülkenin yer ald›¤› boylama göre olan saat dilimini göstermektedir. Örne¤in, ayn› anda, Almanya’daki saatle Türkiye’deki saat aras›nda 1 saat fark olmaktad›r. Uluslararas› ifller yapan bir firman›n veritaban›nda, ifllem zaman›n›n kaydedilmesi için sabit bir zaman diliminin referans al›nmas› gereklidir. ‹fllem zaman›n›n tutulaca¤› alan›n tan›mlanmas›nda, Türkiye saatine göre ifllem yap›ld›¤›n› gösterebilmek için timestamp with time zone ifadesi kullan›lmal›d›r.

numeric ve decimal tipindeki tan›ml› alanlara konulabilecek en küçük ve en büyük de¤erleri bulunmamaktad›r. Kullan›c› istedi¤i aral›kta de¤er tan›mlayabilmektedir. Ancak, bu tiplerdeki de¤iflkenler üzerinde ifllem yapmak real ve double precision biçimlerine göre daha yavaflt›r.

Veri tipi ismi

Di¤er ismi

Aç›klama

bigint

int8

iflaretli 8 baytl›k say›

Tablo 5.5 PostgreSQL’de geçerli veri tipleri

bigserial

serial8

Otomatik art›r›lan 8 baytl›k say›

bit [ (n) ]

Sabit genifllikli bit dizisi

bit varying [ (n) ]

varbit

De¤iflken genifllikli bit dizisi

boolean

bool

Do¤ru veya yanl›fl olabilen mant›ksal veri tipi

bytea

Baytlardan oluflan dizi

character varying[(n)]

varchar[(n)]

De¤iflken uzunlukta dizi

character [ (n) ]

char [(n)]

Sabit uzunlukta dizi

cidr

‹nternet IP adresi

date double precision

Tarih tutan veri tipi float8

inet integer

8 bayttan oluflan gerçek say› ‹nternet IP adresi

int, int4

4 bayttan oluflan tamsay›

interval

Tarih aral›¤›n› tutan veri tipi

macaddr

MAC adresi

money

Para tutan veri tipi

numeric[(p,s)]

decimal[(p,s)]

De¤iflken çözünürlüklü gerçek say›

real

float4

4 baytl›k gerçek say›

smalint

int2

‹ki baytl›k tamsay›

serial

serial4

Dört baytl›k otomatik art›r›lan say›

text

De¤iflken uzunlukta dizi tipi

time

Zaman

time with time zone

Saat dilimli zaman

timestamp

Zaman ve tarih

timestamp with time zone

Saat dilimli zaman ve tarih

tsquery

Metin üzerinde arama yap›lan veritipi

tsvector

Metin dosyas› üzerinde arama yap›lan veritipi

XML

Xml verisi

98

Veritaban› Uygulamalar›

Tablo 5’te gösterilen veri tipleri kullan›larak bir tablo flöyle oluflturulabilir: CREATE TABLE iller2 id isim nufus ekonomikkatki ilcesayisi universitesayisi nufusyuzde );

( bigserial, varchar(20), int, money, int4, int2, decimal(5,2)

SQL D‹L‹NDE FONKS‹YONLAR VE ‹fiLEÇLER PostgreSQL, SQL içinde tan›ml› veritipleri için çok say›da fonksiyon ve iflleç sa¤lar. SQL, PL/pgSQL ve desteklenen di¤er yordamsal programlama dillerinde tan›ml› olan fonksiyonlara ek olarak, kullan›c›lar›n da kendi fonksiyonlar›n› tan›mlayabileceklerini daha önceki bölümlerde görmüfltük. Mant›ksal özellikteki AND, OR ve NOT, sorgularda en yayg›n kullan›lan iflleçlerdendir. Örne¤in, iller tablosunda, nüfusu 500 bin ve 1 milyon aras›nda olan illerin getirilmesi için kullan›labilecek sorgu flöyle kurulabilir: SELECT * FROM nufus1000000; SIRA S‹ZDE

N N 3

FROM

iller

WHERE

id34

AND

SIRA S‹ZDE pgAdmin kullanarak, K ‹ T A P‹stanbul ili d›fl›ndaki, nüfuslar› 500 binden fazla olan illerin nüfuslar›n›n toplam›n› bulunuz.

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

TELEV‹ZYON

S O R U

S O R U

‹ NDT‹EKRKNAETT

‹ NDT‹EKRKNAETT

AMAÇLARIMIZ

AND

SUM fonksiyonu, nufus kolonunda sorgu sonucu gelen bütün de¤erlerin toplanmas›n› AMAÇLARIMIZ sa¤lar. SUM fonksiyonu gibi alanlar üzerinde y›¤›n ifllem yapan di¤er fonksiyonlar, kitab›n ilerleyen bölümlerinde anlat›lacakt›r.

TELEV‹ZYON

SIRA S‹ZDE

nufus>500000

Nüfusu 500 bin 1 milyon aras›nda olan illerin say›s›n› pgAdmin program› üzerinden buSIRAveS‹ZDE lunuz.

D‹KKAT

D‹KKAT

AMAÇLARIMIZ

WHERE

D Ü fi Ü N E L ‹ M PostgreSQL’de tan›ml› karfl›laflt›rma iflleçleri Tablo 6’da gösterilmektedir. Bu iflleçler kullan›larak karmafl›k sorgular kurulabilir. Tablo 7’de aritmetik iflleçler ve S O R U s›k kullan›lan fonksiyonlar görülmektedir. Tablo 8’de SQL’de iller tablosunda yap›lan sorguda, ‹stanbul ili d›fl›ndaki, nüfuslar› bir milyondan fazla olan illerin nüfuslar›n›n toplam› flöyle bulunabilir:

S O R U

SIRA S‹ZDE

iller

N N

SIRA S‹ZDE

AMAÇLARIMIZ

99

5. Ünite - Temel SQL Kavramlar› ve Komutlar›

‹flleç

‹flleç

Aç›klama

<

Küçüktür

>

Büyüktür

=

Büyüktür veya eflittir

=

Eflittir



Farkl›d›r

!=

Farkl›d›r

Aç›klama

Tablo 5.6 karfl›laflt›rma iflleçleri

örnek

Sonuç

+

Aritmetik toplama

2+5

7

-

Aritmetik ç›karma

5-2

3

*

Aritmetik çarpma

4*2

8

/

Aritmetik bölme

8/2

4

%

Mod ifllemi

12 % 5

2

^

üstel

2^5

32

|/

karekök

|/ 25

5

||/

küpkök

||/ 8

2

!

faktöryel

4!

24

!!

Faktöryel (ön ek olarak)

!!4

24

@

Mutlak de¤er

@-5

5

&

Bitler üzerinde AND ifllemi

91 & 15

11

|

Bitler üzerinde OR ifllemi

32 | 3

35

#

Bitler üzerinde XOR ifllemi

17 # 5

20

~

Bitler üzerinde NOT ifllemi

~1

-2



Bit olarak sa¤a kayd›rma

8 >> 2

2

Tablo 5.7 Aritmetik iflleçler

100 Tablo 5.8 PostgreSQL’de tan›ml› fonksiyonlar

Veritaban› Uygulamalar›

Fonksiyon abs() cbrt()

ceil()

degrees() div(y, x) exp()

floor() ln()

random() trunc()

sin, cos, tan, cot

asin, acos, atan

aç›klama

örnek

sonuç

Mutlak de¤er

abs(-5.2)

5.2

Küp kök

cbrt(8.0)

2

En yak›n küçük tamsay›

ceil(-42.8)

-42

Radyandan dereceye çevirme

degrees(0.5)

28.647889 7

Tamsay› bölümü y/x

div(9,4)

2

üstel

exp(1.0)

2.7182818

Argümandan büyük olmayan en büyük tamsay›

floor(-42.8)

-43

Do¤al logaritma

ln(2.0)

0.69314

Rassal bir say›

random()

Tamsay›ya yuvarlatma

trunc(42.8)

42

Trigonometric de¤erler

sin(0.5)

0.47945

Ters trigonometric de¤erler

asin(0.47945)

0.5

Dizi (string) ifllemleri, character, text ve character varying tiplerindeki de¤iflkenler üzerinde gerçeklefltirilir. Tablo 9, dizi iflleçlerini ve fonksiyonlar› içermektedir. Tablo 5.9 PostgreSQL’de yer alan baz› dizi komutlar›

Fonksiyon

Tan›m

Örnek

Sonuç

dizi1 || dizi2

Dizi bitifltirme

'Postgre' || 'SQL'

PostgreSQL

dizi1 || say›

Bitifltirme

'AOF' || 1982

AOF1982

char_length()

Dizi uzunlu¤u

char_length('AÖF')

3

lower()

Küçük harfe çevir

lower('AÖF')

position(dizi1 in dizi2) Alt dizinin dizideki yeri position('ö¤r' 'Aç›kö¤retim')

aöf in 5

trim(leading from dizi) Dizinin bafl›ndaki boflluk karakterlerini siler

trim(leading ' AÖF ')

'AÖF '

trim(trailing from dizi) Dizinin sonundaki boflluk karakterlerini siler

trim(trailing from ' AÖF ') 'AÖF '

trim(both from dizi)

Dizinin bafl› ve sonundaki boflluk karakterlerini siler.

trim(trailing from ' AÖF ') 'AÖF'

upper(dizi)

Büyük harfe çevirir.

trim('aöf')

substring(dizi [from int] [for int])

Dizinin içinden ilgili Substring('Aç›kö¤retim' 'ö¤r' k›sm› alarak döndürür. from 5 for 3)

'AÖF'

101

5. Ünite - Temel SQL Kavramlar› ve Komutlar›

Dizi komutlar›n› kullanarak, A harfiyle bafllayan illeri bulal›m. Oluflturmam›z gereken SQL komutu flöyle olabilir: SELECT id, iladi FROM iller WHERE lower(substring(iladi from 1 for 1)) = 'a' Yukar›daki komutta, substring() fonksiyonuyla iladi kolonunda yer alan dizilerin ilk harfini getirmektedir. Dönen harfi lower() fonksiyonuyla küçük harfe döndürmek karfl›laflt›rma yapmak için kolayl›k sa¤lamaktad›r. Ad uzunlu¤u 5 karakter olan illeri bulan SQL komutunu yaz›n›z.

SQL KOMUTLARI

SIRA S‹ZDE

4

D Ü fi Üdestekledi¤i NEL‹M PostgreSQL veritaban› yönetim sisteminin SQL standartlar› içinde çok say›da SQL komutu bulunmaktad›r. Desteklenen SQL komutlar›, befl ana bafll›kta incelenebilir: S O R U 1. ALTER komutlar›: veritaban› nesneleri üzerinde de¤ifliklik yap›lmas› için kullan›l›r. a. ALTER DATABASE : veritaban›n›n özelliklerini de¤ifltirir. D ‹ K K A T b. ALTER DEFAULT PRIVILEGES : veritaban›na varsay›lan eriflim yetkilerini de¤ifltirir. SIRA S‹ZDE c. ALTER FUNCTION - Bir fonksiyonun tan›m›n› de¤ifltirir. d. ALTER GROUP - Eriflim grubu içindeki rolleri veya isimleri de¤ifltirir. e. ALTER INDEX - bir tablo indeksinin tan›m›n› de¤ifltirir.AMAÇLARIMIZ f. ALTER SCHEMA - fleman›n tan›m›n› de¤ifltirir. g. ALTER SERVER - a¤a ba¤l› uzak sunucunun tan›m›n› de¤ifltirir. K ‹ T A P h. ALTER TABLE - tablonun tan›m›n› de¤ifltirir. i. ALTER TABLESPACE - tablo isim alan›n›n tan›m›n› de¤ifltirir. j. ALTER TRIGGER - teti¤in özelliklerini de¤ifltirir. k. ALTER USER - veritaban› rolünü de¤ifltirir. TELEV‹ZYON l. ALTER VIEW - görüntünün tan›m›n› de¤ifltirir. 2. CREATE komutlar›: yeni veritaban› nesnesi yarat›r. a. CREATE DATABASE - yeni bir veritaban› oluflturur. ‹NTERNET b. CREATE FUNCTION - yeni bir fonksiyon oluflturur. c. CREATE GROUP - yeni bir veritaban› rolü oluflturur. d. CREATE INDEX - yeni indeks oluflturur. e. CREATE ROLE - yeni bir veritaban› rolü oluflturur. f. CREATE SCHEMA - yeni bir flema oluflturur. g. CREATE SERVER - a¤a ba¤l› uzak sunucuyu tan›mlar. h. CREATE TABLE - yeni tablo tan›mlar. i. CREATE TABLESPACE - yeni bir tablo alan› tan›mlar. j. CREATE TRIGGER - Yeni bir tetik tan›mlar. k. CREATE USER - yeni bir veritaban› rolü tan›mlar. l. CREATE VIEW - yeni bir görüntü tan›mlar. 3. DROP komutlar›: veritaban› nesnesini silmek için kullan›l›r. a. DROP DATABASE - veritaban›n› kald›r›r. b. DROP FUNCTION - fonksiyonu kald›r›r. c. DROP GROUP - veritaban› grup rolünü kald›r›r. d. DROP INDEX - indeksi kald›r›r.

N N

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

TELEV‹ZYON

‹NTERNET

102

Veritaban› Uygulamalar›

e. DROP OWNED - bir veritaban› rolü taraf›ndan sahiplenen veritaban› nesnelerini kald›r›r. f. DROP ROLE - bir veritaban› rolünü kald›r›r. g. DROP SCHEMA - flemay› siler. h. DROP SERVER - uzak sunucuyu siler. i. DROP TABLE - bir tabloyu siler. j. DROP TRIGGER - bir teti¤i siler. k. DROP TYPE - veritipini siler. l. DROP USER - veritaban› rolünü kald›r›r. m. DROP VIEW - görüntüyü kald›r›r. 4. SELECT komutu: Veritaban›ndan veri getirir. a. SELECT - veritaban›ndan veri getirir. b. SELECT INTO - bir sorgu sonucu gelen veriler için ayr› bir tablo oluflturur ve verileri aktar›r. 5. INSERT komutu- tabloya yeni veri eklemek için kullan›l›r. 6. UPDATE komutu- tablodaki verilerin düzeltilmesine yarar. 7. DELETE komutu- tablodaki baz› kay›tlar› silmek için kullan›l›r. 8. TRUNCATE - Bir tablodaki verilerin tamamen siler. 9. Hareket (Transaction) komutlar›: Atomik olarak çal›flt›r›lmas› gerekli komut grubuyla ilgilidir. a. BEGIN veya START TRANSACTION - hareket blo¤una bafllar. b. END veya COMMIT - içinde bulunulan hareketi tamamlanmas› için veritaban› yönetim sistemini harekete geçirir. c. ABORT - çal›flan hareketin (transaction) durdurulmas› için kullan›l›r. d. PREPARE TRANSACTION - iki aflamal› hareket için haz›rl›k yapar. e. SET TRANSACTION - içinde bulunulan hareketin özelliklerini ekler. f. ROLLBACK - içinde bulunulan hareketi yar›da keser. g. SAVEPOINT - içinde bulunulan hareket için yeni bir saklama noktas› tan›mlar. h. ROLLBACK TO SAVEPOINT - saklama noktas›na kadar ifllemleri geri al›r. i. RELEASE SAVEPOINT - daha önce kaydedilen saklama noktas›n› siler. j. SET CONSTRAINTS - içinde bulunulan harekete, ne kadar zamanda bitmesi gerekti¤i konusunda k›s›t koyar. k. LOCK - tabloyu kilitleyerek, di¤er kullan›c›lar›n tabloya eriflimlerini k›s›tlar. Bu flekilde, tabloda yap›lacak büyük çapta ifllemlerin sonucunda veri tutars›zl›¤› olma durumunu engeller. 10. ‹mleç komutlar›: a. DECLARE - imleç tan›mlar. b. CLOSE - imleci kapat›r. c. FETCH - imleç kullanarak sorguda s›rada bulunan sat›r› getirir. d. MOVE - imleci istenen yere tafl›r. 11. Veritaban› rolleriyle (kullan›c›lar›) ilgili komutlar. a. GRANT - eriflim yetkisi tan›mlar. b. REASSIGN OWNED - bir veritaban› rolü taraf›ndan sahiplenmifl nesnelerin bir di¤er role atanmas›n› sa¤lar. c. REVOKE - eriflim yetkilerini kald›r›r. d. SET ROLE - ifllemin hangi kullan›c› taraf›ndan gerçeklefltirilece¤ini tan›mlar. e. SET SESSION AUTHORIZATION - ifllemi çal›flt›racak kifli olarak bir kullan›c›y› atar.

5. Ünite - Temel SQL Kavramlar› ve Komutlar›

12. Di¤er komutlar: indeks oluflturma, tablonun kilitlenmesi, yetkilendirme, imleç, hatalar› telafi için kullan›lan komutlar, belirli bir komut grubuna ba¤l› olmaks›z›n çal›fl›rlar. a. REINDEX - indeksleri yeniden olufltur b. RESET - çal›flma zaman› de¤iflkeninin de¤erini ilk haline getirir. c. VACUUM - veritaban›n›n dosyalar›n› yeniden organize eder. d. VALUES - bir sat›r içinde bulunan verileri tan›mlar. e. EXECUTE - haz›rlanm›fl bir komutu çal›flt›r›r. f. DO - fonksiyon olmayan bir kod blo¤unu çal›flt›r›r. g. SET - çal›flma zaman› parametresini de¤ifltirir.

SELECT, INSERT INTO, UPDATE, DELETE SQL dilinde en fazla kullan›lan komutlar, SELECT, INSERT INTO, UPDATE ve DELETE’dir. Bu bölümde, bu komutlar›n nas›l kullan›laca¤› anlat›lacakt›r.

SELECT Bir SELECT komutu, üç ana bölümden oluflur ve genel olarak yaz›m› flöyle gerçeklefltirilebilir: SELECT alan1, alan2, .... FROM tablo1, tablo2, .... [ WHERE, HAVING veya GROUP BY tabloifadeleri ] En basit sorgu flöyle kurulabilir: SELECT * FROM tabloismi Yukar›daki sorguda, * harfi bütün alanlar›n getirilece¤ini gösteren özel bir semboldür. Sorgu içindeki alanlar bölümünde alanlar›n nümerik oldu¤u varsay›l›rsa, de¤erler üzerinde aritmetik ifllem yapt›ktan sonra veriler döndürülebilir. SELECT a, b + c FROM tabloismi Aritmetik hesaplamalar yap›lmak isteniyorsa, afla¤›daki sorgular kurulabilir: SELECT 4 * 5; SELECT cos(3.14159);

Benzer ‹sim Kullan›m› SELECT komutu içinde yer alan alanlar bölümündeki her bir alana benzer isim (alias) kullan›larak eriflilebilir. Örne¤in, iller tablosundaki il nüfuslar› 1 milyona bölünerek elde edilen rakam› milyon olarak göstermek için gerekli sorgu flöyle kurulabilir:

103

104

Veritaban› Uygulamalar›

SELECT id, iladi, nufus/1000000.0 AS milyon FROM iller Sorgu “SQL editor” penceresinde yaz›larak çal›flt›r›ld›¤›nda, “Data Output” bölümünde id, iladi de¤iflkenleri ve hesaplanan de¤ere atanan isim olan milyon gösterilecektir (fiekil 14) . fiekil 5.14 benzer isimle (alias) sorgu oluflturma

Atanm›fl isimler FROM bölümünde yer alabilir ve WHERE bölümünde de kullan›labilir. Örne¤in yukar›daki sorguda oluflturulan milyon isminin WHERE bölümünde kullan›ld›¤› sorgu flöyle kurulabilir: SELECT id, iladi, nufus/1000000.0 AS milyon FROM iller WHERE milyon>0.5

WHERE Koflullar› WHERE bölümü, SELECT komutuyla getirilecek olan de¤erlerin sa¤lamas› gereken koflullar›n belirtilmesi için kullan›l›r. Koflullar oluflturulurken, aritmetik de¤erlerin karfl›laflt›r›lmas› yap›labildi¤i gibi, SQL dilinin sa¤lad›¤› küme ifllemlerinden ve altsorgulardan da yararlan›labilir. WHERE ifadesinde IN kelimesi, parantez içindeki küme setinin içindeki de¤erler için sorgunun çal›flt›r›lmas›n› sa¤lamaktad›r: SELECT iladi FROM iller WHERE id IN (26, 34, 6) SELECT komutunda, alt sorgulardan gelen de¤erler de kullan›labilmektedir. Afla¤›daki sorguda, ilogrdurum tablosunda yap›lan bir altsorgudan gelen ilid de¤erlerinin, WHERE ifadesinde kullan›m› gösterilmektedir. Alt sorgu parantez içinde girilmekte ve ilogrdurum tablosunda doktora derecesine sahip (ogrdrmid = 9) kiflilerin say›s›n›n 1000’den yukar› oldu¤u illerin numaralar›n› döndürmektedir. Ana sorgudaysa, alt sorgudan gelen illerin numaralar›na karfl›l›k gelen il adlar› yaz›lmaktad›r.

105

5. Ünite - Temel SQL Kavramlar› ve Komutlar›

SELECT iladi FROM iller WHERE id IN (SELECT ilid FROM ilogrdurum WHERE ogrdrmid = 9 AND sayitoplam>1000) SIRA S‹ZDE Ard›ndan, Altsorguyu parantez olmadan, SQL editöründe yaz›n›z ve sonuçlar›n› görünüz. yukar›daki sorguyu yazarak çal›flt›r›n›z ve elde ettiklerinizi not ediniz.

5

D Ü fi Ü N E L ‹ M

BETWEEN kelimesi, iki de¤er aras›n› belirlemek için kullan›l›r. Örne¤in, nüfusu, Eskiflehir’deki ilkokul mezunlar›n›n say›s› (ogrdrmid = 4) ile 100000 aras›nS O R U da olan illerin adlar›n›n getirildi¤i sorgu flöyle kurulabilir: SELECT iladi, nufus FROM iller D‹KKAT WHERE nufus BETWEEN (SELECT sayitoplam FROM ilogrdurum SIRA S‹ZDE WHERE ilid = 26 AND ogrdrmid=4) AND 100000 AMAÇLARIMIZ

N N

K ‹ T A P

S O R U

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

Baz› durumlarda, iki veya daha fazla sorgunun sonuçlar›n›n bir araya getirilmesi gerekir. Bir araya getirme ifllemi üç farkl› flekilde gerçeklefltirilebilmektedir: TELEV‹ZYON 1. Birleflim (UNION): iki sorgunun sonuçlar›n›n birlefltirilmesidir. 2. Kesiflim (INTERSECT): iki sorgunun kesiflim kümesinin getirilmesidir. 3. Hariç (EXCEPT): bir sorgunun getirdikleri d›fl›nda di¤er sorgunun de¤erle‹NTERNET rinin getirilmesidir. Sorgu birlefltirmeyle ilgili komutlar›n yaz›mlar› flöyle yap›labilmektedir: sorgu1 UNION [ALL] sorgu2 sorgu1 INTERSECT [ALL] sorgu2 sorgu1 EXCEPT [ALL] sorgu2 Örne¤in, (SORGU 1) ilkö¤retim mezunlar› olarak kad›nlar›n say›s›n›n erkeklerden daha fazla oldu¤u ve/veya (SORGU 2) ilkokul mezunlar› içinde erkeklerin kad›nlardan daha az oldu¤u illeri bulmak için afla¤›daki sorgu kullan›labilir. Sorgu sonuç olarak 58 adet ili getirmektedir. SELECT ilid from ilogrdurum sayikadin>sayierkek UNION SELECT ilid from ilogrdurum sayikadin>sayierkek

D Ü fi Ü N E L ‹ M

D‹KKAT

Sorgu çal›flt›r›ld›¤›nda sonuç olarak, nüfusu 83061 olan Tunceli ile 74710 nüfuslu Bayburt döndürülecektir.

Sorgular›n Birlefltirilmesi

SIRA S‹ZDE

where

ogrdrmid=4

AND

where

ogrdrmid=3

AND

TELEV‹ZYON

‹NTERNET

106

Veritaban› Uygulamalar›

Hem ilkö¤retim mezunlar› olarak kad›nlar›n say›s›n›n erkeklerden daha fazla oldu¤u hem de ilkokul mezunlar› içinde erkeklerin kad›nlardan fazla oldu¤u illeri bulmak için INTERSECT kelimesi kullan›lmal›d›r: SELECT ilid from ilogrdurum sayikadin>sayierkek INTERSECT SELECT ilid from ilogrdurum sayikadin>sayierkek

where

ogrdrmid=4

AND

where

ogrdrmid=3

AND

Bu sorguda, her iki sorgunun getirdi¤i kay›tlar aras›nda ortak olan 54 numaral› Sakarya ili döndürülmektedir. SIRA S‹ZDE

D Ü fi Ü N E L ‹ M S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

TELEV‹ZYON

‹NTERNET

6

EXCEPT kelimesini kullanarak yukar›daki sorguyu de¤ifltirin ve sonucu not edin. SIRA S‹ZDE

INSERT INTO

D Ü fi Ü N E L ‹ M Veritabanlar›n›n güncel kalabilmesi için her zaman yeni verilerin eklenmesi gerekir. SQL dilinde veri eklemek için kullan›lan komut INSERT INTO komutudur. AflaS O R U iller tablosuna yeni bir kay›t eklemektedir: ¤›daki SQL komutu,

INSERT INTO iller VALUES (82, 'Alanya', 102553, 51443, D‹KKAT 51110);

N N

S‹ZDE VALUESSIRA komutu, bir kayd› oluflturmak için kullan›l›r. INSERT INTO, VALUES içinde yer alan de¤erleri s›ras›yla tablodaki alanlara yükler. Bu komutun en büyük k›s›t›, alanlar›n s›ras›n›n bilinmesinin gerekli olmas›d›r. Ancak, alanlar›n s›ras› bilinAMAÇLARIMIZ meden de yeni kayda de¤erler yüklenebilir. Örne¤in, afla¤›daki komut s›ras› bilinmeden de¤erlerin eklenmesini sa¤lamakt›r.

INSERT INTO iller (iladi, id) VALUES ('Bandırma', 83); K ‹ T A P

Yukar›daki sorguda, yeni kay›t sadece iladi ve id alanlar› dolu flekilde ekTELEV‹ZYON lenmekte ve di¤er alanlara NULL de¤eri girilmektedir. E¤er CREATE TABLE komutuyla tablo tan›m› yap›ld›¤› s›rada, NULL de¤erinin girildi¤i alanlar için NULL olamayaca¤› k›s›t› konulsayd›, bu sorgu hata verecekti. Tek bir ‹INSERT komutuyla birden fazla yeni kay›t tan›mlanabilmektedir. VALUNTERNET ES içinde, virgüllerle ayr›lm›fl flekilde yaz›lan kay›tlar, tek bir komutla veritaban›na eklenebilir. INSERT INTO iller (iladi, id) VALUES ('Alanya', 82), VALUES ('Bandırma', 83);

UPDATE Veritaban›nda yer alan kay›tlardaki alanlar›n de¤ifltirilmesi ifllemi UPDATE komutuyla gerçeklefltirilmektedir. Varolan bir kay›t üzerinde düzeltme yapmak için üç bilgi gereklidir: 1. Tablonun ve alan›n isimleri 2. Alana konulacak yeni veri 3. Veritaban›ndaki hangi kayd›n de¤ifltirilece¤i

5. Ünite - Temel SQL Kavramlar› ve Komutlar›

Hat›rlanaca¤› gibi, veritaban›nda her kayd› temsil eden eflsiz say›lar›n tutuldu¤u bir alan›n olmas›na her zaman için gerek yoktur. Her kayd› temsil eden eflsiz bir say›n›n olmas› ancak tablodaki bir alan›n birincil anahtar olarak tan›mlanmas›yla gerçekleflir. Örne¤in, iller tablosundaki id kolonu birincil anahtard›r. Birincil anahtar kolonunda her kay›t farkl› bir numarayla temsil edilir ve di¤erlerine ayn› de¤er verilmez. Birincil anahtar kolonundaki de¤erler kullan›larak, UPDATE komutuyla sadece istenen kay›t de¤ifltirilebilmektedir. Eskiflehir ilinin nüfus bilgisi de¤ifltirilmek istenirse, id kolonunun birincil anahtar olmas› kullan›larak flöyle bir komut kullan›labilir: UPDATE iller SET nufus=755427, nufuserkek=374990, nufuskadin=380437 WHERE id = 26;

DELETE Veritaban›nda tutulan bir kay›t kullan›lmayaca¤› zaman silinebilir. Veritaban› uygulamalar› gelifltirenler, genellikle verilerin silinmesini istemezler. Veriler silindikleri zaman geri getirilemezler ve tablonun yeniden indekslenmesi gerekir. Bunun yerine, tabloda yer alan bir kolona verinin kullan›lmad›¤›n› belirten bir kod koyarlar ve belirli aralarla, örne¤in günde bir, bu koda sahip kay›tlar› temizlerler. Ancak, DELETE komutu, gerek duyulmayan ve ara ifllem sonuçlar›n› tutan kay›tlar›n temizlenmesi için yararl›d›r. INSERT INTO komutuyla eklenen yeni bir il olan Alanya’y› iller tablosundan silelim: DELETE FROM iller WHERE id = 82;

107

108

Veritaban› Uygulamalar›

Özet

N A M A Ç

1

N A M A Ç

2

N AM A Ç

3

N AM A Ç

4

SQL diliyle ve C++, C# ve Java gibi yordamsal diller aras›ndaki fark› aç›klayabileceksiniz. SQL (Yap›sal Sorgu Dili), uluslararas› standartlar çerçevesinde tan›ml›, veritabanlar›nda ifllem yapmak üzere tasarlanm›fl bir programlama dilidir. C++, C#, Java gibi di¤er bilgisayar dillerinde verilerin nas›l oluflturulaca¤› ad›m ad›m tarif edilirken, SQL’de veritaban› yönetim sistemine hangi verileri getirece¤i tarif edilir. Veritaban› yönetim sistemi, SQL komutunda tarif edilen veri setini getirir veya varolan kay›tlar üzerinde ifllemleri gerçeklefltirir. Bir anda yap›lmas› gereken SQL komutlar›ndan oluflan hareketi kurabileceksiniz. SQL, hareket (transaction) yöntemiyle atomik ifllemler oluflturulabilmesini sa¤lar. Hareket, bir arada yap›lmas› gereken komut dizisidir. Komutlardan biri bile yap›lamazsa hareket sonlanmaz ve yap›lan ifllemler de veritaban›na ifllenmeden yok edilir. Bu flekilde veri tutarl›l›¤› sa¤lan›r. Tetik fonksiyonlar›n ifllevini aç›klayabileceksiniz. Tetik fonksiyonlar, veri tutarl›l›¤›n› sa¤lamak için kullan›lan özelliklerden bir di¤eridir. Tabloda gerçekleflen herhangi bir ifllem sonras›nda veya öncesinde çal›flt›r›lmak üzere haz›rlan›rlar. PostgreSQL, gerek hareket, gerek tetik ve gerekse genel amaçl› olmak üzere, kullan›c›lar›n fonksiyon yazmalar›na izin verir. PL/pgSQL dilinde yaz›lm›fl programlar› çal›flt›rabileceksiniz. Fonksiyonlar, karmafl›k ifllemlerin yordamsal programlama mant›¤›yla gerçeklefltirilmesini sa¤layan yap›lard›r. PL/pgSQL programlama dili, fonksiyon yazmak ve karmafl›k ifllemleri gerçeklefltirmek için, PostgreSQL veritaban› yönetim sistemi taraf›ndan kullan›c›lara sunulan programlama dillerinden en yayg›n flekilde kullan›lan›d›r.

N A M A Ç

5

SQL programlama dilinde s›k kullan›lan komutlar› ve veritiplerini listeleyebileceksiniz. Veritaban›nda farkl› çözünürlükteki de¤erlerin tutulabilmesi için, SQL dilinde çok say›da veritipi tan›ml›d›r. Yayg›n kullan›lan veri tipleri olarak, tamsay›lar, gerçek say›lar ve karakter dizileri verilebilir. Ayr›ca, aritmetik ve karakter dizileri üzerinde uygulanan çeflitli fonksiyonlar da veritaban› yönetim sistemiyle birlikte gelmektedir. SQL programlama dilinde, en yayg›n flekilde kullan›lan komutlar, SELECT, INSERT INTO, UPDATE ve DELETE komutlar›d›r. SELECT genel amaçl› sorgu komutudur. INSERT INTO, veritaban›na yeni veri eklemek için kullan›l›r. VALUES anahtar kelimesiyle birlikte kullan›ld›¤›nda, farkl› flekillerde veri girifline izin verir. UPDATE, veritaban›nda var olan verilerin düzeltilmesinde kullan›l›rken, DELETE var olan verilerin silinmesini sa¤lar.

5. Ünite - Temel SQL Kavramlar› ve Komutlar›

109

Kendimizi S›nayal›m 1. Afla¤›dakilerden hangisi, hareket (transaction) kavram›n› eksiksiz aç›klar? a. Yar›da kesilmesi durumunda veri tutars›zl›¤› oluflturacak ifllemlerin tamam›d›r. b. S›rayla gerçeklefltirilmesi gereken komut grubudur. c. Ayn› anda çal›flt›r›lmaya bafllanarak bitirilmesi gereken komutlard›r. d. Alternatif olarak çal›flan komutlard›r. e. ‹ndeksleme gerektirmeden çal›flan komut dizisidir. 2. Yeni eklenen bir fonksiyon veritaban›nda hangi bölüme eklenir? a. ‹flleçler (operators) b. Genel fiema (Public Schema) c. Triggers d. Tablolar (Tables) e. Görüntüler (views) 3. Görüntü (View) nedir? a. Bir veritaban›n›ndaki bütün de¤erlerin oluflturdu¤u kümedir. b. Tablolarda yer alan bütün verilerdir. c. Bir kullan›c›n›n eriflime yetkili oldu¤u tablolar›n isimleridir. d. Bir SQL sorgusunun getirdi¤i de¤erlerdir. e. Bir SQL sorgusunun SQL Editöründeki görüntüsüdür.

SELECT iladi FROM iller WHERE nufuserkek BETWEEN (SELECT sayierkek FROM ilogrdurum WHERE ilid = 34 AND ogrdrmid=9) AND 5000 4. Yukar›daki SQL sorgusunun ifllevi afla¤›dakilerden hangisidir? a. Erkek nüfusu, ‹stanbul’un nüfusundan küçük illerdeki bayan nüfusunu getirir. b. ‹stanbul’daki ilkö¤retim mezunu erkeklerin say›s›n› getirir. c. ‹stanbul d›fl›nda, erkek nüfusu 1000 ve 5000’den büyük olan illerin adlar›n› getirir. d. ‹stanbul’da doktora derecesine sahip kiflilerin say›s›ndan büyük ve 5000’den küçük erkek nüfusu olan illerin isimlerini getirir. e. ‹stanbul’daki doktoral› kiflilerin say›s› 5000’den büyükse, ‹stanbul d›fl›ndaki bütün illerin erkek nüfuslar›n› getirir.

5. substring(‘merhaba’ from 4 for 2) fonksiyonun getirdi¤i de¤er afla¤›dakilerden hangisidir? a. haba b. merh c. ha d. ba e. aba 6. ‹ki sorgudan gelen de¤erlerin birlefltirilmesi için kullan›lan anahtar kelime afla¤›dakilerden hangisidir? a. INTERSECT b. SUBTRACT c. INSERT d. EXCEPT e. UNION 7. Veritaban› rolü nedir? a. Veritaban› eriflim izinleridir. b. Kullan›c› isimleridir. c. Veritaban›nda eriflilebilecek flemalard›r. d. Birden fazla veritaban›na eriflen kullan›c›lard›r. e. Tablolar üzerinde sorgulama, ekleme, silme, düzeltme gibi yetkilere sahip kullan›c›lard›r. 8. SELECT komutunda alanlara benzer isim (alias) atamak için kullan›lan anahtar kelime afla¤›dakilerden hangisidir? a. BETWEEN b. SET c. VALUES d. AS e. FROM 9. SQL komutlar›nda mutlak de¤er hesaplamak için kullan›lan iflleç afla¤›dakilerden hangisidir? a. ! b. >> c. @ d. % e. ^/ 10. Tetik (trigger) nedir? a. Yeni veri eklendi¤inde çal›flt›r›lan k›s›tlar› kontrol eden komutlard›r. b. Tablolarda veya görüntülerde gerçekleflen de¤ifliklik durumlar›nda otomatik olarak çal›flt›r›lan yordamlard›r. c. PL/pgSQL dilinde yaz›lan program parçalar›d›r. d. Karmafl›k ifllemleri gerçeklefltirmek için kullan›lan yordamsal bir dille yaz›lan ifllemlerdir. e. Yeni bir kay›t eklendi¤inde, en eski kayd› silerek veritaban›nda yer açan SQL komutudur.

110

Veritaban› Uygulamalar›

Kendimizi S›nayal›m Yan›t Anahtar›

S›ra Sizde Yan›t Anahtar›

1. a

S›ra Sizde 1 fiemalar alt›ndaki public flemas›n›n içinde, “Domains”, “FTS Configurations”, “FTS Dictionaries”, “FTS Parsers”, “FTS Templates”, “Functions”, “Sequences”, “Tables”, “Trigger Functions”, “Views” gibi özellikler bulunmaktad›r.

2. b 3. d 4. d 5. c 6. e 7. a 8. d 9. c 10.b

Yan›t›n›z yanl›fl ise “SQL Kavramlar›” bafll›kl› bölümü inceleyiniz. Yan›t›n›z yanl›fl ise “SQL Kavramlar›” bafll›kl› bölümü inceleyiniz. Yan›t›n›z yanl›fl ise “SQL Kavramlar›” bafll›kl› bölümü inceleyiniz. Yan›t›n›z yanl›fl ise “SELECT, INSERT INTO, UPDATE, DELETE” bafll›kl› bölümü inceleyiniz. Yan›t›n›z yanl›fl ise “SQL Dilinde Fonksiyonlar ve ‹flleçler” bafll›kl› bölümü inceleyiniz. Yan›t›n›z yanl›fl ise “SELECT, INSERT INTO, UPDATE, DELETE” bafll›kl› bölümü inceleyiniz. Yan›t›n›z yanl›fl ise “SQL Kavramlar›” bafll›kl› bölümü inceleyiniz. Yan›t›n›z yanl›fl ise “SELECT, INSERT INTO, UPDATE, DELETE” bafll›kl› bölümü inceleyiniz. Yan›t›n›z yanl›fl ise “SQL Dilinde Fonksiyonlar ve ‹flleçler” bafll›kl› bölümü inceleyiniz. Yan›t›n›z yanl›fl ise “SQL Kavramlar›” bafll›kl› bölümü inceleyiniz.

S›ra Sizde 2 “SELECT COUNT(*) FROM iller where nufus>500000 AND nufus500000;” komutu istenen ifllevi gerçeklefltirecektir. S›ra Sizde 4 “SELECT SehirAdi FROM Sehirler WHERE char_length (SehirAdi)=5;” komutu ad uzunlu¤u 5 karakter olan sehirleri bulur. S›ra Sizde 5 “SELECT ilid FROM ilogrdurum WHERE ogrdrmid = 9 AND sayitoplam>1000” komutu çal›flt›r›ld›¤›nda, 15 ilin kodlar› döndürülmektedir. S›ra Sizde 6 Sorgu hiç bir kay›t döndürmeyecektir.

Yararlan›lan Kaynaklar SQL komutlar› için, http://developer.postgresql.org/pgdocs/postgres/sql-commands.html

6

VER‹TABANI UYGULAMALARI

Amaçlar›m›z

N N N N

Bu üniteyi tamamlad›ktan sonra; Bir tablo içinde yer alan bir kolondaki maksimum, minimum, ortalama de¤erleri hesaplayabilmek için SQL komutlar› oluflturabileceksiniz. ‹liflkisel veritaban›nda tablolar aras›ndaki iliflkilerin birlefltirme iflleminde nas›l kullan›ld›¤›n› aç›klayabileceksiniz. Sorgu içinde baz› kay›tlar› grupland›rabileceksiniz. Sorgudan dönen kay›tlar›n baz› kriterlere göre s›ralanmas›n› sa¤layabileceksiniz.

Anahtar Kavramlar • Y›¤›n küme ifllemleri • Tablo birlefltirme ifllemleri • Verilerin grupland›r›lmas›

• Grupland›r›lan verilere k›s›t konulmas› • S›ralama

‹çerik Haritas›

Veritaban› Uygulamalar›

Temel SQL Komutlar›

• G‹R‹fi • YI⁄IN ‹fiLEM FONKS‹YONLARI • TABLOLARIN B‹RLEfiT‹R‹LMES‹ (JOINING TABLES) • TABLO B‹RLEfiT‹RMEYLE ‹LG‹L‹ B‹R ÖRNEK • ORDER BY • DISTINCT • GROUP BY • HAVING

Temel SQL Komutlar› G‹R‹fi Önceki ünitelerde SQL ifllemlerinden baz›lar›n› yapmak için kullan›lan Select, Insert, Update, Delete, Alter ve Create komutlar› ayr›nt›l› olarak anlat›lm›flt›r. Bu komutlar, veritaban› üzerinde uygulama gelifltiren programc›lar›n s›k kulland›klar› komut kümesini oluflturmaktad›r. SQL komutlar› aras›nda, bu komutlara ek olarak, sorgulama ifllemlerini kolaylaflt›racak baz› özellikler de bulunmaktad›r. Bu ünitede birden fazla tablodaki bilgilerin birlefltirilmesi için kullan›lan y›¤›n ifllem (aggregade functions) komutlar› anlat›lacakt›r. Y›¤›n ifllem fonksiyonlar›, bir kolondaki bütün verileri kullanarak baz› hesaplamalar yap›lmas›n› sa¤layan komutlard›r. Örne¤in, bu komutlar kolonlardaki en küçük ve en büyük de¤erlerin hesaplanmas›n› sa¤lar. Birlefltirme, iki veya daha fazla tabloya da¤›lm›fl verileri, iliflkisel veritaban› özelliklerini kullanarak birlefltirmek için yap›lan bir ifllemdir.

YI⁄IN KÜME ‹fiLEM FONKS‹YONLARI Tablonun bir alan› içindeki bütün de¤erleri kullanarak bir de¤er hesaplayan yordamlara y›¤›n ifllem komutlar› ad› verilir. Bu komutlar sayesinde, tablolarda yer alan verilerin say›s›, minimum, maksimum, toplam ve ortalama de¤erleri tek bir SQL komutu ile elde edilebilir. Afla¤›da y›¤›n ifllem fonksiyonlar› ve kullan›m amaçlar› listelenmifltir.

Fonksiyon

Tan›m›

count (*)

Sorgu sonucunda gelen kay›t say›s›n›n elde edilmesini sa¤lar

min (alan_adı)

Tablo içinde alan ad›yla belirtilen sütundaki en küçük de¤eri verir

max (alan_adı)

Tablo içinde alan ad›yla belirtilen sütundaki en büyük de¤eri verir

sum (alan_adı)

Tablo içinde alan ad›yla belirtilen sütundaki de¤erlerin toplam›n› verir

avg (alan_adı)

Tablo içinde alan ad›yla belirtilen sütundaki de¤erlerin ortalamas›n› verir

114

Veritaban› Uygulamalar›

Bu fonksiyonlar›n kullan›m›n› göstermek için, iller tablosunun üzerinde çeflitli ifllemler gerçeklefltirilecektir. Önceki ünitelerde tan›mlanan iller tablosunun yap›s› fiekil 1’de gösterilmektedir. fiekil 6.1 ‹ller Tablosunun Yap›s›

iller id

iladi

nufus

1 2 3 4 ... 80 81

Adana Ad›yaman Afyon A¤r› ... ... ... Osmaniye Düzce

2062226 588475 701326 537665 ... ... ... 471804 335156

nufuserkek

nufuskadin

1029640 294213 348194 280000 ... ... ... 236751 167696

1032586 294262 353132 257665 ... ... ... 235053 167460

Türkiye’de bulunan illerin say›s›n› bulmak için, count(*) içeren bir SQL komutu afla¤›daki gibi oluflturulabilir. Komut çal›flt›r›l›nca, il say›s› olarak 81 döndürülecektir. SELECT count (*) FROM iller Türkiye’deki en az say›da kiflinin yaflad›¤› ilin nüfusunu bulmak için, min() fonksiyonu kullan›lmal›d›r. Afla¤›daki SQL komutu çal›flt›r›l›nca, Bayburt’un il nüfusu olan 74710 rakam› elde edilmektedir. SELECT min (nufus) FROM iller E¤er, nüfusu en fazla olan ilin bilgilerine eriflmek istersek, alttaki SQL komutunu çal›flt›rmam›z gerekecektir. Sonuç olarak ‹stanbul’un il nüfusu olan 12.915.158 de¤erini buluruz. SELECT max (nufus) FROM iller Türkiye’nin toplam nüfusu, sum() fonksiyonu kullan›larak hesaplanabilir. Afla¤›daki SQL komutu, nufus kolonundaki bütün de¤erleri toplamaktad›r. 27.05.2010 tarihi itibariyle, Türkiye ‹statistik Kurumu verilere göre, Türkiye’nin nüfusu 72.561.31’d›r. SELECT max (nufus) FROM iller Yukar›daki SQL komutlar› pgAdmin penceresinde çal›flt›r›ld›klar›nda, getirilen de¤erin hangi kayda ait oldu¤unu belirtmezler ve sadece sonucu bildirirler. Hangi kayd›n maksimum de¤ere sahip oldu¤unu bulabilmek için, SQL komutlar›nda de¤ifliklik yap›lmas› gereklidir. WHERE bölümünde y›¤›n ifllem fonksiyonlar›n›n kullan›lmas›na, SQL’de izin verilmemektedir. Örne¤in, flöyle bir sorgu hata mesaj› verecektir:

6. Ünite - Temel SQL Komutlar›

SELECT id, nufus FROM iller WHERE nufus = max (nufus) Sorun, ancak altsorgu oluflturularak çözülebilir. Afla¤›daki sorgu, en kalabal›k ilin ismiyle birlikte numaras›n› da getirecektir: SELECT id, nufus FROM iller WHERE nufus = (SELECT max (nufus) from iller Parantez içinde yer alan sorgu, nufus kolonundaki en büyük de¤eri getirmekte ve WHERE bölümünde parametre olarak kullan›lmaktad›r. Görüldü¤ü gibi y›¤›n küme ifllemleri, ihtiyaç duyulan bilgilerin tek bir komutla elde edilmesini sa¤lamaktad›r.

TABLOLARIN B‹RLEfiT‹R‹LMES‹ (JOINING TABLES) ‹liflkisel veritabanlar›nda, bütünün parçalar› birden fazla tabloda tutulur. ‹liflkisel özellik kullan›larak bütün tekrar oluflturulabilir. Parçalar›n farkl› ama birbiriyle iliflkili tablolarda tutulmas›n›n temel nedenlerinden biri az say›da kolon bulunan tablolarda ifllem yap›lmas›n›n, daha genifl tablolara göre daha h›zl› olmas›d›r. Tabloda çok fazla say›da kolon oldu¤u durumlarda, bir sorgu s›ras›nda kullan›lmayan kolonlar da tablodan al›nacak ve gereksiz yere ifllenecektir. Tablolarda yer alan kay›tlar büyüdükçe, veritaban›n›n konuldu¤u disklere olan eriflim artacak ve sistemin performans›nda düflüfl hissedilecektir. ‹liflkisel veritaban›n›n temel özelli¤i olan tablolar aras› iliflkiler kullan›larak, birden fazla tabloda yer alan bilgiler birlefltirilebilir. E¤er bütünün parçalar› de¤iflik tablolarda yer al›yorsa, daha karmafl›k bilgiler elde etmek için, tablolardaki kay›tlar›n bir flekilde bütünlefltirilmesi, di¤er bir deyiflle birlefltirilmesi gereklidir. SQL dili, tek bir komutta birden fazla tabloda ifllem yapmam›za izin vermektedir. Ancak, baz› durumlarda, tablolardaki verilerin birlefltirilmesinde JOIN ad› verilen komutun kullan›lmas› gerekli olur. ‹lk aflamada, birden fazla tabloda yer alan verilerin bir araya getirilmesi için çeflitli örnekler üzerinde çal›flal›m. Hat›rlanaca¤› gibi iller ve ilogrdurum tablolar› her ile verilen eflsiz bir numara üzerinden birbirleriyle iliflkilidir. Eskiflehir’le ilgili iki tabloya yay›lm›fl bilgileri birlefltirmek için flöyle bir sorgu oluflturabiliriz: SELECT id, iladi, nufus, ogrdrmid, sayitoplam FROM iller, ilogrdurum WHERE id = 26 and ilid =26 Her iki tablonun birbiriyle ba¤lant› noktas› olan il kodlar› kullan›larak, ilin ad›, nüfusu ve ö¤renim durumuyla ilgili say›lar tek bir sorguda döndürülebilmektedir. fiekil 2’de “SQL editor” program›nda yukar›daki komutun çal›flt›r›lmas›ndan sonra elde edilen de¤erler görülmektedir. E¤er tablolardaki kolon isimleri birbirlerinin ayn›s› olsalard›, yukar›daki sorguda hangi tablonun hangi kolonunun kastedildi¤i kar›flacakt›. Bunu engellemek ve sorgunun okunabilirli¤ini art›rmak için, kolon isimlerinden önce tablo isimleri kullan›lmal›d›r. Yukar›daki sorgu, ayn› sonucu verecek flekilde tablo isimleriyle birlikte flöyle yaz›labilir:

115

116

Veritaban› Uygulamalar›

SELECT iller.id, iller.iladi, iller.nufus, ilogrdurum.ogrdrmid, ilogrdurum.sayitoplam FROM iller, ilogrdurum WHERE iller.id=26 and ilogrdurum.ilid=26 fiekil 6.2 ‹ller ve ‹logrdurum Tablolar›n› ‹çeren SQL Sorgusu ve Dönen De¤erler

Birbiriyle iliflkili olan kolonlardaki de¤erlerin karfl›laflt›r›lmas›na dayayan tablo birlefltirme iflleminin bir alternatifi de JOIN komutunun kullan›lmas›d›r. iller ve ilogrdurum tablolar›ndaki id ve ilid kolonlar›ndaki de¤erlerin birbirine eflit olmas› durumunda döndürülecek kay›tlar flöyle de bulunabilir: SELECT * FROM iller INNER JOIN ilogrdurum ON iller.id = ilogrdurum.ilid INNER JOIN ifllemi, her il için 10 adet ö¤renim durumu bilgisi olmak üzere 810 kay›t döndürür. Bu birlefltirme iflleminde, id ve ilid de¤erlerinin eflit olmas› önemlidir. Di¤er bir birlefltirme ifllemi olan CROSS JOIN, bütün tablolar› çaprazlayarak birlefltirir ve ON’la bafllayan koflulu kabul etmez. Örne¤in, yukar›daki sorguda INNER JOIN yaz›lan yere CROSS JOIN yaz›ld›¤›nda ve ON’la bafllayan k›s›m yaz›lmad›¤›nda oluflturulan sorgu çal›flt›r›l›nca 81 x 81 x 10 = 65610 adet kay›t döndürülecektir. SIRA S‹ZDE

D Ü fi Ü N E L ‹ M S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

1

CROSS JOINSIRA ifllemini S‹ZDEiller ve ilogrdurum tablolar› üzerinde deneyerek, kaç kay›t döndürdü¤ünü bulunuz. D Ü fi Ü Nsorgu E L ‹ M komutlar› üç farkl› flekilde yaz›labilir: JOIN içeren

SELECT T1 {[INNER]|{LEFT|RIGHT|FULL}[OUTER]} JOIN T2 S O R U ON koşul SELECT T1 {[INNER]|{LEFT|RIGHT|FULL}[OUTER]} JOIN T2 USING listesi) D ‹ K K A(kolon T SELECT T1 NATURAL {[INNER]|{LEFT|RIGHT|FULL}[OUTER]} JOIN T2

N N

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

117

6. Ünite - Temel SQL Komutlar›

Yukar›daki komut yaz›m›nda, | karakteri opsiyonel kelimeleri ay›rmak için kullan›lmaktad›r. Örne¤in, LEFT, RIGHT ve FULL kelimelerinden ancak biri komutta yer alabilir. Bu nedenle, bu kelimeler {LEFT|RIGHT|FULL} olarak tan›mlanm›flt›r. LEFT soldaki tablo olan T1’i iflaret ederken, RIGHT kelimesi sorgudaki T2’ye öncelik verir. Bu kelimelerin anlamlar›, ifllemin anlafl›lmas› için önemlidir. USING kelimesi, T1 ve T2’de efllenecek kolonlar›n isimlerini verir. Her iki tabloda efllenecek kolonlar›n isimleri ayn›ysa, USING komutu kullan›labilmektedir. LEFT OUTER JOIN, birlefltirme ifllemlerinden biridir. ‹lk olarak, INNER JOIN ifllemi gerçeklefltirilir ve koflula uyan kay›tlar efllenerek getirilir. Daha sonra, ikinci tabloda (sa¤ taraftaki tablo olan T2) koflula uymayan her sat›rdan gelen kolonlara NULL de¤eri verilerek, ilk tablodaki (sol tarafta yer alan T1 tablosundan) bütün sat›rlar döndürülür. Bu flekilde, sorgu sonucu dönen kay›tlarda, ilk tablonun (T1) bütün sat›rlar›, ikinci tabloyla efllensin veya efllenmesin getirilmektedir. fiekil 3’te, iller ve ilogrdurum tablolar›nda Adana ili için yap›lan LEFT OUTER JOIN iflleminin sonuçlar› görülmektedir. Döndürülen kay›t say›s› 890’d›r. Adana iliyle, di¤er illerin ö¤renim durumlar› kay›tlar› çaprazlanarak 810 kay›t elde edilir. Koflula uymayan kay›tlar›n say›s›, (Adana d›fl›ndaki iller) 80 oldu¤undan, toplam olarak 890 kay›t elde edilmifltir. Birlefltirme ifllemlerinden biri de, RIGHT OUTER JOIN ifadesidir. ‹lk aflamada, her iki tabloyu da kullanarak INNER JOIN ifllemini gerçeklefltirir. T1’de efllenemeyen bütün kay›tlar için, T2’deki her sat›r›n yan›nda T1’in alanlar›n›n bulunaca¤› yerlerde NULL ifadesi konulur. Bu komut, LEFT OUTER JOIN iflleminin eflleni¤idir ve T2 tablosundaki bütün kay›tlar› içerir. fiekil 6.3 LEFT OUTER JOIN ifllemiyle iller ve ilogrdurum tablolar›n›n birlefltirilmesi

FULL OUTER JOIN komutu, LEFT OUTER JOIN ve RIGHT OUTER JOIN komutlar›yla elde edilen kümenin birleflimini verir. Di¤er bir deyiflle, T1’de olup da T2’de olmayan, T2’de olan ama T2’de bulunmayan bütün kay›tlar, efllenemeyen yerlere NULL konularak getirilir. S‹ZDE “SELECT * FROM iller FULL OUTER JOIN ilogrdurum ON id = ilid” SIRA sorgusundan kaç adet kay›t döndürülecektir?

2

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M

D Ü fi Ü N E L ‹ M

S O R U

S O R U

D‹KKAT

D‹KKAT

118

Veritaban› Uygulamalar›

TABLO B‹RLEfiT‹RMEYLE ‹LG‹L‹ B‹R ÖRNEK Bu bölümde, tablo birlefltirme ifllemlerinin gerçek hayatta nas›l kullan›laca¤›n› görmek için bir belediyenin s›n›rlar› içinde bulunan konut bilgilerini tutabilecek bir veritaban› oluflturaca¤›z. Kent bilgi sistemlerinde veri türü ve miktar› oldukça fazla olabilir. Belediye otomasyonu çerçevesinde, flehir içinde yer alan tafl›nmaz bilgileri ve mükelleflerle birlikte, Belediyenin iflleyifli için gerekli her türlü bilgi veritaban›nda tutulmal›d›r. Veri türlerindeki çeflitlilik de beraberinde farkl› türlerdeki verilerin iliflkisel veritabanlar› yap›s›nda farkl› tablolarda saklanmas›n› neden olmaktad›r. Veritaban›ndaki tablo say›s› artt›kça, gerek duyulan bir bilginin basit sorgu komutlar›yla elde edilmesi zorlafl›r. Bu nedenle tablolar oluflturulurken birbiri ile iliflkili olan alanlar, iliflkisel veritaban› tasar›m ve normalizasyon kurallar› dikkate al›narak belirlenmelidir. Elde edilmek istenen verilerin farkl› tablolardan getirilmesi gerekti¤inde, birbiriyle iliflkili olan tablolar aras›nda ba¤lant›lar kuran tablo birlefltirme komutlar› yararl› olmaktad›r. Binalara ait adres ve konum bilgilerinin tutuldu¤u tablonun yap›s› fiekil 4’te gösterilmektedir. Binalar tablosu incelenirse (fiekil 4), binaya ait adres bilgilerinin (cadde, mahalle, semt v.b.) ve bina türünün do¤rudan veritaban› alan›na girilmedi¤i görükmektedir. Bunun nedeni, normalizasyon kurallar› gere¤i burada yer alacak bilgilerin farkl› tablolar ile iliflkisel olarak tutulmas›n›n gerekli olmas›d›r. Tabloda bulunan alanlardan MahalleID ve BinaTuru alanlar›n›n ba¤lant›l› olaca¤› tablolar fiekil 5’teki gibi oluflturulabilir. fiekil 6.5

fiekil 6.4 Binalar tablosu

Binalar BinaID (PK): integer SehirID : integer IlceID : integer MahalleID : integer CaddeID : integer SokakID : integer SemtID : integer KatAdedi : smallint Pafta : varchar(10) Ada : varchar(10) Parsel : varchar(10) BinaTuru : smallint Yuzolcumu : integer

fiekil 6.6 BinaTurleri tablosu

Mahalleler

Mahalleler tablosu

MahalleID (PK) : integer SehirID : integer MahalleAdi : varchar(50)

Binalar tablosunda yer alan MahalleID de¤eri Mahalleler tablosundaBinaTurleri ki MahalleID eflsiz de¤erini almakta, yine ayn› flekilde BinaTuru de¤eri de BinaTuruID (PK) : integer BinaTurleri tablosundaki BinaTuBinaTuru : varchar(50) ruID de¤eri ile eflleflmektedir. Bu tür bir veritaban› tasar›m› daha önceki bölümlerde bahsedildi¤i gibi tablolar›m›z›n boyutunun büyümesini engellemekte, verilerin girifli s›ras›nda tekrarlama ve yaz›m hatalar›n› önlemektedir. Önemli avantajlar›ndan biri, verilerde yap›lacak düzeltmede, örne¤in bir caddenin ad›n›n de¤ifltirilmesinde, veritaban›nda yap›lacak de¤ifliklik miktar›n›n minimum seviyeye çekilmesi ve verilerde tutars›zl›k oluflmas›n›n engellenmesidir.

119

6. Ünite - Temel SQL Komutlar›

Daha önceki bölümlerde gördü¤ümüz SQL komutlar› ile, birbiriyle ba¤lant›l› çok say›da tablonun bulundu¤u iliflkisel veritabanlar›ndan veri elde etmek zor olabilmektedir. Örne¤in yukar›daki veritaban›nda, Tepebafl› mahallesinde, betonarme binalar›n bilgileri ve burada oturan kiflilerin isimlerini içeren bir listenin oluflturulmas› gerekti¤ini varsayal›m. Tablonun ifllevini daha iyi gösterebilmek için, Binalar tablosunda yer alan örnek veriler fiekil 7’de gösterilmektedir. fiekil 6.7

Binalar BinaID

SehirID IlceID

1 2 3 ...

26 26 26 ...

1 1 2 ...

MahalleID

.... KatAdedi ....

BinaTuru

1 1 2 ...

1 2 7 ...

1 2 2 ...

Binalar tablosundaki veriler

fiekil 6.9

fiekil 6.8 BinaTurleri tablosundaki veriler

BinaTurleri

Mahalleler

BinaTuruID

BinaTuru

MahalleID

SehirID

MahalleAdi

1 2 ...

Ahflap Betonarme ... ... ...

1 2 3 4 ...

26 26 26 26 ....

Hoflnudiye ‹stiklal Viflnelik Akarbafl› ... ...

Mahalleler tablosundan veriler

‹htiyaç duyulan, bir di¤er tablo da binalarda oturan kiflilerin bilgilerini içeren tablodur. fiekil 10’da flehirdeki mükelleflerin bilgilerinin tutuldu¤u Mukellefler tablosu görülmektedir. fiekil 6.11

fiekil 6.10

Mukellefler tablosundaki veriler

Mukellefler tablosu

Mukellefler

Mukellefler MukellefID (PK) Adi Soyadi OturduguBinaID

: integer : varchar(50) : varchar(50) : integer

MukellefID

Adi

Soyadi

OturduguBinaID

1 2 3 ...

Ahmet Perihan Ercan ... ...

Sami Ersoy Bilgin ... ...

1 2 2 ...

Viflnelik mahallesindeki betonarme binalar›n bilgilerinin ve burada oturan kiflilerin isimlerinin elde edilmek istendi¤ini düflünelim. Bu verileri, birer birer sorgulama yaparak elde etmeye çal›fl›rsak öncelikli yapmam›z gereken Viflnelik mahal-

120

Veritaban› Uygulamalar›

lesindeki betonarme binalar›n listesini elde etmek olacakt›r. fiekil 12’de afla¤›daki sorgudan dönen verilerin örnekleri görülmektedir. SELECT * FROM Binalar WHERE BinaTuru = 2 AND MahalleID = 3; fiekil 6.12 Sorgu sonucu dönen de¤erler

Binalar BinaID

SehirID

IlceID

MahalleID

2 12 ....

26 26 ....

1 1 ....

3 3 ....

.......

KatAdedi

.......

BinaTuru .... .... ....

.... .... ....

Bu sorgu sayesinde istenen özelliklere sahip binalar›n listesi elde edilebilmektedir (fiekil 12). Ard›ndan Mukellefler tablosu ayr›ca sorgulanmal› ve yukar›daki sorgudan elde edilen sorguyla birlefltirilmelidir. Bu flekilde bina bilgilerinden mükelleflerin isimleri elde edilebilecektir. Bunu gerçeklefltirebilmek için gerekli olan, tablolar aras›ndaki iliflkiyi kuran BinaID de¤erlerinin her iki tabloda efllenmesidir. Her BinaID de¤eri için ayr› bir SQL sorgusu kurarak, bu binada oturan kifliler Mukellefler tablosundan flöyle al›nabilir: SELECT * FROM Mukellefler WHERE OturduguBinaID = 2; SELECT * FROM Mukellefler WHERE OturduguBinaID = 12; Sorgular birbiri arkas›na çal›flt›r›ld›¤›nda elde edilen örnek veriler fiekil 13’te gösterilmektedir. fiekil 6.13 BinaID’ye göre yap›lan sorgudan elde edilen mükellef bilgileri

Yüzbinlerce kayd› bar›nd›ran ve birçok kiflinin ayn› anda kulland›¤› sistemlerde, sorgu say›s›n› azaltmak sistem performans›n› art›r›r.

Mukellefler MukellefID

Adi

Soyadi

Oturdu¤uBinaID

2 3 .....

Perihan Ercan .....

Ersoy Bilgin .....

2 2 ...

Görüldü¤ü gibi do¤ru sonuçlara ulafl›lmas›na ra¤men, istenen verilerin elde edilmesi için do¤ru bir ak›fl flemas› oluflturulmas› ve bir önceki sorgudan gelen bilgilere göre yeni SQL sorgular›n›n çal›flt›r›lmas› gerekmektedir. Bu da, istenen kay›tlar›n elde edilmesi s›ras›nda tabloya defalarca sorgu gönderilmesine neden olmakta ve bilgiler birlefltirilirken hata yapma riskini art›rmaktad›r. Di¤er bir sorun da, birbiri arkas›na gönderilen SQL sorgular›n›n veritaban› yönetim sistemini afl›r› yüklemesidir. ‹stenen bilgileri tek bir sorguyla elde etmek, her zaman tercih edilmelidir. Sorgu say›s›n› azaltman›n yollar›ndan biri de, iliflkili tablolar›n birlefltirilmesi yöntemidir.

121

6. Ünite - Temel SQL Komutlar›

SELECT Binalar.SehirID, Binalar.IlceID, Binalar.MahalleID, Binalar.BinaTuru, Mukellefler.Adi, Mukellefler.Soyadi FROM Binalar, mukellefler WHERE binalar.binaid = mukellefler.OturduguBinaID AND binalar.binaturu = 2; Daha önce iki tabloya ayr› sorgular göndererek elde edilen veriler, yukar›daki sorgu sayesinde art›k tek bir sorguyla halledilmektedir. Tablo birlefltirme koflullar› iki veya daha fazla tabloya uygulanabilir. Bu birden fazla tablodan verilerin elde edilmesini sa¤lamaktad›r. Yukar›daki SQL sorgusu incelendi¤inde, Binalar ve Mukellefler tablosundan istenen alan adlar›n›n sorgu içinde yer ald›¤› görülmektedir. Tablolarda yer alan bütün alanlardaki verileri çekmek verinin büyüklü¤ünü art›raca¤› için sisteme daha çok yük getirecek bu da performans düflüklü¤üne neden olacakt›r. Birden fazla tabloyu ilgilendiren SQL sorgular›nda dikkat edilmesi gereken noktalardan biri, FROM etiketinden sonra iki tane tablo isminin yer almas›d›r. Daha önceki bölümlerde verilen örnek sorgularda FROM kelimesinden sonra sadece bir tablo ismi yer almaktayd›. Verinin çekilece¤i tüm tablolar FROM kelimesinin arkas›ndan belirtilmelidir. SQL sorgusunun son bölümündeki WHERE etiketinden sonraki bölüm, sorgulama için gerekli olan koflullar›n yaz›ld›¤› bölümdür. Burada girilmesi gereken kriterler, birbiriyle iliflkilendirilecek olan tablolar›n aras›nda yer alan ba¤lant› koflullar›d›r. Yukar›daki sorguda, Mukellefler tablosunda yer alan OturduguBinaID de¤eri ile Binalar tablosunda bulunan BinaID alanlar› iliflkilendirilerek tablolar aras›nda ba¤lant› oluflturulmufltur. Bu kriterin yan›nda daha baflka koflullar da tan›mlanarak daha detayl› sorgulamalar gerçeklefltirilebilmektedir. Yukar›da görülen sorgu sadece iki tablodan gelen verileri birlefltirebilmektedir. Bu ifllem birden fazla tablo için de yap›labilmektedir. Örne¤in yukar›daki sorgu sonucuna bak›ld›¤›nda, kay›tlar›n flehir, ilçe, mahalle ve bina türü de¤erleri ile listelendi¤i görülmektedir. Bunlar di¤er tablolar ile birlefltirilerek do¤rudan anlaml› hale dönüfltürebilir. Yukar›daki SQL sorgusu yeniden düzenlenirse afla¤›daki komut oluflturulabilir. Sorgu çal›flt›r›ld›¤›nda fiekil 14’te görülen veri kümesi elde edilmektedir. SELECT Sehirler.SehirAdi, Ilceler.IlceAdi, Mahalleler.MahalleAdi, BinaTurleri.BinaTuru, Mukellefler.Adi, Mukellefler.Soyadi FROM binalar, mukellefler, sehirler, ilceler, mahalleler, BinaTurleri WHERE binalar.binaid = mukellefler.OturduguBinaID AND binalar.sehirid = sehirler.sehirid AND binalar.ilceid = ilceler.ilceid AND binalar.mahalleid = mahalleler.MahalleID AND binalar.binaturu = 2;

H›z aç›s›ndan, SQL sorgulamalar› oluflturulurken sadece gerekli tablo alanlar›n›n istenmesine özen gösterilmelidir.

122

Veritaban› Uygulamalar›

fiekil 6.14 Sorgu sonucu

Sorgu Sonucu SehirAdi

IlceAdi

MahalleAdi

BinaTuru

Adi

Soyadi

Eskiflehir Eskiflehir .........

Odunpazar› Odunpazar› .........

Viflnelik Viflnelik .........

Betonarme Betonarme .........

Perihan Ercan .........

Ersoy Bilgin .........

Tablo birlefltirmelerinde di¤er bir yöntem de JOIN komutlar›n› kullanmakt›r. Yukar›da ayr›nt›l› olarak aç›klanan INNER JOIN ve LEFT OUTER JOIN komutlar›n›n nas›l kullan›ld›¤›n› göstermek için, önceki bölümlerde kullan›lan ve il bilgilerinin tutuldu¤u Iller tablosu düflünülerek oluflturulan Ilceler tablosu fiekil 15’te gösterilmektedir. fiekil 6.15 Ilceler tablosu içindeki veriler

Sorgu Sonucu IlceID

‹lID

‹lceAdi

1 2 3 4 ...

26 26 1 34 ...

Tepebafl› Odunpazar› Ceyhan Fatih ...

‹llerin ve ilçelerin tutuldu¤u tablolar birlefltirilmek istenirse, kullan›lacak komutlardan biri INNER JOIN’dir. INNER JOIN komutu, iki tablodan ba¤lant› koflulunun sa¤land›¤› verileri getirmek için kullan›l›r. Bir tabloda bulunan de¤erin karfl›l›¤› di¤er tabloda yer alm›yorsa sonuç verilerinde bu de¤er yer almaz. Sistemde her iki tabloda da yer alan verilere karfl›l›k gelen kay›tlara ulaflmak istersek, flöyle bir sorgu oluflturabiliriz:

SELECT Iller.ilAdi, Ilceler.ilceAdi FROM Iller INNER JOIN Ilceler ON Iller.id = Ilceler.ilID fiekil 6.16 Sorgu sonucu

Burada INNER JOIN koflulu iki tablonun tam olarak eflleflen de¤erlerini Sorgu Sonucu getirir. Elde edilen sonuç verisi fiekil 16’da gösterilmektedir. Iladi IlceAdi Iller tablosunda Ad›yaman iliEskiflehir Odunpazar› nin yer almas›na ra¤men Ilceler Eskiflehir Tepebafl› tablosunda Ad›yaman iline ait herAdana Ceyhan ‹stanbul Fatih hangi bir kay›t olmazsa, Ad›yaman’›n ilçeleri sorgu sonucunda yer almayacakt›r. LEFT OUTER JOIN, INNER JOIN koflulundan farkl› olarak birinci tabloda bulunan kay›tlar›n tamam›yla ikinci tabloda eflleflen verileri getirmekte, iki tabloda eflleflmeyen kay›tlar›n yeri ise bofl (NULL) kalmaktad›r. Önemli verilerin birinci tabloda yer ald›¤› ve birinci tablodaki kay›tlar›n tamam›n›n sorgudan dönmesi gerek-

123

6. Ünite - Temel SQL Komutlar›

ti¤i durumlarda yararl›d›r. Afla¤›daki SQL komutunu uygularsak, elde edilen veri kümesi fiekil 17’de gösterilmektedir. SELECT Iller.ilAdi, Ilceler.ilceAdi FROM Iller LEFT OUTER JOIN Ilceler ON Iller.id = Ilceler.ilID fiekil 16 ve 17’de görüldü¤ü gibi, INSorgu Sonucu NER JOIN komutuyla gerçeklefltirilen sorgudan farkl› olarak, LEFT OUTER JOIladi IlceAdi IN’le elde edilen sonuç kümesinde Ad›yaman ilinin de yer ald›¤› görülmekteAdiyaman NULL Eskiflehir Odunpazar› dir. Tablonun ikinci sütununda ise Ad›Eskiflehir Tepebafl› yaman ilinin IlceAdi de¤eri NULL olaAdana Ceyhan rak gözükmektedir. Bunun nedeni Il‹stanbul Fatih celer tablosunda Ad›yaman iline tan›m‹stanbul Aksaray l› bir ilçenin kay›tlarda bulunmamas›d›r. RIGHT OUTER JOIN komutu da LEFT OUTER JOIN ile ayn› flekilde kullan›lmaktad›r. LEFT OUTER JOIN’den fark› sabit olarak al›nan tablonun ikinci tablo olmas›d›r. Di¤er tablodaki koflula uyan veriler ikinci tablonun yan›na eklenmektedir. Birinci ve ikinci tablo isimleri yer de¤ifltirildi¤inde, LEFT OUTER JOIN komutunun ayn›s› oldu¤undan RIGHT OUTER JOIN çok fazla kullan›lmamaktad›r.

fiekil 6.17 Sorgu sonucu

ORDER BY Sorgulamalar sonucunda elde edilen veri öbeklerindeki kay›tlar›n s›ras›n›n, veritaban›na ekleme s›ras›na göre belirlendi¤i görülmektedir. Örne¤in flehirde bulunan betonarme binalar›n listesinin elde edilmesinin istendi¤ini düflünelim. ‹stenen verilerde binalar›n ilçe ad›, mahalle ad›, yüz ölçümü ve kat adeti bilgilerinin bulunaca¤›n› varsayal›m. Veritaban›nda bulunan Binalar tablosundan, türü betonarme olan binalar afla¤›daki SQL komutuyla sorgulanabilmektedir. Sorgu sonucu, fiekil 18’de gösterilmektedir. SELECT Iller.ilAdi, Ilceler.ilceAdi FROM Iller LEFT OUTER JOIN Ilceler ON Iller.id = Ilceler.ilID fiekil 6.18 Sorgu sonucu

Sorgu Sonucu BinaID

IlceID

MahelleID

KatAdedi

Yuzolcumu

1 2 4

2 1 1

2 1 1

10 5 2

123 245 110

124

Veritaban› Uygulamalar›

fiekil 18’de görülen sorgu sonucu incelendi¤inde, binalar›n ilçe kodu, mahalle kodu, kat adedi ve yüz ölçümü bilgilerinde herhangi bir s›ralaman›n olmad›¤› görülmektedir. Sorgu, belli bir s›rayla takip edilebilecek bilgiler vermemektedir. Gerek duyulan kay›tlar›n elde edilmesine ra¤men, bilginin düzgün kullan›lamamas›na neden olmaktad›r. Bu gibi durumlarda ORDER BY komutu ihtiyaç duyulan kay›tlar›n s›ral› flekilde al›nmas›n› sa¤lamaktad›r. Komutun, SQL sorgular›nda kullan›m biçimi flöyledir: SELECT FROM [WHERE ] ORDER BY [ASC | DESC] ORDER BY komutu, SELECT komutunun kullan›ld›¤› sorgulamalarda, sorgulama sonras› elde edilecek verilerin hangi alan› s›ralanm›fl flekilde getirilece¤ini belirtmek için kullan›l›r. Son bölümde yer alan ASC ve DESC ifadeleri alan ad›na göre gelen verinin s›ralanma biçimini gösterir. Burada, ASC, kay›tlar› istenen kolona göre küçükten büyü¤e s›ralarken, DESC kay›tlar› büyükten küçü¤e do¤ru azalan flekilde getirir. ORDER BY kullanarak, sadece katAdedi ve Yuzolcumu alanlar›ndaki verileri büyükten küçü¤e s›ralamak için afla¤›daki sorguyu kurabiliriz. Burada ilk s›ralanacak alan kat adediyken, ard›ndan yüzölçümüne göre s›ralanacakt›r. Sorgu sonucu dönecek veriler fiekil 19’da gösterilmektedir. SELECT BinaID, IlceID, MahalleID, KatAdedi, Yuzolcumu FROM Binalar WHERE BinaTuru = 2 ORDER BY KatAdedi ASC, Yuzolcumu ASC; fiekil 6.19

Sorgu Sonucu

Sorgu sonucu

BinaID

IlceID

MahelleID

KatAdedi

Yuzolcumu

4 2 1

1 1 2

1 1 2

1 1 2

1 1 2

Yukar›daki sorgu incelendi¤inde, ORDER BY ifadesinden sonra birden fazla s›ralama koflulu oluflturuldu¤u görülmektedir. Örne¤imizde elde edilen verinin anlaml› bir ç›kt› olarak kullan›lmas› için binalar›n önce kat adedi ve ard›ndan da yüz ölçümü olarak s›ralanmas› gerekmektedir. Bu gibi de¤iflik s›ralama kriterleri getirerek istenen kay›tlar›n anlaml› bir s›ralamada elde edilmesi sa¤lanabilmektedir.

DISTINCT Tablolarda bir kolon içinde ayn› de¤erin birden fazla kere tekrarland›¤› durumlar olabilmektedir. Sorgulamalar sonucu gelen verilerde baz› de¤erlerin tekrarlanma-

125

6. Ünite - Temel SQL Komutlar›

mas› istendi¤inde, DISTINCT komutu kullan›l›r. Örnek olarak Ilceler tablosunda hangi illerin ilçe bilgilerinin girildi¤ini afla¤›daki komutla sorgulayal›m. SELECT DISTINCT Iller.ilAdi FROM Ilceler, Iller WHERE Ilceler.ilID = Iller.id

GROUP BY Veritaban›nda yap›lan sorgulamalarda s›k kullan›lan bir di¤er SQL komutu da GROUP BY komutudur. Komut, veritaban›ndan getirilen verilerin grupland›r›larak elde edilmesini sa¤lar. Verilerin grupland›r›lmas›ndaki amaçlar flöyledir: • Bir grupta bulunan kay›t say›s›n›n bulunmas› • Grupta yer alan bir alandaki de¤erlerin toplam›n›n hesaplanmas› • Grupta yer alan bir alandaki de¤erlerin ortalamas›n›n bulunmas› • Gruplanan verilerdeki en büyük veya en küçük de¤erin hesaplanmas› Kullan›m yap›s› flöyledir: Görüldü¤ü gibi GROUP BY, sorgunun son bölümünde yer al›r ve sorgulama SELECT FROM [WHERE ] GROUP BY sonras› elde edilecek verinin tablonun hangi alan› ile grupland›r›laca¤›n› belirtmek için kullan›l›r. Örnek olarak mahallelerde bulunan binalar›n say›s› elde edilmek istenirse, oluflturulmas› gereken SQL komutu afla¤›daki gibidir. Sorgu sonucu fiekil 20’de gösterilmektedir. SELECT count(*), MahalleID FROM Binalar GROUP BY MahalleID Yukar›daki SQL sorgusu, mahallelerde bulunan bina say›lar›n› vermektedir. COUNT ifadesinde hesaplanan de¤er kolonda yer alan kay›tlar›n say›s› de¤il, fiekil 6.21

fiekil 6.20

Sorgu sonucu

Sorgu sonucu Sorgu Sonucu

Sorgu Sonucu Count

mahalleID

mahalledekiBinaSayi

mahalleID

323 122 ......

1 2 ......

323 122 ......

1 2 ......

126

Veritaban› Uygulamalar›

MahalleID’ye göre gruplanarak elde edilen mahallelerdeki toplam kay›t say›s›d›r. fiimdi, sonuç kümesinin daha anlafl›labilir olmas› için COUNT() ifadesinin yan›na tan›mlama gerçeklefltirelim. Bu ifllem AS komutu ile yap›labilmektedir. Bu flekilde sorgu yeniden oluflturuldu¤unda afla¤›daki komut elde edilir. Sorgu sonucu, fiekil 21’de verilmektedir. SELECT count(*) as mahalledekiBinaSayisi, mahalleID FROM Binalar GROUP BY MahalleID GROUP BY ifadesinin kullan›m amaçlar›ndan biri, sorgudan dönen veri kümesindeki alanlardan birine ait en yüksek, en düflük veya ortalama de¤erlerin hesaplanmas›d›r. Örnek olarak mahallede bulunan en büyük ve en küçük katl› binalardaki kat say›lar›n›, ard›ndan da ortalama kat say›lar›n› elde etmeye çal›flal›m. En küçük kat say›s›n› elde etmek için yaz›lmas› gereken SQL komutu afla¤›da verilmifltir. Sorgu sonucu fiekil 22’de gösterilmektedir. SELECT mahalleID, MIN(katAdedi) as minKatAdedi FROM Binalar GROUP BY MahalleID fiekil 6.22 Sorgu Sonucu

Sorgu sonucu

minKatAdedi

mahalleID

2 5 ......

1 2 ......

Mahallelere göre en büyük kat say›s›n›n bulunmas› için, yukar›daki sorgu flöyle de¤ifltirilebilir: SELECT mahalleID, MIN(katAdedi) as minKatAdedi FROM Binalar GROUP BY MahalleID Ortalama kat say›s›n›n hesaplanmas› için, AVG komutu kullan›labilir: SELECT mahalleID, AVG(katAdedi) as ortKatAdedi FROM Binalar GROUP BY MahalleID

6. Ünite - Temel SQL Komutlar›

Toplam kat say›s›n›n hesaplanmas› için, MAX, MIN, AVG komutlar› gibi di¤er bir y›¤›n ifllem olan SUM komutu kullan›labilir: SELECT mahalleID, SUM(katAdedi) as toplamKatAdedi FROM Binalar GROUP BY MahalleID Görüldü¤ü gibi GROUP BY ifadesi, istedi¤imiz verileri fazladan sorgulama yapmadan elde etmemizi sa¤lamaktad›r.

HAVING HAVING komutu, GROUP BY ile gruplanan veriler üzerinde koflullar koymak ve bu koflullara ba¤l› olarak veri üzerinde k›s›tlamalar yapmak amac›yla kullan›l›r ve GROUP BY ifadesinden ba¤›ms›z olarak kullan›lamaz. Binalar tablosunda, 5 kattan daha yüksek kaç adet bina oldu¤unu mahalleler baz›nda hesaplamam›z gerekti¤ini varsayal›m. Bu durumda ilk yapmam›z gereken, GROUP BY komutu ile veritaban›nda bulunan kay›tlar› mahalle ve kat say›s› baz›nda grupland›rmakt›r. HAVING komutunu kullanarak koflul belirtmeden önce, MahalleID ve KatAdedi’ne göre grupland›rarak, afla¤›daki gibi bir sorgu oluflturabiliriz. Sorgu sonucu, fiekil 23’te gösterilmektedir. SELECT mahalleID, katAdedi, count(*) as toplamBinaSayisi FROM Binalar GROUP BY MahalleID, katAdedi; fiekil 6.23 Sorgu sonucu

Sorgu Sonucu MahalleID

KatAdedi

toplamBinaSayisi

1 1 1 2 ...

2 5 6 3 ...

51 153 225 175 ...

fiekil 22’de de görülebilece¤i gibi, sorgu sayesinde mahallede bulunan binalar›n kat bazl› say›lar› elde edilmifltir. Fakat, 5 kattan yüksek binalar›n say›lar›n›n bulunabilmesi için, sorguya HAVING’le bafllayan koflulun eklenmesi gereklidir. HAVING deyimi GROUP BY komutundan hemen sonra kullan›lmal›d›r. Yeni sorgu flöyle oluflturulabilir: SELECT mahalleID, katAdedi, count(*) as toplamBinaSayisi FROM Binalar GROUP BY MahalleID, katAdedi HAVING KatAdedi > 5;

127

128

Veritaban› Uygulamalar›

Özet

N A M A Ç

1

N A M A Ç

2

Bir tablo içinde yer alan bir kolondaki maksimum, minimum, ortalama de¤erleri hesaplayabilmek için SQL komutlar› oluflturabileceksiniz. Y›¤›n ifllemler, tablo içinde yer alan bir kolondaki bütün de¤erler üzerinde yap›lan hesaplamalard›r. Bir kolondaki en küçük, en büyük de¤erlerin hesaplanmas›, kay›t say›s›n›n bulunmas› gibi ifllemlerden oluflur. Yordamsal programlama dillerinde döngülerle yap›labilen bu tür ifllemler, SQL dilinde bir sat›rl›k komutlarla gerçeklefltirilebilmektedir. ‹liflkisel veritaban›nda tablolar aras›ndaki iliflkilerin birlefltirme iflleminde nas›l kullan›ld›¤›n› aç›klayabileceksiniz. ‹liflkisel veritabanlar›nda tablolar aras›ndaki iliflkiler, ortak de¤erler içeren alanlar sayesinde kurulur. ‹lçelerin bilgilerinin oldu¤u bir tablodaki bir alanda ilçenin ba¤l› bulundu¤u ilin kodu varsa, ilçe tablosundaki bilgiler kullan›larak ilin ismi de bulunabilir. SQL dili, SELECT sorgusuyla birden fazla tabloda arama yap›lmas›n› sa¤lar. Di¤er bir yöntem de JOIN ad› verilen komutun kullan›lmas›d›r. Çeflitli kullan›m amaçlar›na göre, INNER JOIN, OUTER JOIN, CROSS JOIN gibi türevleri bulunmaktad›r.

N A M A Ç

3

N AM A Ç

4

Sorgu içinde baz› kay›tlar› grupland›rabilecek ve y›¤›n ifllemleri bu gruplar üzerine uygulayabileceksiniz. Y›¤›n ifllemlerin, sadece baz› kay›tlar üzerinde uygulanmas› GROUP BY komutu sayesinde yap›labilir. GROUP BY, bir kolonda yer alan her bir farkl› de¤er için y›¤›n ifllemlerin gerçeklefltirilmesini sa¤lar. GROUP BY komutunun bir koflula göre gruplama yapmas›, HAVING ifadesiyle gerçeklefltirilir. Sorgudan dönen kay›tlar›n baz› kriterlere göre s›ralanarak döndürülmesini yapabileceksiniz. ORDER BY komutu, bir sorgudan döndürülen kay›tlar›n s›ralanmas›n› sa¤lar. ASC ve DESC komutlar›, s›ras›yla, kay›tlar› küçükten büyü¤e ve büyükten küçü¤e s›ralar.

6. Ünite - Temel SQL Komutlar›

129

Kendimizi S›nayal›m SELECT mahalleID, katAdedi, count(*) as toplamBinaSayisi FROM Binalar GROUP BY katAdedi; 1. Afla¤›dakilerden hangisi yukar›daki sorguyu aç›klar? a. Bir kat say›s›n›n kaç mahallede yer ald›¤›n› bütün mahalleler için döndürür. b. Mahallelere göre toplam kat say›s›n› döndürür. c. Tablodaki toplam mahalle ve kat say›lar›n› ayr› kolonlarda döndürür. d. Ortalama kat say›lar›n› mahallelere göre hesaplar. e. En büyük kat say›s›ndan en küçü¤e do¤ru mahallelerdeki toplam kat say›s›n› döndürür. 2. HAVING komutunun temel ifllevi nedir? a. Belirli bir alan›n hangi tablo referans al›narak kullan›laca¤›n› belirtmek b. GROUP BY ifadesine koflul eklemek c. NULL bulunmayan de¤erleri hesaplamak d. Birlefltirilecek tablolar›n isimlerini tan›mlamak e. Tablo içinde yer alan minimum ve maksimum de¤erlere göre HAVING ifadesinden sonra tan›mlanan alanlar› s›ralamak 3. DISTINCT komutunun ifllevi nedir? a. Kullan›lacak tablolar›n isimlerini belirtmek b. Sorguda dönen kay›tlar› tek bir alana göre grupland›rmak c. Toplam kay›t say›s›n› hesaplamak d. Tekrar olan kay›tlar aras›ndan sadece bir tane farkl› kay›t getirmek e. Döndürülen kay›tlar içindeki alanlarda yer alan de¤erler için koflul koymak 4. Afla¤›dakilerden hangisi y›¤›n ifllem komutlar›ndan biri de¤ildir? a. max b. min c. count d. avg e. distinct

5. ORDER BY komutunun ifllevi nedir? a. Tablolar› birlefltirmek b. Eflsiz kay›tlar› döndürmek c. Sorgunun tablodaki bir yada birden fazla alana göre s›ralanm›fl flekilde döndürülmesini sa¤lamak d. ‹çinde NULL de¤eri bulunmayan kay›tlar› döndürmek e. Kay›tlar› grupland›rmak 6. ASC ve DESC komutlar› hangi komutla birlikte kullan›l›r? a. HAVING b. INNER JOIN c. OUTER JOIN d. ORDER BY e. WHERE 7. Afla¤›dakilerden hangisi, OUTER RIGHT JOIN komutuyla oluflturulan sorguya göre daha az kay›t döndürür? a. INNER JOIN b. OUTER JOIN c. CROSS JOIN d. OUTER LEFT JOIN e. LEFT CROSS JOIN 8. Afla¤›dakilerden hangisi, tablo birlefltirirken, sa¤ ve sol taraftaki tablolarda birbirine eflleflen verilerin getirildi¤i ifllemi yapar? a. RIGHT OUTER JOIN b. CROSS JOIN c. OUTER JOIN d. LEFT OUTER JOIN e. INNER JOIN 9. Afla¤›dakilerden hangisi, GROUP BY komutunun kolaylaflt›rd›¤› ifllemlerden biri de¤ildir? a. Bir grupta bulunan kay›t say›s›n›n bulunmas› b. Grupta yer alan bir alandaki de¤erlerin toplam›n›n hesaplanmas› c. Grupta bulunan kay›tlardaki baz› alanlar›n ortalamas›n›n bulunmas› d. Grupta bulunan kay›tlar içinde birbirinden farkl› olan de¤erleri bulmak e. Gruplanan verilerdeki en büyük veya en küçük de¤eri elde etmek

130

Veritaban› Uygulamalar›

Kendimizi S›nayal›m Yan›t Anahtar› 10. ASC komutunun ifllevi nedir? a. S›ralaman›n büyükten küçü¤e do¤ru s›ralanmas›n› sa¤lar. b. S›ralaman›n küçükten büyü¤e do¤ru s›ralanmas›n› sa¤lar. c. Gruplaman›n en küçük kay›ttan büyü¤e do¤ru yap›lmas›n› sa¤lar. d. Gruplanan veriler içinde farkl› olan kay›tlar› bulmaya yarar. e. S›ralanan veriler içinde birbirinden farkl› de¤erlerin bulunmas›n› sa¤lar.

1. a 2. b 3. d 4. e 5. c 6. d 7. a 8. e 9. d 10. b

Yan›t›n›z yanl›fl ise “GROUP BY” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “GROUP BY” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “DISTINCT” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Y›¤›n ‹fllemler” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “ORDER BY” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “ORDER BY” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Tablo Birlefltirme” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “Tablo Birlefltirme” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “GROUP BY” bafll›kl› bölümü tekrar inceleyiniz. Yan›t›n›z yanl›fl ise “ORDER BY” bafll›kl› bölümü tekrar inceleyiniz.

6. Ünite - Temel SQL Komutlar›

S›ra Sizde Yan›t Anahtar› S›ra Sizde 1 “SELECT * FROM iller CROSS JOIN ilogrdurum” sorgusu kurulmal›d›r. 81 ille 810 adet ö¤renim durumu çarp›ld›¤›nda 65610 adet kay›t elde edilmektedir. Bu nedenle sorgu 65610 kay›t döndürecektir. S›ra Sizde 2 iller ve ilogrdurum tablolar›nda eflleflmeyen kay›t olmad›¤›ndan toplam 810 adet kay›t dönecektir.

Yararlan›lan ve Baflvurulabilecek Kaynaklar SQL komutlar› için http://developer.postgreSQL.org/pgdocs/postgres/sqlcommands.html/

131

7

VER‹TABANI UYGULAMALARI

Amaçlar›m›z

N N N

Bu üniteyi tamamlad›ktan sonra; ‹ndekslemenin ifllevini aç›klayabilecek, avantajlar›n› ve dezavantajlar›n› listeleyebileceksiniz. ‹ndeks kullan›rken, kullanma kurallar›na uyacaks›n›z. SQL sorgulamalar›nda k›s›tlamalar› kullanabileceksiniz.

Anahtar Kavramlar • ‹ndeksleme • Eflsiz indeks

• Alan k›s›tlar› • NULL de¤eri

‹çerik Haritas›

Veritaban› Uygulamalar›

‹ndeksleme ve K›s›tlama

• G‹R‹fi • VER‹TABANI ‹NDEKSLER‹ • KISITLAR VE KISITLAMALAR (CONSTRAINTS)

‹ndeksleme ve K›s›tlama G‹R‹fi Veritaban› yönetim sistemlerinin performanslar›nda art›fl sa¤layan yöntemlerden biri tablolarda s›k kullan›lan alanlar için indeks oluflturmakt›r. ‹ndeks, veritaban›ndaki eriflimi h›zland›rmaya yönelik tasarlanm›fl bir veri yap›s›d›r. ‹ndeks bilgisi sayesinde, tablolardaki kay›tlara eriflim h›zlan›r. ‹ndeksleme yöntemi do¤ru bir flekilde kullan›ld›¤›nda veritaban›n›n arama performans›n› art›r›r. Yanl›fl kullan›mda ise sorgulama h›z›n›n düflmesine sebep olur. Veritaban›nda yer alan verilerin tutarl›l›¤› veri giriflinin yap›ld›¤› s›rada kontrol edilmelidir. Örne¤in, ülkelerle ilgili bilgilerin tutuldu¤u bir tabloda, herhangi bir ülkenin nüfusu s›f›r veya negatif bir say› olmamal›d›r. Verilerin tutarl›l›¤›n› sa¤lamak için, tablolardaki baz› alanlara de¤erlerin kontrolü için k›s›t mekanizmalar› konulabilir. Bu ünitede, h›zl› eriflim için kullan›lan indeksleme yöntemi ve verilerin tutarl›l›¤›n› sa¤lamak için kullan›lan k›s›t yöntemleri tan›t›lacakt›r.

VER‹TABANI ‹NDEKSLER‹ Veritaban› indeksleri çok say›da kay›t içeren tablolardan h›zl› bir flekilde veri çekilebilmesini sa¤lamak için kullan›l›r. ‹ndeksler, bir kitap için yap›lm›fl içindekiler sayfas› gibi düflünülebilir. Bir kitapta s›k aranan terimler için içindekiler sayfas› oluflturuldu¤unda aranan veriye daha h›zl› ulafl›labilir. Benzer flekilde veritabanlar›nda s›k kullan›lan alanlar üzerinde indeks oluflturuldu¤unda bu alanlar› kullanarak yap›lan aramalarda önemli performans art›fllar› elde edilebilir. Veritabanlar›nda birincil anahtarlar ve elemanlar› eflsiz (unique) olarak tan›mlanm›fl kolonlar otomatik olarak indeksleme ifllemine tabi tutulurlar. Bu ifllemin yap›lmas›n›n nedeni, tabloya yeni bir kay›t eklendi¤inde, eflsiz olarak tan›mlanan kolondaki de¤erin di¤er bir kay›t içinde zaten olup olmad›¤›n›n h›zl› flekilde kontrol edilmesidir. Di¤er kolonlar için indeksleme iflleminin kullan›c› taraf›ndan yap›lmas› gerekmektedir. SELECT komutunun kullan›ld›¤› sorgu komutlar›nda sa¤lanan h›za ra¤men, indeks kullan›m›n›n baz› dezavantajlar› da bulunmaktad›r. • ‹ndeks ek disk alan›na ihtiyaç duyar. Çünkü oluflturulan indekslerin, di¤er bir deyiflle içindekiler tablosunun veritaban› içinde bir yerlerde kaydedilmesi gerekmektedir. • ‹ndeksleme, SELECT sorgular›nda çok yüksek bir performans art›fl› sa¤lasa da, UPDATE ve DELETE komutlar›nda ayn› baflar›y› göstermez. Aksine bu komutlarda bir miktar performans düflüflü yaflan›r. Çünkü her bir UPDATE

134

Veritaban› Uygulamalar›

ve DELETE ifllemi, daha önceden kurulmufl olan indekslerin yeniden güncellenmesini gerektirir. • Yo¤un indeks kullan›m› hem veritaban› h›z›n› düflürür hem de kullan›lan sabit disk alan›nda art›fla neden olur. Bir kitap için oluflturaca¤›m›z içindekiler tablosunda kitaptaki her bir kelime için (ba¤laçlar, edatlar d›fl›nda) sayfa numaralar›n›n tutuldu¤unu varsayal›m. Böyle bir durumda oluflturaca¤›m›z içindekiler tablosunun sayfa say›s›, kitab›n toplam sayfa say›s›ndan daha fazla olabilir. Çok fazla say›da indeks kullan›ld›¤›nda oluflan disk alan› art›fl› da iflte bu nedenden dolay›d›r. ‹çindekiler tablosu çok büyürse istedi¤imiz bilgileri içindekiler sayfas›ndan bulmak, kitapta do¤rudan arama yapmaya göre daha fazla zaman alacakt›r. Yo¤un indeks kullan›m› veritaban›ndaki arama performans›n› yavafllat›r.

‹ndeks Nas›l ve Neden Oluflturulur?

Bir Üniversitenin Ö¤renci Bilgi Sistemi veritaban›nda ö¤renci bilgilerini tutan OGRENCILER isimli bir tablonun bulundu¤unu düflünelim. Tabloda OGRNO, KULLANICIADI, SIFRE, BIRIMKODU ve ADSOYAD olmak üzere befl alan bulunmaktad›r. Tablo tasar›m›n› daha iyi anlayabilmek için tablonun oluflturulmas›n› sa¤layan afla¤›daki SQL komutunu inceleyelim: CREATE TABLE OGRENCILER ( OGRNO INTEGER PRIMARY KEY, KULLANICIADI VARCHAR(50), SIFRE VARCHAR(50), BIRIMKODU CHAR(10), ADSOYAD VARCHAR(255) ); Tablonun kullan›m amac›, web temelli ö¤renci bilgi sistemine giriflte, kullan›c› ad›n› ve flifresini sorgulamakt›r. Böyle bir tablo üzerinde KULLANICIADI alan› için indeks oluflturmak istedi¤imizde afla¤›daki SQL komutunu kullanmam›z gerekecektir: CREATE INDEX KULLANICI_ADI_INDEKSI ON OGRENCILER (KULLANICIADI); Yukar›daki komut sayesinde, OGRENCILER tablosu üzerinde bulunan KULLANICIADI kolonu üzerinde bir indeks oluflturulmaktad›r. Bu indekse KULLANICI_ADI_INDEKSI ad› verilmifltir. Bu indeks sayesinde OGRENCILER tablosunda KULLANICIADI kolonunda yap›lacak aramalarda daha iyi performans al›nmas› beklenmelidir. Örne¤in bu indeks sayesinde afla¤›daki SELECT sorgusu eskisinden çok daha h›zl› gerçekleflecektir: SELECT ADSOYAD FROM OGRENCILER WHERE KULLANICIADI = '[email protected]'; E¤er OGRENCILER tablosunun kay›t say›s› az ise sa¤lanan performans art›fl› düflük düzeyde olabilir. Ancak, tabloda onbinlerce kayd›n bulundu¤u durumlarda, yukar›da oluflturmufl oldu¤umuz indeks dikkat çekici bir performans art›fl› sa¤layacakt›r.

7. Ünite - ‹ndeksleme ve K›s›tlama

‹ndekslerin bir baflka kullan›m› da, iki veya daha fazla tablo üzerindeki verilerin birlefltirilerek arama yap›ld›¤› durumlarda karfl›m›za ç›kar. Veritaban›m›zda ö¤rencilerin not bilgilerinin tutuldu¤u NOTLAR isimli ve yap›s› afla¤›daki gibi olan bir tablo bulundu¤unu varsayal›m: CREATE TABLE NOTLAR ( NOTID INT PRIMARY KEY, OGRNO INT, DERSKOD VARCHAR(50), BIRIMKOD CHAR(10), VIZENOTU FLOAT(10), FINALNOTU FLOAT(10), ORTALAMA FLOAT(10), HARFNOTU CHAR(2) ); Böyle bir yap›da ö¤rencilerin ders kodlar›n›n ve harf notlar›n›n listelenebilmesi için afla¤›daki gibi bir sorguya gerek duyulur: SELECT n.DERSKOD, n.HARFNOT FROM NOTLAR n, OGRENCILER o WHERE o.OGRNO = n.OGRNO; Yukar›daki sorguya dikkat edilecek olursa, WHERE cümleci¤inde bir efllefltirme oldu¤unu görülebilir. OGRENCILER tablosundaki OGRNO kolonu ile NOTLAR tablosundaki OGRNO kolonu aras›nda bir efllefltirme yap›lm›flt›r. Bu veritaban›n› kullanarak gelifltirilen uygulamalarda yukar›daki sorgu s›kl›kla kullan›l›yorsa bu sorguya daha h›zl› cevap alabilmek için afla¤›daki gibi bir indeks yap›land›rmas›na gerek duyulur. CREATE INDEX OGRENCI_NUMARASI_INDEKSI ON NOTLAR(OGRNO);

Yukar›daki indeks tan›mlamas› NOTLAR tablosunda OGRNO sütunu üzerinde bir indeks oluflturulmas›na olanak sa¤lar. Herhangi bir SELECT sorgusunda NOTLAR tablosundaki OGRNO alan› kullan›ld›¤› zaman tan›mlanan indeks sayesinde daha h›zl› sonuç al›nmas› mümkündür. Yukar›daki SELECT sorgusunda OGRENCILER tablosundaki OGRNO sütunu için herhangi bir indeks oluflturulmas›na gerek yoktur. Çünkü bu kolon zaten OGRENCILER tablosunun birincil anahtar› olarak tan›mlanm›flt›r. Veritaban› yönetim sistemleri, tablolardaki birincil anahtarlar için otomatik olarak indeksleme ifllemi gerçeklefltirirler. Ayn› nedenden dolay› NOTLAR tablosundaki NOTID sütunu için de herhangi bir indeks tan›mlamas›na gerek bulunmamaktad›r.

‹ndeks Kullan›m›nda Nelere Dikkat Edilmeli? ‹ndeks kullan›m› sorgular› h›zland›rmakla birlikte, afl›r› kullan›m› veritaban›n›n eriflim performans›n› ciddi oranda düflürebilir. ‹ndekslerin ne zaman oluflturulmas› gerekti¤i konusunda dikkat edilmesi gereken kurallar flöyle özetlenebilir: • ‹ndeks oluflturulurken mutlaka SELECT sorgular›nda s›kl›kla kullan›lan alanlar seçilmelidir. Di¤er alanlar için indeks oluflturmak hem veritaban› performans›n› düflürür hem de gereksiz yere sabit disk alan› kullan›lmas›na sebep olur.

135

136

SIRA S‹ZDE

D Ü fi Ü N E L ‹ M S O R U

D‹KKAT

SIRA S‹ZDE

AMAÇLARIMIZ

K ‹ T A P

TELEV‹ZYON

‹NTERNET

Veritaban› Uygulamalar›

• Say› içerikli kolonlarda indeks kullan›lmas›, karakter içerikli alanlarda kullan›lmas›na göre daha yüksek performans art›fl› sa¤lar. • Karakter içerikli (character varying ile tan›ml›) alanlarda içeri¤i s›kl›kla de¤iflen tablolar için indeks kullanmak veritaban› performans›n› düflürür. Çünkü her yeni kay›t eklendi¤inde veya var olan kay›tlar de¤iflti¤inde indekslerin güncellenmesi gereklidir. • E¤er karakter içerikli alanlar›n içeri¤i çok s›kl›kla de¤iflmiyorsa bu tip alanlarda indeks kullan›labilir. Örne¤in kullan›c›lar›n e-posta adresleri s›kl›kla de¤iflmez. Bu nedenle e-posta adreslerini tutan sütunda indeks tan›mlamas› yap›labilir. • Sorgularda min, max, order by, group by gibi çeflitli matematiksel ifllemler, s›ralamalar ve gruplamalar›n yap›ld›¤› durumlarda ilgili sütun üzerinde indeks oluflturmak performans art›fl›na sebep olur. • E¤er sütun içindeki bilgiler çok de¤iflkenlik göstermiyorsa bu sütunlar için indeks tan›mlamak gereksiz disk alan› kayb›na sebep olur. Örne¤in tablolar›n›zdan birinde, kullan›c›n›n durumunun aktif veya pasif olup olmad›¤›n› tutan bir sütun bulundu¤unu düflünelim. Bu kolonda bulunan tüm alanlar, aktif ve pasif olmak üzere iki farkl› de¤er almaktad›r. Böyle bir durumda indeks kullanmak çok mant›kl› de¤ildir. Çünkü kolon içindeki veriler indeks oluflturmaya gerek olacak kadar de¤iflkenlik göstermemektedir. ‹ndeks kullan›m› konusunda, yukar›da belirtilen konular› özetlersek, indekslerin arama ifllemlerinde s›kl›kla kullan›lan ve içeri¤i de¤iflkenlik gösteren sütunlar SIRA S‹ZDE üzerinde oluflturulmas› gerekti¤i sonucuna varabiliriz. Bununla birlikte e¤er bir sütundaki de¤erler s›kl›kla arama ifllemlerinde kullan›l›yorsa veya yabanc› anahtar olarak tan›mlanm›flsa bu kolanlar üzerinde de indeks oluflturmak veritaban› perD Ü fi Ü N E L ‹ M formans›n› art›r›r. Bunlar›n d›fl›ndaki sütunlar üzerinde gerekmedikçe indeks kullan›m›ndan kaç›n›lmal›d›r. Gereksiz indeks kullan›m› özellikle UPDATE, INSERT, S O R U DELETE ifllemlerinde veritaban› performans›n› düflürür ve disk kullan›m›n› art›r›r. Hangi tablolar›n D ‹ K Kne A Tkadar s›kl›kla sorguland›¤› belirlendikten sonra indekslemenin yap›lmas› daha baflar›l› sonuçlar almam›z› sa¤lar.

N N

SIRA S‹ZDE

Eflsiz ‹ndeks (Unique Index) Kavram›

‹ndekslerin üzerinde durulmas› gereken özel bir biçimi de eflsiz (unique) indekslerdir. Eflsiz indeksler yap› itibariyle normal indekslerle ayn› ifli görürler. Aralar›nAMAÇLARIMIZ daki tek fark eflsiz indeks oluflturmak için kullan›lan sütunlardaki de¤erlerin birbirlerinden farkl› olmas› zorunlulu¤udur. Bir baflka deyiflle, e¤er bir sütun üzerinde K ‹oluflturulmufl T A P eflsiz indeks ise bu sütundaki tüm de¤erler birbirinden farkl› olmak zorundad›r. Bu yönüyle eflsiz indeksler birincil anahtarlara benzerler. Birincil anahtarlar›n eflsiz indekslerden fark› ise bir tabloda sadece bir tane biT E L Eolabilirken V‹ZYON rincil anahtar birden fazla eflsiz indeks olabilmesidir. Eflsiz indeksler veri bütünlü¤ünü sa¤lamak için s›kl›kla kullan›l›rlar. Eflsiz indeks oluflturulmufl bir sütunda ayn› de¤erin ikinci defa oluflmas›n›n engellenmesi garanti alt›na al›nm›fl olur. Bir önceki bölümde birincil anahtarl› olarak oluflturulan sütunlarda otomatik ‹NTERNET olarak indeksleme yap›ld›¤›n› ö¤renmifltik. Yap›lan bu indeksleme asl›nda eflsiz indekslemedir. Eflsiz indeksleme sayesinde o sütun üzerinde yap›lan arama ifllemlerinde bir performans art›fl› görülür. Ayr›ca sütundaki de¤erlerin birbirlerinden farkl› (eflsiz) olmas› garanti alt›na al›n›r.

7. Ünite - ‹ndeksleme ve K›s›tlama

137

Eflsiz indeks oluflturma örne¤i için bir önceki Ünitede kullan›lan CografiBilgiler veritaban›n› göz önünde bulundural›m. Bu veritaban›ndaki Ulkeler ve Sehirler tablosunun içeri¤i Tablo 1’de gösterilmektedir. ULKEID’nin yan›nda yer alan PK ifadesi, kolonun birincil anahtar (Primary Key) oldu¤unu göstermektedir. ULKEID( PK)

ULKEADI

1

A.B.D.

20

M›s›r

32

Belçika

49

Almanya

81

Japonya

90

Türkiye

91

Hindistan

93

Afganistan

212

Fas

Tablo 7.1 Ulkeler tablosunun içeri¤i

SEHIRID(PK)

ULKEID

SEHIRADI

1

93

Kabil

2

1

New York City

3

90

Ankara

4

81

Tokyo

5

212

Rabat

6

49

Berlin

7

32

Bern

8

91

Delhi

9

90

‹stanbul

10

20

M›s›r

Ulkeler tablosunun ilk sütunu olan ULKEID sütunu birincil anahtar olarak tan›mland›¤› için bu sütunundaki tüm de¤erlerin birbirinden farkl› olmas› garanti alt›na al›nm›fl demektir. Ulkeler tablosundaki ULKEADI sütunundaki de¤erlerin de birbirlerinden farkl› olmas› gerekmektedir. Tabloda sadece bir tane birincil anahtar bulunabilece¤i için ve birincil anahtar olarak ULKEID sütunundaki kullan›ld›¤› için ULKEADI sütunundaki de¤erlerin eflsiz olmas›n›, bu sütun üzerinde bir eflsiz indeks tan›mlayarak sa¤layabiliriz. CREATE UNIQUE INDEX ULKE_ADI_INDEKSI ON ULKELER(ULKEADI); Böyle bir durumda art›k ülke ad› sütunu tüm de¤erlerin de birbirinden farkl› olmas› garanti alt›na al›nm›flt›r. Örne¤in, içeri¤i Tablo 1’de verilen Ulkeler tablosuna yeni bir kayd›n INSERT komutuyla eklenmesi flöyle gerçeklefltirilebilir: INSERT INTO ULKELER(ULKEID,ULKEADI) VALUES (100,'Türkiye');

Tablo 7.2 Sehirler tablosunun içeri¤i

138

Veritaban› Uygulamalar›

INSERT komutu, Ulkeler tablosuna ULKEID de¤eri 100 olan ve ULKEADI de¤eri “Türkiye” olan bir kay›t eklemeye çal›fl›r. Fakat Tablo 1’in içeri¤i incelenecek olursa, bu tabloda ULKEADI kolonunda zaten “Türkiye” de¤erine sahip bir kay›t bulunmaktad›r. Bu tablo üzerinde ULKE_ADI_INDEKSI isimli eflsiz indeks oluflturuldu¤u için yukar›daki INSERT komutu çal›flmayacak ve tabloda zaten ULKEADI sütununda “Türkiye” de¤erine sahip bir kay›t bulundu¤u gerekçesiyle kayd›n eklenmesi veritaban› yönetim sistemi taraf›ndan engellenecektir.

Eflsiz ‹ndekslerin Birden Fazla Sütun Üzerinde Kullan›lmas› Eflsiz indeksler birden fazla sütunun birlikte ald›klar› de¤erlerin eflitsizli¤ini garanti alt›na almak için de kullan›labilir. Bu ifllemi daha iyi aç›klayabilmek için Sehirler tablosunun kullan›m›n› inceleyelim. Bu tablodaki SEHIRID sütunu zaten birincil anahtar olarak tan›mlanm›flt›r. Dolay›s›yla bu sütundaki tüm de¤erlerin birbirinden farkl› olmas› birincil anahtar tan›mlamas›yla zaten garanti alt›na al›nm›fl demektir. Ancak, ULKEID sütunu için ise ayn› fleyleri söylemek mümkün de¤ildir. Çünkü genellikle bir ülkede birden fazla flehir bulunur. Bu da ayn› ULKEID de¤erine sahip birden fazla flehir bilgisinin olabilmesini gerektirir. Sehirler tablosunda ayn› ULKEID ve SEHIRADI de¤erine sahip tek bir kayd›n bulunmas› sa¤lanmal›d›r. Tabloda ULKEID ve SEHIRADI sütünlar›nda ayn› de¤erler bulunan iki kayd›n bulunmas›n› engelleyebilmek için bu 2 sütunun bir arada kullan›ld›¤› bir eflsiz indeksin tan›mlanmas› gereklidir. Bu ifllem afla¤›daki SQL komutuyla gerçeklefltirilebilir: CREATE UNIQUE INDEX SEHIRLER_INDEKSI ON SEHIRLER(ULKEID, SEHIRADI) Yukar›daki komut, SEHIRLER tablosu üzerinde ULKEID ve SEHIRADI sütunlar›n› kullanarak eflsiz bir indeks tan›mlanmas›n› sa¤lar ve bu indekse SEHIRLER_INDEKSI ad› verilir. ‹ndeks sayesinde içeri¤i Tablo 2 gibi olan bir flehirler tablosuna afla¤›daki gibi bir kay›t eklenemeyecektir: INSERT INTO SEHIRLER(SEHIRID,ULKEID,SEHIRADI) VALUES (11, 90, 'Ankara'); Yukar›daki komut Sehirler tablosuna SEHIRID de¤eri 11, ULKEID de¤eri 90 ve SEHIRADI de¤eri “Ankara” olan bir kay›t eklemeye çal›fl›r. E¤er SEHIRLER_INDEKSI isimli eflsiz indeks tan›mlanm›flsa, yukar›daki komut çal›flt›r›ld›¤›nda tabloda ULKEID de¤eri 90 ve SEHIRADI de¤eri “Ankara” olan bir kay›t bulundu¤undan dolay› veritaban›na bu eklemenin yap›lmas›na izin verilmez. E¤er bu tablo üzerinde SEHIRLER_INDEKSI isimli bir eflsiz indeks tan›mlanmasayd› yukar›daki INSERT komutu sorunsuz bir flekilde çal›flacakt› ve Ankara isimli fakat farkl› SEHIRADI’si bulunan iki ayr› kay›t bulunacakt›.

KISITLAR VE KISITLAMALAR (CONSTRAINTS) K›s›tlar, verilerin tutarl›l›¤›n› sa¤lamak için tablolar oluflturulurken kullan›lan denetim ifllemleridir ve tablolardaki sütunlar›n alaca¤› de¤erlerin belirli koflullar› sa¤lamas›n› garanti alt›na al›r. Örne¤in, kat›l›m yüzdelerinin bulundu¤u bir sütundaki de¤erlerin 0 ile 100 aras›nda olmas› garanti alt›na al›nmak istenirse, tablo yarat›l›rken bu sütun tan›m›na de¤erlerin minimum 0 ve 100 aras›nda de¤iflebilece¤ini anlatan bir k›s›t ifadesi konulabilir. K›s›tlar›n befl farkl› çeflidi bulunmaktad›r:

7. Ünite - ‹ndeksleme ve K›s›tlama

1. 2. 3. 4. 5.

Kontrol K›s›tlar› (Check Constraints) “Not Null” K›s›tlar› (Not Null Constraints) Eflsizlik K›s›tlar› (Unique Constraints) Birincil Anahtar K›s›tlar› (Primary Key Constraints) Yabanc› Anahtar K›s›tlar› (Foreign Key Constraints)

Kontrol K›s›tlar› (Check Constraints) Bu k›s›tlar bir sütun üzerindeki de¤erlerin belirli bir flart› sa¤lay›p sa¤lamad›¤›n› kontrol etmek içeren kullan›l›r. Kontrol k›s›tlar› için afla¤›daki komutu inceleyelim: CREATE TABLE ANKETKATILIMCI ( KATILIMCIID integer, ISIMSOYISIM varchar(50), SEHIR varchar(30) EGITIMDURUMU char(1) KATILIMCI_YASI integer CHECK (KATILIMCI_YASI > 0) );

Yukar›daki komutla, ANKETKATILIMCI isimli befl kolondan oluflan bir tablo oluflturulmaktad›r. Tablo tan›m›n›n en sonunda bir CHECK ifadesi bulunmaktad›r. Bu k›s›t, tabloya eklenecek kat›l›mc› kay›tlar›ndaki KATILIMCI_YASI de¤erinin 0’dan büyük olup olmad›¤›n› kontrol eder. Bir baflka ifadeyle afla¤›daki yukar›daki tabloya KATILIMCI_YASI de¤eri 0 olan bir kay›t eklenemez. PostgreSQL tan›mlanan k›s›tlamalara aç›klay›c› olmas› bak›m›ndan tan›mlay›c› bir isim verilmesine izin verir. Örne¤in yukar›daki tablo oluflturma ifadesi, YAS_KONTROL ismiyle birlikte afla¤›daki gibi tan›mlanabilir: CREATE TABLE ANKETKATILIMCI ( KATILIMCIID integer, ISIMSOYISIM varchar(50), SEHIR varchar(30) EGITIMDURUMU char(1) KATILIMCI_YASI integer YAS_KONTROL CHECK (KATILIMCI_YASI > 0) );

Kontrol k›s›tlar›nda sadece d›flar›dan de¤erlerin kullan›lmas› gibi bir zorunluluk yoktur. ‹ki sütunun de¤eri birbirleriyle karfl›laflt›r›l›p belirli formatta veri girifli sa¤lanabilmektedir. Böyle bir durum için afla¤›daki tablo oluflturma komutu verilebilir: CREATE TABLE ULKEDETAY ( ULKEID integer, ULKEBASKENT, varchar(30), ULKENUFUS integer CHECK(ULKENUFUS > 0), BASKENTNUFUS integer CHECK(BASKENTNUFUS > 0), YUZOLCUMU integer, CHECK(BASKENTNUFUS < ULKENUFUS) ); Yukar›daki komut ULKEDETAY isimli befl sütundan oluflan bir tablo oluflturur. Bu komutta 3 farkl› kontrol ifadesi kullan›lm›flt›r. Bu ifadelerin karfl›l›klar› afla¤›daki gibidir:

139

140

Veritaban› Uygulamalar›

• CHECK(ULKENUFUS > 0): ULKENUFUS sütunundaki tüm de¤erler s›f›rdan büyük olmas›n› sa¤lar. • CHECK(BASKENTNUFUS > 0): BASKENTNUFUS sütunundaki tüm de¤erlerin s›f›rdan büyük olmas›n› sa¤lar. • CHECK(BASKENTNUFUS < ULKENUFUS): BASKENTNUFUS sütununun ald›¤› de¤erin ULKENUFUS sütununun ald›¤› de¤erden küçük olmas›n› sa¤lar.

“Not Null” K›s›tlar› (Not Null Constraints) NOT NULL k›s›t›, bir kay›tta herhangi bir koluna bofl de¤er girilmesini engeller. E¤er bu k›s›t kullan›lmaz ise INSERT ifllemlerinde bir sütunun de¤erinin belirlenmedi¤i durumlarda bu sütunun de¤eri otomatik olarak Null olarak atan›r. Bilgisayar terminolojisinde, Null de¤eri “bofl” ya da “herhangi bir de¤er atanmam›fl” anlam›na gelir. Bu k›s›t türünün kullan›ld›¤› SQL komutu flöyle olabilir: CREATE TABLE KITAPLAR ( KITAPID integer NOT NULL, KITAPADI text NOT NULL, YAYINEVI text NOT NULL, YAZAR text NOT NULL, FIYAT numeric NOT NULL );

Yukar›daki komut KITAPLAR ad›nda befl sütundan oluflan bir tablo yarat›lmas›n› sa¤lar. “Not Null” k›s›tlamas›n› yapabilmek için, içeri¤inin null olmas› istenmeyen sütunlar›n arkas›na “NOT NULL” ifadesi eklenmelidir. Bu flekilde tabloda yer alacak olan kay›tlar›n hiçbir sütununun bofl olarak girilmemesi sa¤lan›r. “Not Null” k›s›tlar› kontrol k›s›tlar›yla da bir arada kullan›labilir: CREATE TABLE KITAPLAR ( KITAPID integer NOT NULL, KITAPADI text NOT NULL, YAYINEVI text NOT NULL, YAZAR text NOT NULL, FIYAT numeric NOT NULL CHECK(FIYAT > 0) );

Yukar›daki komutta FIYAT sütunu için kontrol ve “not null” k›s›tlar› birlikte tan›mlanm›flt›r. Hangi k›s›t›n daha önce tan›mland›¤›n›n bir önemi bulunmamaktad›r.

Eflsizlik K›s›t› (Unique Constraints) Eflsizlik k›s›tlar›, eflsiz indeksler oluflturman›n di¤er bir yoludur. PostgreSQL veritaban› dokümantasyonunda CREATE UNIQUE INDEX komutu yerine eflsiz k›s›tlar›n kullan›lmas› önerilmektedir. Eflsizlik k›s›t›n› gerçekleyebilmek için afla¤›daki örnek göz önüne al›nabilir: CREATE TABLE KITAPID KITAPADI YAYINEVI YAZAR ISBNNO FIYAT );

KITAPLAR ( integer, character varying(50), character varying(50), character varying(50), integer UNIQUE, float

7. Ünite - ‹ndeksleme ve K›s›tlama

141

Yukar›daki komut ile oluflturulan tabloda ISBNNO sütunu üzerinde bir eflsizlik k›s›t› oluflturulmufltur. ISBN, her kitaba verilen eflsiz bir numarad›r. Bu ifade arac›l›¤›yla daha tablo yarat›l›rken ISBNNO sütunu üzerinde otomatik olarak eflsiz indeks oluflturulur. Böylece ISBNNO sütunu alt›ndaki tüm de¤erlerin birbirinden farkl› olmas› garanti alt›na al›nm›fl olur. Eflsiz indeks oluflturulurken birden fazla sütun bir arada kullan›labilmektedir. Eflsiz indeksler konusu ifllenirken, örne¤i verilen Sehirler tablosunu eflsizlik k›s›t› kullanarak oluflturmak için Tablo 3’ü inceleyelim. Tabloda sol tarafta bulunan komut eflsizlik k›s›t›n› kullan›r ve sütundaki de¤erlerin birbirlerinden farkl›l›¤›n› sa¤lamak için tek bafl›na yeterlidir. Sa¤ tarafta bulunan komut ise eflsiz indeks oluflturmay› sa¤lar. Tablo 3’te sa¤ ve sol tarafta yap›lan ifllemler birbirinin ayn›s›d›r. E¤er eflsiz indekslerin kullan›lmas› istenirse Tablo 3’ün sa¤ taraf›nda da gösterildi¤i gibi ilk önce tablonun oluflturulmas› daha sonra da CREATE UNIQUE INDEX komutuyla bir eflsiz indeks yarat›lmas› gerçeklefltirilebilir. CREATE TABLE SEHIRLER ( KITAPID integer, SEHIRID integer, SEHIRADI varchar(30), UNIQUE(SEHIRID, SEHIRADI) )

CREATE TABLE SEHIRLER ( KITAPID integer, SEHIRID integer, SEHIRADI varchar(30), ) CREATE UNIQUE INDEX ON SEHIRLER(ULKEID, SEHIRADI)

Birincil Anahtar K›s›tlar› (Primary Key Constraints) Birincil anahtar k›s›tlar›, bir kolonu birincil anahtar haline getirir. Bu k›s›tlama asl›nda “Not Null” k›s›t› ile eflsizlik k›s›t›n›n bir bileflimidir. Afla¤›daki SQL komutuyla yarat›lan KITAPLAR tablosu üzerinde söz konusu k›s›tlar›n kullan›lmas› gösterilebilir: CREATE TABLE KITAPLAR ( KITAPID integer PRIMARY_KEY, KITAPADI text, YAYINEVI text, YAZAR text, ISBNNO integer UNIQUE, FIYAT numeric );

KITAPLAR tablosunun tan›m›nda KITAPID sütunu PRIMARY_KEY anahtar sözcü¤üyle birincil anahtar haline getirilmifltir. PRIMARY_KEY anahtar sözcü¤ü yerine UNIQUE NOT NULL anahtar sözcükleri bir arada kullan›l›rsa da ayn› sonuç elde edilir. PRIMARY_KEY anahtar sözcü¤ünün fark› bu anahtar sözcü¤ün tablo içerisinde yaln›zca bir defa kullan›labilmesidir. UNIQUE NOT NULL ifadesi ise tablodaki tüm sütunlar için kullan›labilir.

Yabanc› Anahtar K›s›tlar› (Foreign Key Constraints) Yabanc› anahtar k›s›tlar› tablo oluflturulurken yabanc› anahtar tan›mlamalar›yla birlikte do¤rudan devreye girer. Bu k›s›tlar sayesinde iliflkisel veritabanlar›ndaki farkl› tablolarda birbirlerine referans gösterilen alanlar›n ve bu alanlar taraf›ndan temsil edilen kay›tlar›n bütünlü¤ü korunmufl olur. Bu iflleme referans bütünlü¤ü (referential integrity) ad› verilir. Örne¤in yap›lar› afla¤›da verilen KITAPLAR ve SIPARIS tablolar›n› göz önünde bulundural›m.

Tablo 7.3 Eflsiz K›s›t Oluflturma (Sol taraf) ve Eflsiz ‹ndeks Oluflturma (Sa¤ taraf).

142

Veritaban› Uygulamalar›

CREATE TABLE KITAPLAR ( KITAPID integer PRIMARY_KEY, KITAPADI character varying(50), FIYAT float ); CREATE TABLE SIPARIS ( SIPARISID integer PRIMARY_KEY, KITAPID integer REFERENCES KITAPLAR(KITAPID) SIPARISSAYI integer, FIYAT float ); Yukar›da REFERENCES anahtar sözcü¤ü SIPARIS tablosu üzerindeki KITAPID sütununu yabanc› anahtar olarak tan›mlar. Tan›mlanan yabanc› anahtar KITAPLAR tablosundaki KITAPID sütununun referans gösterilmesini sa¤lamaktad›r. Bu tan›mlamayla asl›nda bir k›s›t oluflturulmufltur. Oluflturulan k›s›t KITAPLAR tablosunda referans› olmayan bir kitap bilgisinin SIPARIS tablosuna eklenmesini engeller.

7. Ünite - ‹ndeksleme ve K›s›tlama

Özet

N AM A Ç

1

N AM A Ç

2

‹ndekslemenin ifllevini aç›klayabilecek, avantajlar›n› ve dezavantajlar›n› listeleyebileceksiniz. Veritaban›n›n performans›, buna ba¤l› olarak çal›flan uygulama yaz›l›mlar›n›n da h›zlar›n› etkiler. Kullan›c› say›s›n›n ve depolanan veri miktar›n›n art›fl› veritaban›n›n ifllem yükünü art›r›r. Veritaban› yönetim sistemlerine gönderilen SQL sorgular›n›n en k›sa sürede yan›tlanabilmesi ancak veritaban› içinde yer alan verilere en k›sa sürede ulafl›lmas›yla gerçekleflir. Veritaban› yönetim sisteminin tablo içindeki verilerde gerçeklefltirdi¤i arama ifllemini h›zland›ran yönteme indeksleme ad› verilmektedir. ‹ndeksleme, bir kitaptaki içindekiler sayfas›na benzetilebilir. ‹ndeks kullan›rken, kullanma kurallar›na uyacaks›n›z. ‹ndekslemenin afl›r› kullan›m›, özellikle indekslerin veritaban›ndaki veri miktar›n› geçmesi, veritaban› tepki süresini azaltmak yerine art›rabilir. ‹ndekslemenin sadece s›k sorgulanan kolonlar üzerinde yap›lmas›, nümerik de¤er içeren kolonlar›n tercih edilmesi, s›k de¤iflen kolonlarda uygulanmamas› önerilmektedir. Birincil anahtar olan kolonlar otomatik olarak indekslendi¤inden, indeksleme gerekli de¤ildir.

N A M A Ç

3

143

SQL sorgulamalar›nda k›s›tlamalar› kullanabileceksiniz Veri bütünlü¤ünün ve geçerlili¤inin sa¤lanmas›, veritaban› sistemleri için son derece önemlidir. Kifli bilgilerinin tutuldu¤u bir tabloda, kiflinin yafl›n›n negatif olmamas› istenen bir kofluldur. Di¤er bir örnek kiflinin ad ve soyad›n›n bofl b›rak›lmamas›d›r. Veri tutarl›l›¤›n› veritaban› yönetim sisteminin kontrol etmesi için, tablodaki veri alanlar›na k›s›tlar konulabilir. Veritaban›na kay›t eklenirken, VTYS k›s›tlar› kontrol eder, e¤er uymayan bir durum varsa hata mesaj› döndürerek veri kayd›n› engeller.

144

Veritaban› Uygulamalar›

Kendimizi S›nayal›m 1. ‹ndeks nedir? a. Veritaban› içindeki bütün veriler için içindekiler sayfas›d›r. b. Sorgular› h›zland›rmak için kullan›lan bir veri yap›s›d›r. c. Birincil anahtar kolonunda yer alan bilgilerdir. d. Eflsiz kolon de¤erleridir. e. Her kay›t için verilen özel numaralard›r. 2. ‹ndeksleme ifllemi yap›ld›¤›nda, afla¤›daki SQL komutlar›ndan hangisi daha h›zl› çal›flabilir? a. SELECT b. UPDATE c. INSERT INTO d. CREATE TABLE e. CREATE DATABASE 3. NULL’›n anlam› nedir? a. Bir de¤er atanmad›¤›n› gösterir. b. Birincil anahtarl› alanlara girilen de¤erlerdir. c. ‹ndeks veri yap›s›d›r. d. Negatif de¤er anlam›na gelir. e. Eflsiz bir say›d›r. 4. Hangi kolonlar›n indekslenmesi, VTYS’lerinin h›z›n› art›r›r? a. S›k de¤iflen b. ‹çinde karakter dizisi bulunduran c. S›k veri eklenen d. S›k sorgulanan e. ‹çinde evet ve hay›r gibi iki de¤er içeren 5. Referans bütünlü¤ü nedir? a. ‹ki tabloda yer alan bilgilerin bir araya getirilerek tek tablo halinde bütünlefltirilmesidir. b. Tabloya kay›t eklerken, di¤er bir tabloya veri eklenmesidir. c. Birbirlerine referans gösterilen alanlar›n bulundu¤u farkl› tablolardaki kay›tlar›n bütünlü¤üdür. d. Kolonlardaki verilerin belli k›s›tlarla kontrol edilmesidir. e. Birincil anahtar ve yabanc› anahtar aras›ndaki iliflkinin kurulmas›d›r.

6. Bir kolondaki de¤erlerin eflsiz olmas› için kullan›lan yöntem afla¤›dakilerden hangisidir? a. Yabanc› anahtar kullan›m› b. Eflli indeks c. Eflsiz indeks d. Yabanc› indeks e. Referans k›s›t› kullan›m› 7. Eflsiz k›s›t yöntemi yerine kullan›labilecek yöntem afla¤›dakilerden hangisidir? a. Eflsiz referans b. ‹kincil anahtar c. Yabanc› anahtar kullan›m› d. Koflullu k›s›t e. Eflsiz indeks 8. Afla¤›dakilerden hangisi, birincil anahtar kullan›m›n›n sorunlar›ndan biridir? a. Birden fazla tabloda ayn› isimde bulunan kolonlar birincil anahtar olarak tan›mlanamazlar. b. Tablodaki sadece bir kolon birincil anahtar olarak tan›mlanabilir. c. Birincil anahtar kolonlar› sadece nümerik de¤er içeren kolonlardan oluflur. d. Birincil anahtar olarak tan›mlanan kolon yabanc› anahtar olarak tan›mlanamaz. e. Yabanc› anahtar ve birincil anahtar ayn› tabloda olamaz. 9. KITAPLAR ve SIPARIS adl› tablolar, s›ras›yla kitap tan›mlar›n› ve siparifl edilen kitaplar› içermektedirler. Buna göre, olmayan bir kitab›n siparifl edilmesini engellemek için, SIPARIS tablosunun tan›m›nda kullan›lmas› gereken anahtar kelime afla¤›dakilerden hangisidir? a. REFERENCES b. SELECT c. PRIMARY_KEY d. FOREIGN_KEY e. CREATE TABLE 10. Eflsiz indeks yaratmak için kullan›lan SQL komutu afla¤›dakilerden hangisidir? a. CREATE TABLE b. CREATE TABLENAMESPACE c. FOREIGN_KEY d. CREATE UNIQUE INDEX e. REFERENCES

7. Ünite - ‹ndeksleme ve K›s›tlama

145

Kendimizi S›nayal›m Yan›t Anahtar›

Yararlan›lan ve Baflvurulabilecek Kaynaklar

1. b

PostgreSQL El kitab› http://www.postgresql.org/docs/8.0/interactive/indexes-unique.html http://www.postgresql.org/docs/8.1/static/ddl-constraints.html S. Buxton (2009). Database design: know it all. Amsterdam; Boston: Morgan Kaufmann Publishers/Elsevier. P. Revesz (2010). Introduction to Databases. New York: Springer.

2. a 3. a 4. d 5. c 6. c 7. e 8. b 9. a 10. d

Yan›t›n›z yanl›fl ise “Girifl” bafll›kl› bölümü tekrar ediniz. Yan›t›n›z yanl›fl ise “Veri Taban› ‹ndeksleri” bafll›kl› bölümü tekrar ediniz. Yan›t›n›z yanl›fl ise “K›s›tlar ve K›s›tlamalar (Constraints)” bafll›kl› bölümü tekrar ediniz. Yan›t›n›z yanl›fl ise “K›s›tlar ve K›s›tlamalar (Constraints)” bafll›kl› bölümü tekrar ediniz.. Yan›t›n›z yanl›fl ise “K›s›tlar ve K›s›tlamalar (Constraints)” bafll›kl› bölümü tekrar ediniz. Yan›t›n›z yanl›fl ise “Veri Taban› ‹ndeksleri” bafll›kl› bölümü tekrar ediniz. Yan›t›n›z yanl›fl ise “K›s›tlar ve K›s›tlamalar (Constraints)” bafll›kl› bölümü tekrar ediniz. Yan›t›n›z yanl›fl ise “K›s›tlar ve K›s›tlamalar (Constraints)” bafll›kl› bölümü tekrar ediniz. Yan›t›n›z yanl›fl ise “K›s›tlar ve K›s›tlamalar (Constraints)” bafll›kl› bölümü tekrar ediniz. Yan›t›n›z yanl›fl ise “Veri Taban› ‹ndeksleri” bafll›kl› bölümü tekrar ediniz.

VER‹TABANI UYGULAMALARI

8 Amaçlar›m›z

N N N N

Bu üniteyi tamamlad›ktan sonra; Co¤rafi bilgi sistemlerindeki standartlar›n önemini aç›klayabileceksiniz. XML veri biçimini kullanabileceksiniz. Bafll›ca OpenGIS standartlar›n›n nas›l uyguland›¤›n› göreceksiniz. Web üzerinden sa¤lanan haritalar›n nas›l oluflturuldu¤unu anlayacaks›n›z.

Anahtar Kavramlar • OpenGIS • Co¤rafi Bilgi Sistemleri • XML veri tipi

• GML • OpenGIS Standartlar›

‹çerik Haritas›

Veritaban› Uygulamalar›

OpenGIS Standartlar›

• G‹R‹fi • B‹LG‹ TEKNOLOJ‹LER‹NDE STANDARTLARIN ÖNEM‹ • OpenGIS STANDARTLARI • OpenGIS REFERANS MODEL‹ VE ÖRNEKLER

OpenGIS Standartlar› G‹R‹fi Co¤rafi konumlar› bilgiyle birlefltiren sistemlere Co¤rafi Bilgi Sistemleri ad› verilmektedir. ‹nternet ve web, co¤rafi bilgi sistemlerinde on sene öncesine göre ciddi de¤ifliklikler gerçekleflmesine neden olmufltur. Birbiriyle ba¤lant›l› bilgisayarlar›n oluflturdu¤u bir yap› olan ‹nternet, sistemler aras›ndaki veri al›flveriflini kolaylaflt›rmaktad›r. Art›k veri farkl› yerlerde de olsa, ‹nternet sayesinde bu veriler derlenebilmekte ve bilgi haline getirilebilmektedir. Google Earth ve Google Maps gibi uygulamalar, ‹nternet kullan›c›lar›n›n co¤rafi bilgi sistemlerinden yararlanmalar›n› kolaylaflt›rm›flt›r. Web temelli sistemler ve ucuzlayarak cep telefonlar›na giren GPS al›c›lar›, co¤rafi hizmetlerin yayg›n flekilde kullan›lmas›na ve çeflitlenmesine yol açm›flt›r. Yayg›nlaflmayla birlikte gelen en büyük sorunlardan biri, co¤rafi nesnelerin her sistemde farkl› flekilde tutulmas› olmufltur. Geçti¤imiz on y›l içinde Open Geospatial Konsorsiyumu (OGC) ad› verilen bir kuruluflun çal›flmalar›yla, co¤rafi veri modelleri ve dosya biçimleri standartlaflm›flt›r. Bu bölümde, standartlaflt›r›lan co¤rafi veri modellerinin sa¤lad›¤› yararlar›, OpenGIS konsorsiyumunun gelifltirdi¤i standartlar›, bir co¤rafi veri modelinin nas›l kurulmas› gerekti¤i, OpenGIS standartlar›n› sa¤layan veritaban› yönetim yaz›l›mlar›n› ve OpenGIS standartlar›n› kullanan aç›k kaynak kodlu sistemleri inceleyece¤iz.

B‹LG‹ TEKNOLOJ‹LER‹NDE STANDARTLARIN ÖNEM‹ Bilgi teknolojilerindeki en önemli konulardan biri standartlard›r. Standartlar, farkl› sistemlerin ve yaz›l›mlar›n birbirleri aras›nda veri transferi yapabilmelerini ve di¤er bir deyiflle “ayn› dilde konuflabilmelerini” sa¤lar. Örne¤in, IETF (Internet Task Force: ‹nternet Görev Gücü) ve Uluslararas› standartlar kurumu (ISO) gibi kurulufllar, ‹nternet ve WWW’in çal›flmas› için gerekli standartlar› oluflturmufllard›r. Bu flekilde, birbirinden farkl› donan›mlar üzerinde çal›flan, de¤iflik iflletim sistemleri bulunan ve farkl› a¤ iletim yöntemleri kullanan yerel a¤lar›n birbirleriyle haberleflebilmeleri standartlar sayesinde gerçekleflmektedir. Bilgi teknolojilerindeki standartlar, sistemlerin birbiriyle çal›flabilirli¤ini sa¤lar. Örne¤in, C++ bilgisayar dilinde yaz›lm›fl bir program A sisteminde derlenerek çal›flt›r›ld›¤›nda, C++ standard›n› destekleyen B sisteminde de çal›flt›r›labilmelidir. SQL standard›n› destekleyen bir veritaban›na gönderilen SQL dilinde yaz›lm›fl sorgu komutlar›, di¤er bir veritaban› yönetim sisteminde de ayn› veri seti üzerinde hata vermeden ayn› sonuçlar› vermelidir.

148

Veritaban› Uygulamalar›

Veri yap›lar›ndaki standartlar da, özellikle veri de¤ifliminin kolaylaflmas›n› sa¤lar. Örne¤in, haritalarda yollar›n modellenmesi birbirine eklenmifl çizgilerden oluflur. Çizgilerin sonu izleyen çizginin bafllang›c›d›r. Çizgilerin kesiflti¤i noktalara dü¤üm ad› verilir. Ancak co¤rafi bilgi sistemleri üreticisi olan her flirketin, farkl› ö¤eleri (çizgi, dü¤üm, vb) farkl› isimlerle tan›mlamas›, her nesneye atanan niteliklere (cadde geniflli¤i, yol kaplamas›n›n çeflidi) atanan isimlerin farkl› olmas› yaz›l›mlar aras›ndaki uyumsuzlu¤u ortaya ç›kar›r. XML (Extensible Markup Language), bir veri dosyas› biçimi olarak 1998 y›l›nda standartlaflm›flt›r. XML dosyalar›n›n en önemli özelli¤i metin dosyalar› olmas›d›r. “” karakterleri aras›nda yer alan etiketlerin bir araya gelmesiyle oluflur. XML dosyalar›, geniflleme olanaklar› nedeniyle yayg›n bir kullan›m alan›na kavuflmufltur. Özellikle web teknolojilerinde, ‹nternet üzerinde yer alan farkl› sistemler aras›ndaki veri iletimini kolaylaflt›rm›flt›r. Co¤rafi bilgi sistemlerinde, verilerin XML olarak kodlanmas› yayg›n bir flekilde uygulanmaktad›r. Aç›k GIS konsorsiyumu (OGC: Open Geospatial Consortium, (http://www.opengeospatial.org/) kar amac› gütmeyen uluslararas› bir kurulufltur. 2010 y›l› itibariyle, co¤rafi bilgi sistemleri konusunda çal›flan yaklafl›k 400 flirketin ve kurumun kat›l›m›yla faaliyetlerini sürdürmektedir. Kurulufl amac›, uzamsal ve konumsal hizmetler için standartlar gelifltirmektir. OGC taraf›ndan görevlendirilen uzmanlar taraf›ndan önerilen ve gelifltirilen standartlar, çeflitli flirketler taraf›ndan gelifltirilen sistemler aras›ndaki uyumu sa¤lar. Yeni talepler ve gereksinimler do¤rultusunda var olan standartlar da gelifltirilmektedir. Yeni eklenen özellikler yeni sürümlerle tan›mlanmaktad›r. Gelifltirilen standartlar›n temelinde XML standard›na dayal› GML (Geographic Markup Language) dosya tipi önemli bir yer tutar. Bu flekilde, yeni yaz›l›m teknolojilerinin ve kullan›c› gereksinimlerinin endüstrinin tamam› taraf›ndan h›zl› flekilde özümsenmesini kolaylaflt›r›r. Geçmiflte yap›lan yat›r›mlarla oluflturulan verilerin, dönüfltürme ifllemine tabi tutulmadan güncel yaz›l›mlarla kullan›labilmesini sa¤lar ve tek bir yaz›l›ma ba¤l› kal›nmas› durumunu engeller. Bir yaz›l›m üzerinde oluflturulan verilerin bir di¤eri taraf›ndan okunabilmesi, veriler üzerinde yap›lan ifllemleri de çeflitlendirir. Bir sistemde olmayan bir özelli¤in, di¤er bir sistemde olmas› durumunda, veriler üzerinde daha fazla say›da analiz yap›lmas› mümkündür. Bir yaz›l›m›n OpenGIS standartlar›na uyma durumu Aç›k GIS Konsorsiyumu taraf›ndan denetlenmektedir. Firman›n haz›rlad›¤› yaz›l›m OpenGIS standard›nda yer alan veri dosyalar›n› okumal› ve oluflturdu¤u veri dosyalar› OpenGIS standard›n› destekleyen di¤er yaz›l›mlar taraf›ndan sorunsuz flekilde okunabilmelidir. OpenGIS standartlar›n› destekleyen yaz›l›mlar ve destekledikleri standartlar›n sürümleri OGC web sitesinde yay›nlanmaktad›r.

XML nedir? XML, metin temelli veri dosyas› biçimidir. XML dosyalar›n›n en önemli özelli¤i, yeni özellikler eklendikçe, eski biçimin de okunabilmesidir. Etiketlerin aç›lmas› ve kapanmas› ve aralar›na verilerin konulmas›yla oluflturulur. Örne¤in, 30.52082243817922 ifadesi, boylam etiketi aras›nda boylam de¤erini ifade etmek için kullan›lmaktad›r. XML dosyas›, içiçe girmifl etiketlerden oluflur. Aç›lan her etiketin alt›nda, veri bulunabildi¤i gibi içiçe girmifl etiketlerden oluflan bir yap› da bulunabilir (fiekil 1)

149

8. Ünite - OpenGIS Standartlar›

Ahmet Ercan 21

fiekil 8.1 XML veri örne¤i

XML dilinin en önemli özelliklerinden biri, etiketlere niteliklerin atanmas›n› sa¤lamas›d›r. Örne¤in co¤rafi koordinat›n hangi koordinat sistemine göre de¤erlendirilece¤i 30.52082243817922 olarak ifade edilebilir. XML isim alanlar› (XML namespace) , etiketlere anlam yükleyen yap›lard›r. Örne¤in, GML isim alan›nda bir köprünün tan›mlanmas› Boğaziçi ifadesiyle yap›labilir. ‹sim alan› bir dosya halinde XML dosyas›n›n bafl›nda tan›mlan›r ve art›k “gml:” olarak bafllayan etiketler geri kalan xml dosyas›nda tan›n›r. XML dosyas›, etiketlerden olufltu¤undan, hangi etiketlerin geçerli oldu¤u veya etiketlerin içindeki de¤erlerin hangi veri tipinde (metin, tamsay›, gerçek say›, vb) olmas› gerekti¤i ve etiketlerin s›ras› gibi bilgiler ayr›ca tan›mlanmaktad›r. Bu tan›m dosyalar›na XML flemas› ad› verilir (fiekil 2) ve XML dosyas›n›n en bafl›nda hangi dosyan›n flema dosyas› olarak yüklenece¤i belirlenir.

OPENGIS STANDARTLARI Uzamsal veritaban›, co¤rafi nesnelerin özelliklerinin depolanmas› için kullan›l›r. Geleneksel anlamda bir veritaban› olmakla birlikte, geometrik nesneler de tutulmakta ve co¤rafi hesaplamalar konusunda yordamlar bulunmaktad›r. Sa¤lad›¤› avantajlar flunlard›r: • fiekillerin geometrik özellikleri depolan›r. Veritaban›nda, bir binan›n koordinatlar›yla birlikte kaç katl› oldu¤u, kaç daire bulundu¤u, binan›n boyas›n›n rengi gibi nitelikler de tutulur. • Uzamsal anlamda gerçeklefltirilen indeksleme, çok büyük ölçeklerde flekillerin seçilmesini kolaylaflt›r›r. Koordinatlar düflünülmeden indekslenen veritabanlar›nda, iki koordinatla belirlenen bir dikdörtgen flekilli alan içinde kalan nesnelerin bulunmas› bütün veritaban› içinde aramay› gerektirebilir. Ancak uzamsal olarak indekslenmifl veritabanlar›nda, belirli bir noktaya yak›n olan nesneler seçildi¤inden, arama boyutu küçülür ve sorgular h›zlan›r. • Uzamsal anlamda sorgulamalar yap›labilir. Örne¤in, bir okul binas›na bir kilometreden daha yak›n olan binalar h›zl› bir flekilde sorguyla döndürülebilir.

fiekil 8.2 Kifli veri yap›s› için flema dosyas›

150

Veritaban› Uygulamalar›

Co¤rafi veritaban›nda, tablolar bir haritan›n birer katman›n›, kolonlar flekillerin özelliklerini ve sat›rlar da fleklin geometrik özelliklerini içerir. Co¤rafi özellikler bar›nd›ran ticari anlamda üretilmifl çeflitli veritaban› yönetim yaz›l›mlar› bulunmaktad›r. Di¤er bir alternatifse, ücretsiz aç›k kaynak kodlu sistemlerdir. PostreSQL veritaban› yönetim yaz›l›m› ve POSTGIS kütüphanesi aç›k kaynak kodlu sistemlerin en yayg›n flekilde kullan›lanlar›ndan biridir. Di¤er bir sistem de MySQL veritaban› yönetim sistemidir. PostreSQL/PostGIS ve MySQL, Aç›k GIS konsorsiyumunun (OGC) belirledi¤i standartlara uymaktad›r.

OPENGIS REFERANS MODEL‹ VE ÖRNEKLER OGC’nin getirdi¤i standartlar›n say›s›, 2010 y›l› itibariyle yaklafl›k 30’dur. Standartlarda kullan›lan kavramlar, gereklilikler ve uygulama kurallar› OGC Referans Modeli (ORM) denilen bir modelde yer al›r. ORM’nin kendisi bir standart de¤il, standartlarda kullan›lan ortak kavramlar›n ve standartlar›n birbirleriyle olan iliflkilerin in tan›mland›¤› bir dokümand›r (http://www.opengeospatial.org/standards/orm) . OGC standartlar›n› anlamak için baflvurulan bir kaynak olarak da düflünülebilir. Günümüzde, bir bilgisayar a¤›na ba¤l› bir grup bilgisayara yüklenen ve k›s›tl› say›da kullan›c›n›n kullanabildi¤i co¤rafi bilgi sistemleri yerine, çok say›da kullan›c›n›n eriflebildi¤i çevrimiçi sistemler yayg›nlaflmaktad›r. Web izleyicileri üzerinden sunulan çevrimiçi co¤rafi bilgi sistemleri art›k mobil cihazlarda ve cep telefonlar›nda bile kullan›lmaktad›r. Web’in bu tür uygulamalar için sa¤lad›¤› çeflitli avantajlar bulunmaktad›r: 1) web’in bilgi sistemlerine dünyan›n heryerinden eriflimi kolaylaflt›rmas›, 2) veri kaynaklar›n›n kolayl›kla güncellenebilmesi ve bu flekilde kullan›c›lar›n her zaman güncel veriye eriflmesinin sa¤lanmas›, 3) herhangi bir ‹nternet izleyicisi üzerinden eriflilebilmesi, 4) farkl› bilgisayar sistemleri üzerinden bilgiye eriflilebilmesi, 5) veritaban›n› kullan›c›lardan soyutlamas› ve kullan›c›ya hissettirmeden çok say›da bilgi kayna¤›ndan verileri derleyerek sunabilmesidir. Çevrimiçi co¤rafi bilgi sistemlerinin yayg›nlaflmas› ve çok say›da alternatifin ç›kmas›, sistemler aras›ndaki bilgi aktar›m›n›n kolaylaflt›r›lmas›n› gündeme getirmifltir. OGC’nin gelifltirdi¤i standartlar›n bir k›sm› web üzerinden kullan›lan co¤rafi bilgi sistemleriyle ilgilidir. 1990’lar›n sonundan beri gelifltirilen standartlar, co¤rafi uygulamalar›n yayg›nlaflmas›na neden olmaktad›r. Bu konuyla ilgili olarak verilebilecek örneklerden biri OGC standartlar› aras›nda yer alan, Web Harita Servisi (WMS: Web Map Service) standard›d›r. WMS standard› web üzerinden harita kullan›m›n› art›rm›flt›r. Ortaya ç›kan yeni durumlara ve gereksinimlere göre yeni standartlar›n gelifltirilmesi de yap›lmaktad›r. Örne¤in, Google flirketi, Google Earth isimli yaz›l›m›nda co¤rafi nesnelerin depolanmas› ve bir di¤er sisteme aktar›lmas› amac›yla gelifltirdi¤i KML (Keyhole Markup Language) dosya biçiminin standartlaflmas› için OGC ile birlikte çal›flm›flt›r. Google Earth yaz›l›m›nda, yeryüzü üzerindeki herhangi bir özellik, di¤er bir sisteme KML tipinde bir dosyayla aktar›labilmektedir. XML türevi olan KML’nin örne¤i fiekil 3’de gösterilmektedir.

151

8. Ünite - OpenGIS Standartlar›

fiekil 8.3

Eskisehir.kml Eskisehir 30.52082243817922 39.77662108800603 0 100 0 0 relativeToGround relativeToSeaFloor 30.51837232350782,39.77650863996553,0

Eskiflehir merkezini 1000 metre yükseklikten gösterilmesini sa¤layan KML dosyas›

KML dosyas›, popüler ve ücretsiz bir yaz›l›m olan Google Earth içinden okunabilir. Uzant›s› kml olarak herhangi bir dizine kaydedilen dosya, üzerine çift t›kland›¤›nda Google Earth taraf›ndan aç›l›r ve Eskiflehir’in merkezi olan Köprübafl› mevkii 1000 metre yukar›dan kullan›c›ya gösterilir (fiekil 4). Genel olarak KML örne¤inde oldu¤u gibi, OGC standartlar› farkl› yaz›l›m flirketlerinin üretti¤i yaz›l›mlar›n ç›kt›lar›n›n di¤er yaz›l›mlara aktar›labilmesini sa¤lamaktad›r. fiekil 8.4 Koprubasi.kml dosyas›na t›kland›¤›nda Google Earth program›

152

Veritaban› Uygulamalar›

GML (Geographic Markup Language) OGC’nin gelifltirdi¤i standartlar›n temelinde, GML (Geography Markup Language: Co¤rafi Etiket Dili) bulunmaktad›r. GML, co¤rafi özelliklerin belirtilmesi amac›yla kullan›lan XML türevi bir dildir. Bütün OGC standartlar›nda, co¤rafi özelliklerin ifade edilmesinde kullan›l›r. Örne¤in, fiekil 5’de bir binan›n koordinatlar› ve çeflitli özellikleri GML olarak kodlanm›flt›r. Binaya kod olarak 133 verilmifl ve “ifl yeri” olarak tan›mlanm›flt›r. fiekil 8.5 GML olarak dikdörtgen bir binan›n ifade edilmesi

8345.53552,309375.875432 8345.53645,309375.875432 8345.53645,309375.894323 8345.53552,309375.894323 GML dilinde tan›ml› geometrik nesneler fiekil 6’da gösterilmektedir. Herhangi bir co¤rafi nesne, geometrik özellikleri ve uzamsal koordinatlar›yla birlikte ifade edilebilir. Örne¤in, bir hastane binas› nokta (Point), e¤ri (curve), çizgi (Line), yüzey (Surface) veya çoklu poligon gibi nesnelerle modellenebilir. Bu nesnelerin uzamsal koordinatlar›yla birlikte model tamamlan›r. fiekil 6’daki nesneler aras›ndaki iliflkiler, çizgilerle ifade edilmektedir. Çizgilerin üzerinde yazan “1..*”, “2..*”, gibi ifadeler, bir nesneyi tan›mlarken kaç adet alt nesnenin tan›mlanmas› gerekti¤ini belirtir. Örne¤in, MultiPolygon ve Polygon nesnelerini birlefltiren çizginin üzerinde “1..*” yazmaktad›r. Bu, MultiPolygon nesnesinin birden fazla Polygon nesnesinden olufltu¤unu belirtmektedir.

fiekil 8.6 Geometrik bir nesnenin tan›mlanabilmesi için gerekli kavramlar ve birbirleriyle olan iliflkileri

Geometry

Point

SpatialReferenceSystem

Curve

Surface

GeometryCollection

1..* 2..* Polygon MultiSurface MultiCurve MultiPoint LineString

1..*

1..*

MultiPolygon MultiLineString Line

LinearRing 1..*

153

8. Ünite - OpenGIS Standartlar›

Her geometrik nesnenin, koordinatlar› da standartlaflm›flt›r. GML flemalar›, koordinatlar›n nas›l tan›mlanmas› gerekti¤ini belirler. fiekil 7’de veri tipinin nas›l tan›mlanmas› gerekti¤ini içeren flema dosyas›n›n bir parças› yer almaktad›r. Koordinat eksenleri olan x, y ve z’nin s›ras› etiketi içinde tan›mlanmaktad›r. fiekil 8’de nokta (Point) nesnesi içinde yer alan koordinat bilgisinin (coord) bir örne¤i görülmektedir.

fiekil 8.7 veri yap›s› içinde flema bilgisi

fiekil 8.8

5.040.0

Bir nokta (point) nesnesi

0.00.0 20.035.0 100.0100.0

fiekil 8.9 Çizgi dizisi (LineString) tan›m›

fiekil 8.10

s

s

s e

s e

e e a)

b)

c)

d)

Nokta (fiekil 8), e¤ri, çizgi dizisi (fiekil 9, 10), çizgi, çizgi halkas›, GML içindeki temel geometrik yap›lard›r. Bunlar›n bir araya getirilmesiyle çoklu veri yap›lar› oluflturulabilir. Örne¤in, çoklu çizgi dizisi (MultiLineString), birden fazla çizgi dizisinin birlefliminden oluflmaktad›r. fiekil 11, bu veri yap›s›n›n biçimini göstermektedir.

çizgi dizisi (LineString) örnekleri

154

Veritaban› Uygulamalar›

fiekil 8.11 ‹ki çizgi dizisininden oluflan çoklu çizgi dizisi

56.10.45 67.230.98 46.719.25 56.8810.44 Örne¤in, bir yol nesnesi, geometrik olarak ortas›ndan geçti¤i düflünülen bir dizi çizgiyle modellenebilir. ‹smi ve yüzey tipi, yolu tan›mlamam›za yarayan ek özelliklerdendir. Yolun hangi flehre do¤ru uzand›¤›n›n da tan›ma eklenmesi iyi olacakt›r. Yolla ilgili, örne¤in çift fleritli olmas›, geniflli¤i, üzerinde trafik iflaretlerinin bulundu¤u gibi bilgiler de tan›ma eklenebilir. Model fiekil 12’de ifade edilmektedir.

fiekil 8.12 Town (flehir) modeli

Geometry

Road name: string surface: surfaceCode Feature

LineString

centerLine destination Town

GML’den Türetilmifl Standartlar ve Modeller Daha karmafl›k nesneler, örne¤in bir flehir, farkl› nesnelerin bir araya gelmesiyle GML halinde modellenebilir. OGC, daha karmafl›k nesneler için çeflitli flemalar üretmifltir. Örne¤in, CityGML ad› verilen standart, bir flehri ve içinde yer alabilecek co¤rafi nesneleri tan›mlayabilmek için bir model tan›mlar. CityGML, üç boyutlu binalar›n da tan›mlanmas› için gerekli deste¤i sa¤lamaktad›r. fiekil 13’de Eskiflehir’in modeli yer almaktad›r. ve etiketleri aras›nda, Eskiflehir’le ilgili parametreler XML etiketleri halinde yer almaktad›r. Örne¤in, Eskiflehir’i kapsayan alan ve etiketleri aras›nda dikdörtgen bir alan olarak tan›mlanmaktad›r. fiehirde yer alan co¤rafi ö¤eler, etiketiyle kapsanan alanda yer al›r. Eskiflehir içinden geçen Porsuk çay› ve etiketleri aras›nda tan›mlanm›flt›r.

155

8. Ünite - OpenGIS Standartlar›

Eskisehir 0.00.0 100.0100.0 Eskisehir icinden gecer Porsuk 050 7060 10050

OpenGIS Web Servisi Standartlar› Web servisi, temel olarak, iki bilgisayar sistemi aras›nda XML dilinde bir veri ak›fl› anlam›na gelir. Bir yaz›l›m›n bir veri kayna¤›na web sunucusu üzerinden ba¤lanarak, XML dilinde yaz›lm›fl bir komutu veya sorguyu göndermesine web servisi ad› verilir. Web sunucusu, XML olarak gönderilen parametreleri al›r ve içindeki bir yordamda çal›flt›r›r. Sonuçlar, yine XML dilinde sorguyu yapan yaz›l›ma gönderilir. Co¤rafi bilgi sistemlerinde web servisleri, farkl› sistemlerin birbirleriyle veri al›fl verifli yapmas›n› kolaylaflt›rmaktad›r. Belirli bir anda gerek duyuldu¤unda, belirli bir co¤rafi bölgedeki istenen özellikleri gösteren haritalar›n oluflturulmas› gerekebilir. Haritan›n oluflturulmas› ifllemi dinamik bir süreçtir. ‹stenen nitelikler veri kayna¤›nda sorgulanarak bir araya getirilir ve bir imge veya vektörel dosya oluflturulur. OGC, veri kayna¤› kullan›larak, istemci taraf›ndan belirlenen kriterleri sa¤layan haritalar› sunucuda oluflturmak için Web Harita Hizmeti (Web Map Service) standard›n› gelifltirmifltir (fiekil 14). Haritalar›n WMS hizmeti veren sunucuda dinamik olarak oluflturulmas›n› ve talepte bu-

fiekil 8.13 Eskiflehir’in flehir modeli

156

Veritaban› Uygulamalar›

lunan yaz›l›ma aktar›lmas›n› sa¤lar. Hizmet, servis seviyesindeki metaverinin sunulmas›n›, co¤rafi ve uzamsal özellikleri iyi belirlenmifl haritan›n oluflturulmas›n› sa¤lar. Döndürülen harita, PNG, JPEG gibi imge format›nda veya vektör temelli olarak SVG biçimindedir. Web harita ifllemleri, standart bir ‹nternet izleyicisi üzerinden ‹nternet URL adresleri (URL: Universal Resource Locator) kullan›larak gerçeklefltirilebilmektedir. fiekil 8.14 WMS hizmeti sunan sunucunun dinamik olarak haritalar› oluflturmas›

Web Sunucusu

Internet

Veritaban› Harita

Sorgu

‹stemci

WFS (Web Feature Service), veritaban›nda yer alan co¤rafi nesnelere ve bunlar›n özelliklerine web üzerinden eriflimi sa¤layan bir standartd›r. Web üzerinden veritaban› içinde bulunan kay›tlara eriflimi sa¤lar. Örne¤in, flehir nesnesinin özellikleri talep edildi¤inde (fiekil 15), WFS flehrin nüfusunu, merkezinin koordinatlar›n›, deniz seviyesinden yüksekli¤ini XML format›nda göndermektedir. Her bir de¤erin özellikleri, örne¤in de¤erin tamsay› m› gerçek say› m› olmas› gerekti¤i, de¤erin geçerli oldu¤u say› aral›¤› gibi genel özellikleri de XML dosyas›nda gelmektedir. Gelen XML dosyas› incelenerek, veritaban›nda herhangi bir flehir sorguland›¤›nda ne tür bilgilerin gelece¤i de ö¤renilmifl olmaktad›r. fiekil 8.15 WFS servisine gönderilen flehir nesnesinin özelliklerinin al›nmas›n› sa¤layan XML komut

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF