Download as pdf or txt
Download as pdf or txt
You are on page 1of 202

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
‹çindekiler iii

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

Veritaban› Uygulamalar›......................................................... 1 1. ÜN‹TE


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

PostgreSQL Kurulumu............................................................ 20 2. ÜN‹TE


G‹R‹fi .............................................................................................................. 21
POSTGRESQL KURULUM DOSYASININ ‹ND‹R‹LMES‹ .............................. 21
POSTGRESQL YAZILIMININ KURULUMU................................................... 22
POSTGRESQL YARDIMCI PROGRAMLARIN KURULUMU ......................... 28
Özet ............................................................................................................... 35
Kendimizi S›nayal›m ..................................................................................... 36
Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ 37
Yararlan›lan ‹nternet Adresleri ..................................................................... 37

Veritaban› Yönetimi ................................................................ 38 3. ÜN‹TE


G‹R‹fi .............................................................................................................. 39
pgAdmin PROGRAMINA GENEL BAKIfi...................................................... 39
YEN‹ VER‹TABANI OLUfiTURMA ................................................................ 43
TABLO OLUfiTURMA .................................................................................... 46
PostgreSQL SUNUCU DURUMU ‹NCELEME................................................ 50
SUNUCU BAKIMI .......................................................................................... 52
VER‹TABANI YEDEKLEME ........................................................................... 54
Veritaban›n› Yedekten Geri Yükleme.......................................................... 55
RAPORLAMA.................................................................................................. 56
Özet ............................................................................................................... 59
Kendimizi S›nayal›m ..................................................................................... 60
Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ 61
S›ra Sizde Yan›t Anahtar› .............................................................................. 61
Yararlan›lan ve Baflvurulabilecek Kaynaklar ............................................... 61

‹liflkisel Veritabanlar› ve Veritaban› Tasar›m›.................... .. 62 4. ÜN‹TE


G‹R‹fi .............................................................................................................. 63
‹L‹fiK‹SEL VER‹TABANLARI .......................................................................... 63
‹L‹fiK‹SEL VER‹TABANLARININ TEMEL B‹LEfiENLER‹................................ 64
‹L‹fiK‹SEL VER‹TABANI YÖNET‹M S‹STEMLER‹N‹N ÖZELL‹KLER‹........... 66
iv ‹çindekiler

YAPISAL SORGU D‹L‹NE (SQL) G‹R‹fi ........................................................ 67


B‹R ‹L‹fiK‹SEL VER‹TABANI TASARIMI VE OLUfiTURMA.......................... 70
Ülkeler Tablosu ............................................................................................. 70
Sehirler Tablosu............................................................................................. 71
Daglar Tablosu .............................................................................................. 72
B‹R‹NC‹L ANAHTAR (PRIMARY KEY) KAVRAMI ....................................... 73
YABANCI ANAHTAR (FOREIGN KEY) KAVRAMI...................................... 74
VER‹TABANI NORMAL‹ZASYONUYLA VER‹TABANI TASARIMI .............. 75
Özet................................................................................................................ 79
Kendimizi S›nayal›m...................................................................................... 80
Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ 82
S›ra Sizde Yan›t Anahtar› .............................................................................. 82
Yararlan›lan ve Baflvurulabilecek Kaynaklar ............................................... 83
‹nternet Kaynaklar›........................................................................................ 83

5. ÜN‹TE Temel SQl Kavramlar› ve Komutlar›........................... ......... 84


G‹R‹fi .............................................................................................................. 85
SQL KOMUTLARI NASIL ÇALIfiTIRILIR? ...................................................... 88
SQL KAVRAMLARI ........................................................................................ 89
Hareket (Transaction) ................................................................................... 89
Kullan›c› Taraf›ndan Tan›mlanan Fonksiyonlar (Functions) ...................... 90
Tetik fonksiyonlar ......................................................................................... 91
PL/pgSQL Dili................................................................................................ 92
fiemalar (schemas) ........................................................................................ 94
Görüntü (View) ............................................................................................. 95
Veritaban›nda Eriflim Rolleri (database roles) ............................................. 96
‹mleçler (Cursors).......................................................................................... 96
SQL VER‹ T‹PLER‹ ......................................................................................... 96
SQL D‹L‹NDE FONKS‹YONLAR VE ‹fiLEÇLER ............................................ 98
SQL KOMUTLARI .......................................................................................... 101
SELECT, INSERT INTO, UPDATE, DELETE ................................................. 103
SELECT........................................................................................................... 103
Benzer ‹sim Kullan›m› .................................................................................. 103
WHERE Koflullar›........................................................................................... 104
Sorgular›n Birlefltirilmesi ............................................................................... 105
INSERT INTO................................................................................................. 106
UPDATE ......................................................................................................... 106
DELETE .......................................................................................................... 107
Özet................................................................................................................ 108
Kendimizi S›nayal›m...................................................................................... 109
Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ 110
S›ra Sizde Yan›t Anahtar› .............................................................................. 110
Yararlan›lan Kaynaklar.................................................................................. 110

6. ÜN‹TE Temel SQL Komutlar› ............................................................ 112


G‹R‹fi .............................................................................................................. 113
YI⁄IN KÜME ‹fiLEM FONKS‹YONLARI ....................................................... 113
TABLOLARIN B‹RLEfiT‹R‹LMES‹ (JOINING TABLES) ................................. 115
TABLO B‹RLEfiT‹RMEYLE ‹LG‹L‹ B‹R ÖRNEK ............................................ 118
ORDER BY..................................................................................................... 123
‹çindekiler v

DISTINCT....................................................................................................... 124
GROUP BY .................................................................................................... 125
HAVING ......................................................................................................... 127
Özet ............................................................................................................... 128
Kendimizi S›nayal›m ..................................................................................... 129
Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ 130
S›ra Sizde Yan›t Anahtar› .............................................................................. 131
Yararlan›lan ve Baflvurulabilecek Kaynaklar ............................................... 131

‹ndeksleme ve K›s›tlama.................................... ..................... 132 7. ÜN‹TE


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

OpenGIS Standartlar› ............................................................. 146 8. ÜN‹TE


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

PostGIS Kurulumu ve Uygulamalar› ..................................... 164 9. ÜN‹TE


G‹R‹fi .............................................................................................................. 165
POSTGIS KURULUMU .................................................................................. 166
UZAMSAL VER‹TABANININ KURULMASI ................................................... 168
TABLOLARIN OLUfiTURULMASI .................................................................. 169
TABLOYA VER‹LER‹N YÜKLENMES‹........................................................... 170
UZAMSAL REFERANS S‹STEMLER‹ VE DÖNÜfiÜMLER .............................. 171
vi ‹çindekiler

Uzamsal Hesaplamalar ve Ölçümler ............................................................ 173


‹NDEKSLEME ................................................................................................. 174
Özet ............................................................................................................... 176
Kendimizi S›nayal›m ..................................................................................... 177
Kendimizi S›nayal›m Yan›t Anahtar› ............................................................ 178
S›ra Sizde Yan›t Anahtar› .............................................................................. 179
Yararlan›lan ve Baflvurulabilecek Kaynaklar ............................................... 179

10. ÜN‹TE Co¤rafi Veritaban› Üzerinde Sorgulamalar.......................... 180


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

Ö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 bil-
gilerin 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, beklen-
medik 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 kul-
land›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 verita-
ban› 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öne-
tim 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 veril-
mifltir.
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 uyum-
dur. 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ünlefltiril-
erek 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
VER‹TABANI UYGULAMALARI

1
Amaçlar›m›z

N
Bu üniteyi tamamlad›ktan sonra;
‹liflkisel veritaban›n›n hangi uygulamalarda yararl› oldu¤una karar verebile

N
ceksiniz.
‹liflkisel veritaban› uygulamalar›n› di¤er veritaban› türlerinden ay›rabileceksi-

N
niz.
Bir veritaban›n› oluflturan temel bileflenleri listeleyebilecek ve iliflkisel verita-

N
ban› yönetim sisteminin nas›l çal›flt›¤›n› aç›klayabileceksiniz.
Temel SQL sorgular› kurabileceksiniz.

Anahtar Kavramlar
• veritaban› • PostgreSQL
• veritaban› yönetim sistemleri • PL/pgSQL
• iliflkisel veritaban› modeli • OLAP
• tablolar • OLTP
• SQL

‹çerik Haritas›

• G‹R‹fi
• VER‹TABANI NED‹R?
Veritaban›
Veritaban› Uygulamalar› • VER‹TABANI TÜRLER‹ VE
Uygulamalar› 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 art-
maktad›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 kop-
yalanmaktad›r. Ancak verilerin büyük bir k›sm› düzenli olmaktan uzakt›r. Birbirin-
den 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 el-
zemdir. Günümüzde kurulufllar, kendileriyle ilgili verileri zaman›nda ve do¤ru fle-
kilde 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¤erleri-
ne göre daha yüksektir. Depolanan büyük miktarda verinin bilgiye dönüfltürülme-
si ancak esnek ve h›zl› veritaban› yönetim sistemleriyle mümkündür.
Veritaban› verilerin düzenli flekilde depoland›¤› bir nesnedir. Ancak, veritaba-
n›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› ol-
maktan uzakt›r, çünkü ‹nternet’te bulunan veri düzensizdir. Ancak, Google, Yaho-
o, Bing gibi arama motorlar› üzerinden sorgulama gerçeklefltirilebilir. Veritabanla-
r›n›, veri depolama sistemlerinden ay›ran en temel özellik, veriler üzerinde çeflitli
kriterlere göre sorgulama yap›labilmesi ve bu flekilde yeni bilgilerin türetilebilme-
sidir. Geleneksel veritaban› tan›m›nda, verilerin düzenli flekilde depolanmas›na ve
birbiriyle ilgili olmas›na gerek yoktur. Ancak, veritaban›nda verilerin birbiriyle ilifl-
kili öbekler halinde tutulmas› bilgi üretimini kolaylaflt›rmaktad›r.
Gerçek hayatta, veritaban› olarak de¤erlendirilebilecek bir çok veriyi kiflisel ar-
flivlerimizde tutuyoruz. Bir veritaban›n›n dijital ortamda olmas›na gerek yoktur. Ör-
ne¤in, arkadafllar›n›zdan ö¤rendi¤iniz yemek tarifleri, arkadafllar›n›z›n ve akrabala-
r›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¤raf-
lar› 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 Gündelik yaflam›n›zda


SIRA S‹ZDE bilgisayar ortam›na veritaban› olarak kaydedildi¤inde arama iflle-
1 viyle hayat›n›z› kolaylaflt›racak veri öbeklerini listeleyin.

D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M
Veritabanlar›nda farkl› tipte ve miktarda veri bulunabilir. Verilerin nas›l depo-
lanaca¤› ve daha h›zl› flekilde eriflilebilece¤i, uzun y›llar üzerinde çal›fl›lan konular-
S O R U dan biri olmufltur.
S O R U Bu amaçla, çeflitli veritaban› modelleri gelifltirilmifltir. ‹lk uygu-
lamalarda, veriler dosya sisteminde dosyalar halinde tutulurdu. Zamanla, veri mik-
D‹KKAT
tar› ço¤ald›kça D‹KKAT
ve veriler karmafl›klaflt›kça daha h›zl› eriflim çözümlerine olan talep
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.

N N
SIRA S‹ZDE 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¤i-
AMAÇLARIMIZ fliklik yap›lmas›
AMAÇLARIMIZtalepleri VTYS taraf›ndan al›n›r ve veritaban›na uygulan›r (fiekil 1).
Bu flekilde kullan›c›lar, VTYS üzerinden veritaban›ndaki veriler üzerinde sorgulama
yapabilirler, yeni veriler ekleyebilirler ve olan verileri de¤ifltirebilirler veya silebilir-
K ‹ T A P ler. VTYS’lerin
K ‹ TenA önemli P ifllevi, veritaban›na kullan›c›lar›n en h›zl› flekilde eriflimini
sa¤lamakt›r ve verdikleri komutlar› çal›flt›rarak sonuçlar› geri döndürmektir.
fiekil 1.1
Sorgulama de¤ifliklik
T EVeritaban›na
LEV‹ZYON gelen 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, ye-
dekleme 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 sorgula-
malar› ve komutlar› çal›flt›rarak sonuçlar› döndürmektir. Bu çal›flmadaki bütün ör-
nekler, iliflkisel veritaban› yönetim sistemi olan PostgreSQL üzerinde gösterilecek-
tir. PostgreSQL, ücretsiz olmas› ve yayg›n flekilde kullan›lmas› nedeniyle tercih
edilmifltir.

SIRA S‹ZDE Microsoft SQL Server,


SIRA S‹ZDEOracle, IBM DB2, PostreSQL ve MySQL gibi s›k kullan›lan VTYS’leri-
2 ne 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
1. Ünite - Veritaban› Uygulamalar› 5

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 barkot-
lu etiketini barkot okuyucuda okutmaktad›r. Barkot okuyucusunun ba¤l› oldu¤u
bilgisayar, barkotta kodlanm›fl ürünün numaras›n› veritaban› yönetim sistemine ve-
rerek, 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› kolaylafl-
t›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 depo-
dan ma¤azalara yollanmaktad›r. Ayr›ca, ana depoda eksilen ürünler için, ma¤aza-
larda çok sat›lan ürünler üreticilerinden siparifl edilirken, sat›fl baflar›s› düflük ürün-
ler için siparifl verilmeme karar› verilebilir. Ürünlerin niteliklerine göre de farkl› ka-
rarlar al›nabilir. Örne¤in, veritaban›nda yer alan sat›fl rakamlar› ve ürünlerin renk-
leri ü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 üre-
ticilerden al›nmas› düflünülebilir.

VER‹TABANI NED‹R?
Veritaban›, veri ve metaveriden oluflur. Metaveri, veri hakk›nda veri olarak tan›m-
lan›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 depolan-
d›¤› bir tablo düflünelim (fiekil 2). Tabloda dört kiflinin kayd› bulunmaktad›r. Birin-
ci 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 SIRA S‹ZDE
3
D Ü fi Ü N E L ‹ M fiekilD1.2
Ü fi Ü N E L ‹ M

personel Personel tablosu


S O R U S O R U
sicil_no ad soyad dog_tarih birim

00102020 Ahmet Türker 15.07.1968 D Tahakkuk


‹KKAT D‹KKAT
00302727 Mehmet Taflk›n 11.03.1974 Ayniyat
00269921 Mustafa Düzgün 21.05.1956 Ayniyat

N N
SIRA S‹ZDE SIRA S‹ZDE
00165203 Hakan Taner 08.12.1967 Sat›nalma

AMAÇLARIMIZ AMAÇLARIMIZ
Sorgulama, veritaban›nda belirli koflullar› sa¤layan verilerin bulunmas› ifllemi-
dir. Örne¤in, ismi A ile bafllayan flehirler fiehirler tablosunda sorgulama yap›larak
bulunabilir. Sorgulama yan›nda, ekleme, de¤ifltirme ve silme Kgibi ‹ T ifllemler
A P de, ve- K ‹ T 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 bil-
gisayar diliyle yaz›lm›fl komutlarla yap›l›r. Veritaban› ifllemleri
T E Liçin
E V ‹ Zkullan›lan
YON ko- TELEV‹ZYON

‹NTERNET ‹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 ya-
p›lmas›n› sa¤lar. Personel veritaban›nda, Ahmet isimli kiflileri getirmek için kulla-
n›labilecek SQL komutu, fiekil 3’te gösterilmektedir.
fiekil 1.3

‹smi Ahmet olan SELECT sicil_no, ad, soyad, birim


kifli bilgilerini FROM personel
getiren SQL komutu 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 desteklemekte-
dir. 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 ifllem-
ler 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 kul-
lan›c› bilgisayar› aras›ndaki a¤ üzerinden geçen veri trafi¤i azal›r.

fiekil 1.4

degistir isimi CREATE OR REPLACE FUNCTION


PL/pgSQL yordam› degistir(v_isim varchar,
örne¤i 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önde-


rilen 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ürele-
rini azaltabilirler. ‹ndeksleme ifllemi, bir kitab›n içindekiler bölümünü haz›rlamaya
benzetilebilir. ‹ndekslenen veri üzerinde arama yapmak daha kolayd›r. ‹ndeksle-
nen 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 dosya-
lar› 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› 7


S O R U S O R U

‹ndeksleme, sadece arama iflleminin s›kl›kla yap›ld›¤› kolonlarda uygulanmas›


D ‹ K K A T gereklidir. D‹KKAT
Aksi taktirde, veritaban›na eriflim süresi artar.

N N
SIRA S‹ZDE SIRA S‹ZDE
Veritaban›n›n, verilerin depolanmas› ve verinin bilgiye dönüfltürülmesi ifllemin-
de kullan›lan bir yap› olarak etkin flekilde kullan›m› ancak tasar›m› do¤ru yap›ld›-
¤› zaman baflar›l›d›r. Verinin organizasyonel olarak tasnif edilmesi AMAÇLARIMIZ
ve veritaban›n›n AMAÇLARIMIZ
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-
n›na nas›l yerlefltirilece¤ini tan›mlar. Model sayesinde, bir veri Ky›¤›n›,
‹ T A birbiriyle
P ilifl- K ‹ T A P
kili ve düzenli bir veri yuma¤› haline getirilebilir.
Do¤ru bir flekilde gerçeklefltirildi¤inde modelleme ifllemi veriler aras›ndaki tu-
T E L E V ‹ hatalar
tarl›l›¤› art›r›r ve verilere daha h›zl› eriflilmesini sa¤lar. Tasar›mdaki Z Y O N ve yan- TELEV‹ZYON
l›fl kararlar, bilginin yanl›fl elde edilmesine kadar varan sorunlar ortaya ç›kar›r. Ve-
ritaban› 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 ‹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› uy-
gulama 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 motoru-
nun teknik ayr›nt›lar›n› bilmemesine benzetilebilir.
Uygulama yaz›l›mlar› sayesinde elde edilen bilgi kurumlar›n yaflamas› ve gelifl-
mesi 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, uyum-
suzluk 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


SIRA S‹ZDE sorgu- SIRA S‹ZDE
lamak istersiniz? Listeleyiniz. 4
D Ü fi Ü N E L ‹ M
Veritaban› Yönetim Sistemlerinin Tarihsel Geliflimi D Ü fi Ü N E L ‹ M

Verilerin depolanmas› ve gerekti¤inde eriflilmesi, bilgisayarlar›n yayg›nlaflt›¤› 1950’li


y›llardan itibaren devaml› gündemde olmufltur. ‹lk uygulamalarda S O veriler
R U dosyalar- S O R U
da 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 D‹KKAT
1960’l› y›llarda, General Electric flirketinden Charles Bachman isimli araflt›rmac›
verinin modellenmesi ve depolanmas›na odaklanan, Integrated Data Storage ad›

N N
SIRA Information
verdi¤i bir yaz›l›m› gelifltirir. 1960’l› y›llar›n sonunda, IBM flirketi, S‹ZDE Ma- SIRA S‹ZDE
nagement System (IMS) ad› verilen bir yaz›l›m› piyasaya sürer. IMS, verinin hiye-
rarflik flekilde modellenmesine dayanan bir sistemdir.
AMAÇLARIMIZ AMAÇLARIMIZ
1970’de, yine IBM flirketinden Edgar Codd isimli araflt›rmac›, günümüzde yay-
g›n bir flekilde kullan›lan iliflkisel veritaban› modellerine öncülük eden bir yakla-
fl›m öne sürer. Codd, verilerin ortak anahtarlar (say›lar) üzerinden K ‹ T iliflkilendirilme-
A P K ‹ T A P
sinin verilerin kolay ulafl›labilir hale getirilmesine yard›mc› olaca¤›n› belirtmekte-

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› uygula-
mas›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 gelifltirilme-
si 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 sonun-
da IBM’in deneysel anlamda gelifltirdi¤i bir veritaban› üzerinde sorgulama gerçek-
lefltirmek amac›yla gelifltirilmifltir. Baz› isteklere göre gelifltirilen dil, 1980’lerde IBM
SEQUEL (Ard›fl›k ‹ngilizce Sorgu Dili - Sequential English Query Language) ismiy-
le piyasaya sürülmüfltür. Ancak, SEQUEL isminin ticari isim hakk› baflka bir flirket-
te oldu¤u için, isim SQL olarak de¤ifltirilir.
SQL’in bilgisayar endüstrisinde yayg›n bir kullan›m alan› bulmas› ve ticari bafla-
r›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, standar-
d›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 standart-
laflma 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›la-
r›,vb) sahip olmas› için çal›flmalar sürdürülmektedir.
1980’lerin sonlar› ve 1990’lar çok amaçl› veritaban› yönetim sistemlerinin bilgi-
sayar endüstrisinde görüldü¤ü y›llard›r. Veritaban› yönetim sistemi bu y›llarda ya-
p›lan de¤iflikliklerle, sadece alfanümerik (alfabetik ve nümerik) karakterlerden
oluflan kay›tlar›n depoland›¤› sistemler olmaktan uzaklafl›r. Alfanümerik nitelik ta-
fl›mayan, resim, video, ses dosyalar›n› da depolayan sistemler olarak evrilirler. Ar-
t›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 bileflenleri-
nin 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 öte-
sine 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 kaynak-
lar›, muhasebe, malzeme tedariki, üretim planlama, stok denetimi gibi faaliyetleri-
nin, bütünleflik bir sistem halinde yürütülmesini sa¤lar. Örne¤in, yap›lan bir sipa-
rifl 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 üretil-
mesine neden olur. Bütün faaliyetler, veritaban›nda depolanan veriler üzerinden
gerçeklefltirilir ve her ad›mda yöneticilere üretim maliyetleri, malzeme fiyatlar› gi-
bi 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. Uygu-
lama 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› 9

sunulur. Ancak, ‹nternet, veritaban› yönetim sistemleri için zorlay›c› bir unsur ol-
mufltur. Ne kadar kullan›c›n›n web sitesine girece¤i ve dolay›s›yla veritaban› yöne-
tim sistemi üzerinde yarataca¤› yük önceden bilinememektedir. Web üzerinden ça-
l›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› bilgisa-
yar›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 ar-
kadafl›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 iste-
di¤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, uygula-
madan elde etti¤iniz fayday› azalt›r. Veri biçimi ve uygulamalar›n güncellenmesi
konusundaki ikilemin çözümü, iliflkisel veritaban› yönetim sistemi (VTYS) kullan-
makt›r.
VTYS’ler, verinin nas›l depoland›¤› konusunu uygulamalardan gizler. Uygula-
malar›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öster-
mekle 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 de-
poland›¤› ve hangi dosyalar içinde bulundu¤u, uygulamalardan gizlenir. VTYS kul-
lan›l›rsa, uygulamalardaki hatalar nedeniyle, dosyaya verilerin yanl›fl flekilde yaz›l-
mas› 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›salt-
mas›
3. Uygulamalar›n, ufak de¤iflikliklerle farkl› veritaban› yönetim sistemlerine ta-
fl›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 var-
d›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. Uygula-
ma gelifltirmek için, veritaban› yönetim sistemleri üzerine bilgi edinmek ve hatta
10 Veritaban› Uygulamalar›

e¤itim almak gerekebilir. Ayr›ca, veritaban› yönetim sisteminde gerçekleflen bir ha-
tada 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ülme-
sinin gerekti¤i her alanda kullan›labilir. VTYS’lerinin yayg›nlaflmas› ve üzerinde ça-
l›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 ve-
ritabanlar› en büyük grubu oluflturulur. ‹flletme veritabanlar›, göreceli olarak yük-
sek say›daki ifllemi kaydederler ve verileri de¤ifltirirler. Dünya üzerindeki büyük flir-
ketlerin, iflletmelerini iyi flekilde yönetmek için kulland›klar› veritaban› sistemleri
bulunur. Örne¤in, müflterilerinin verilerini kaydederken, insan kaynaklar› sistemle-
riyle çal›flanlar›n›n kay›tlar›n› tutarlar. Üretim süreçlerinde kullan›lan veritaban› uy-
gulamalar›, flirketlerin etkin ve denetimli flekilde iflletilmelerini sa¤lar. ‹flletme veri-
tabanlar› için, genellikle o andaki veri önemlidir. Veritaban›nda yer alan stok bilgi-
lerinin 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 ta-
rihsel 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›¤›n-
lar› 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 bulun-
mas›n› hedefler. Örne¤in, hava durumu ölçümlerinin, ülkenin ekonomik verileri-
nin ve bir market zincirinde bütün müflterilerin yapt›¤› al›flverifl kay›tlar›n›n bir ara-
ya 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 çev-
rim 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› 11

s› verilebilir. Da¤›t›k veritabanlar› kullanman›n çeflitli avantajlar› bulunur: 1) veri-


nin birden fazla kopyas›n›n tutulmas› nedeniyle felaket durumlar›na daha dayan›k-
l›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 durdurulma-
s›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 bas-
k›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 sen-
sörlerden al›nan bilgilerin kaydedildi¤i bir veritaban› bulunur. Uça¤›n konumu, ya-
k›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› bulun-
maktad›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 sis-
temlerdir. Özellikle, 2000’li y›llar›nda bafl›ndan itibaren sabit disk teknolojilerinin
daha fazla kapasite sa¤layacak flekilde geliflmesi, yüksek kapasite gerektiren med-
ya 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 sunabil-
mektedir.

Veri Modelleri
Veri modelleri, di¤er bir deyiflle verilerin birbirleriyle olan iliflkilerinin belirlenme-
si bilgisayar sistemlerinin ilk gelifltirildi¤i y›llardan itibaren gündemde olan bir ko-
nudur. ‹lk veri modellerinde, verileri depolamak için dosyalar kullan›l›rd›. Dosya
sistemi çerçevesinde, veri öbekleri ayr› dosyalarda depolan›r ve dosya dizinleri al-
t›nda yap›land›r›l›rd›. Verilerin tutuldu¤u dosyalar aras›ndaki iliflkilerin de¤erlendi-
rilmesi 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. Dos-
yan›n yap›s› de¤ifltirildi¤inde ve yeni veri alanlar› eklendi¤inde, program›n yeni-
den düzenlenmesi gerekliydi.
Di¤er bir veritaban› modeli, verilerin hiyerarflik anlamda düzenlenmesini ge-
rektirir. Örne¤in, hiyerarflik olarak modellenmifl co¤rafi bilgi veritaban› örne¤i fie-
kil 5’te gösterilmektedir. Bir köyle ilgili bilgilere eriflmek için, ilk önce ülkesini, ar-
d›ndan ilini ve ilçesini bulmak gerekmektedir. Hiyerarflik düzende, köye iliflkin bil-
giye 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 ülke-
nin alt›nda birden fazla co¤rafi bölge olabilir. Bir ilçeye ba¤l› birden fazla köy bu-
lunabilir. Ancak, çoktan-çoka verilerde, hiyerarflik düzen çal›flmamaktad›r. Çoktan-
çoka verilere örnek olarak, bir kiflinin birden fazla derne¤e üye olmas› verilebilir.
12 Veritaban› Uygulamalar›

fiekil 1.5

Hiyerarflik Ülke
Veritaban› modeli

Bölge

‹l

‹lçe

Bucak Köy Mezra

Çoktan-çoka olan modellemelerde, hiyerarflik düzenin kullan›lamamas›, hiye-


rarflik modelden, a¤ veritaban› modelinin türetilmesine yol açm›flt›r. Hiyerarflik mo-
del 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. Ay-
n› bina, iki farkl› tablodaki verilerle ayn› anda iliflkilidir. Hiyerarflik modelde tan›m-
lanmas› zor olan bunun benzeri durumlar, a¤ modelinde çözümlenmifltir.
fiekil 1.6
Hiyerarflik veritaban› modelindeki en
A¤ modeline dayal› Sokak Cadde önemli koflul, bir kayda ulafl›rken hiyerarfli-
bina veritaban› nin üst bölümlerinden alt bölümlerine do¤ru
inme gereklili¤idir. Di¤er bir deyiflle, hiye-
rarfli a¤ac›nda daha genel olan üst bölümler-
Bina den daha özel olan alt k›s›mlara inilerek ara-
nan veriye ulafl›lmaktad›r. Hiyerarflik yap›,
veri organizasyonunu daha yap›sal hale ge-
tirmesine 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, hiyerarfliy-
le 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 ve-
rilen 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. Dok-
torlar tablosunun, doktorlarla ilgili çeflitli verilerle birlikte her doktora verilen
eflsiz (unique) bir numaradan olufltu¤unu düflünelim (fiekil 7). Di¤er yandan, has-
ta bilgilerinin ve hastaya verilen eflsiz kay›t numaras›n›n da benzer flekilde has-
talar tablosunda yer ald›¤›n› varsayal›m (fiekil 8). Randevu tablosu, hastalar
ve doktorlar tablolar›n› iliflkilendiren bir bilgi öbe¤idir (fiekil 9). Eflsiz olarak ve-
1. Ünite - Veritaban› Uygulamalar› 13

rilen numaralara, birincil anahtar (primary key) ad› verilmektedir. Her kay›tta, dok-
torun 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 kar-
fl›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 olufltur-
maktad›r (fiekil 10).

doktor_no ad soyad diploma_no Tablo 1.7


Doktorlar tablosu
1717 Murat Aflc› 7748585
4103 Kemal Taner 8527724
3383 Burçin Kozak 4137498
1239 Mustafa Ece 2552176

hasta_no ad soyad boy kilo Tablo 1.8


Hastalar tablosu
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 Tablo 1.9


Randevu tablosu
88684 1717 6672 12:30
10938 1717 5211 12:45
18828 3383 1842 13:00
51358 4103 9947 13:30

fiekil 1.10
randevu doktorlar ‹liflkisel veritaban›
örne¤i

rand_no: NUMBER doktor_no: NUMBER


dok_no: NUMBER ad: VARCHAR
has_no: NUMBER soyad: VARCHAR
saat: DATETIME 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 konulma-


s› gerekebilir. Hastalar ve doktorlar tablolar›ndaki ad ve soyad kolonlar›n›n
alfabetik karakterlerden oluflmas› ve kesinlikle bofl olmamalar› da verilerin geçer-
14 Veritaban› Uygulamalar›

lili¤ini sa¤layabilir. Randevu tablosunda, bütün alanlar›n dolu olmas› di¤er bir ko-
fluldur. Ö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› efl-
siz olmal›d›r. Bir ya da daha fazla doktorun ayn› numaray› almas›, randevu tablo-
sunda s›k›nt› ç›karacak, randevunun gerçekten hangi doktordan al›nd›¤› bilinme-
yecektir. VTYS’leri, yeni bir kay›t eklenirken, bu ve benzeri durumlar› kontrol ede-
cek mekanizmalara sahiptir. Tablo, kullan›c› taraf›ndan VTYS üzerinde oluflturulur-
ken, hangi kolonda ne tür bir verinin beklendi¤i tan›mlanabilir. Eflsiz olmas› gere-
ken kolonlar, bofl olmamas› gereken alanlar›n hepsi, tablonun yarat›lmas› s›ras›n-
da 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 me-
saj› döndürür.
Veritaban› yönetim sistemlerinin, sorgular› etkin ve h›zl› bir flekilde gerçeklefl-
tirmek 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›z-
land›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 el-
de edilebilir.

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


SORUNLARI
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 olufl-
turur. Ç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. Verile-
rin 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› art-
makta, 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’le-
rinin 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 bilgi-
yi 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, sa-
bit 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 da-
ha çok, çevre elemanlar›n›n h›z›yla s›n›rl›d›r. Çünkü, veritaban› dosyalar› genellik-
SIRA S‹ZDE SIRA 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 veritaba-
D Ü fi Ü N E L ‹ M n› dosyalar›naD Ü fi Ü N Eeriflim
L‹M miktar›n› art›raca¤›ndan yavafll›k yaflanmas› sorununu
yaratabilir. Büyük veri kümeleriyle çal›flman›n VTYS’inde sorun yarataca¤› unutul-
mamal›d›r. Büyük miktarda verinin sabit disklerde tutulmas›, sorgulamalar›n sabit
S O R U S O R U
disklere eriflim miktar›n› art›rmas›, toplam baflar›m seviyesini azaltmaktad›r.

D‹KKAT 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 SIRA S‹ZDE

AMAÇLARIMIZ AMAÇLARIMIZ
1. Ünite - Veritaban› Uygulamalar› 15

Efl zamanl› eriflimlerde, veritaban›ndaki verilerdeki tutarl›¤›n›n bozulmas› duru-


mu karfl›lafl›lan sorunlardan biridir. Örne¤in, bir uçak rezervasyon/check-in siste-
minde iki kullan›c›n›n, uçaktaki bofl koltuklar› gösteren ekrana girdiklerini varsaya-
l›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› du-
rumunda, 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 uygulama-
larda 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 iflletilmesi-
ni 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› kol-
tu¤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› engel-
lenmekle birlikte, ifllemin yaratt›¤› muhtemel baz› sorunlar da vard›r. E¤er, yaz›l›m-
daki 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 ifl-
lem 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 sor-
gulanabilece¤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¤la-
maktad›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›r-
may› 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›m-
lar› ü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 afla-
madaki 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 ve-
rilerin depolanmas› ve üzerinde arama iflleminin gerçeklefltirilmesi de gerekli ol-
maya bafllam›flt›r. Web’de bulunan milyarlarca web sayfas› içinde kelimelerin aran-
mas› bunun en güzel örne¤idir. Web sayfalar›n›n belirli bir düzeni yoktur ve için-
de 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 tasar-
lanm›fl veritaban› yönetim sistemleri için oldukça zor bir ifltir. VTYS üreticisi firma-
lar, metin içinde kelime arama ve metin içindeki anahtar kelimeleri indeksleme ifl-
leri için çeflitli ekler gelifltirmektedirler.
16 Veritaban› Uygulamalar›

Özet

N
A M A Ç
‹liflkisel veritaban›n›n hangi uygulamalarda ya- N
A M A Ç
Bir veritaban›n› oluflturan temel bileflenleri liste-
1 rarl› oldu¤una karar verebileceksiniz. 3 leyebilecek ve iliflkisel veritaban› yönetim sistemi-
‹liflkisel veritaban› modeli, günümüzde kullan›- nin nas›l çal›flt›¤›n› aç›klayabileceksiniz.
lan bir çok veritaban› uygulamas›nda baflar›yla ‹liflkisel veritaban› sistemlerinde, veriler tablo ad›
kullan›lmaktad›r. Veri tekrar›n› engelleyecek fle- verilen yap›larda tutulur. Her tablo, farkl› say›da
kilde verilerin birbiriyle iliflkili tablolarda tutul- alandan veya di¤er bir deyiflle özellikten oluflur.
mas›, sorgu h›z›n› art›rmakta ve veritaban› per- Tabloya veri girilirken, alanlara karfl›l›k gelen de-
formans›n› yükseltmektedir. ¤erler, o alan›n veri tipinde girilerek kay›tlar olufltu-

N
rulur. Farkl› tablolar›n kolonlar› aras›ndaki iliflkiler,
‹liflkisel veritaban› uygulamalar›n› di¤er verita- iliflkisel veritaban›n›n en temel tasar›m özelli¤idir.

N
A M A Ç

2 ban› türlerinden ay›rabileceksiniz.


Hiyerarflik ve a¤ modellerinde, çoktan çoka veri A M A Ç SQL diliyle yap›lan iflleri tan›mlayabileceksiniz.
4
modellerinde s›k›nt›lar yaflanmakta ve iliflkisel SQL (Yap›sal Sorgu dili), 1980’lerde gelifltirilen
veritaban› modeli daha iyi sonuç vermektedir. ve günümüzde yayg›n flekilde kullan›lan ulusla-
Ancak, biribirine ba¤l› binlerce tablonun bulun- raras› bir standarda dayal› veritaban› sorgu dili-
mas› ve çok say›da tabloyu ilgilendiren sorgula- dir. Veritaban› yönetim sistemlerinin büyük bir
malarda, örne¤in veri madencili¤i gibi uygula- k›sm›, SQL dilini standartlara uygun flekilde des-
malarda, iliflkisel veritaban› modeli iyi çal›flma- tekler. SQL diliyle, veritaban› ve içinde tablolar
maktad›r. Bu nedenle, veri madencili¤i uygula- oluflturulabilir, farkl› koflullara dayal› sorgular ku-
malar›nda farkl› modeller kullan›lmaktad›r. rulabilir, 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 siste- 6. Bir tabloda, her kayda verilen eflsiz numaralara ne
midir? ad verilir?
a. Microsoft Windows a. ‹ndeks
b. Excel b. Birincil anahtar
c. Oracle c. ‹liflki
d. Linux d. Hiyerarflik veri modeli
e. Unix e. Raporlama

2. Afla¤›dakilerden hangisi bir iliflkisel veritaban› yöne- 7. Çevrimiçi analitik ifllem (OLAP: Online Analytical
tim sisteminde yaflanabilecek sorunlardan biri de¤ildir? Processing) nedir?
a. Kullan›c› say›s›n›n s›n›rland›r›lamad›¤› durum- a. ‹liflkisel raporlama ve veri madencili¤ini içeren
larda, veritaban› yönetim sisteminin afl›r› yük- veritaban› uygulamas›d›r
lenmesi b. Veritaban› içinde yer alan ba¤›ms›z veri öbekle-
b. Tablolar aras›nda yaflanabilecek verilerin tutars›z rinin incelenerek yeni bir veritaban› tasar›m› ge-
lmas›o
lifltirilmesi sürecidir.
c. Metin üzerinde arama yapt›r›lmas›
c. Düzensiz ve büyük miktardaki veriyi bir araya
d. Tablolardaki eriflim yetkilerindeki s›k›nt›lar›n gü-
getiren veritaban› uygulamas›d›r.
venlik sorunlar› yaflatmas›
e. Tablolar›n ilgili kolonlar›nda indeksleme yap›la- d. Verilerin tutarl›l›¤›n› analitik flekilde çözen yön-
mamas› temdir.
e. Bir kuruluflun bütün verisini tutan veritaban› uy-
3. PostgreSQL Veritaban› yönetim sisteminde kullan›- gulamas›d›r.
lan dördüncü nesil programlama dili afla¤›dakilerden
hangisidir? 8. Afla¤›dakilerden hangisi, büyük miktarda veri bulu-
a. C# nan bir veritaban› sunucusundaki veritaban› eriflim h›-
b. PL/pgSQL z›n› art›rmaz?
c. PL/SQL a. Sisteme daha h›zl› sabit diskler takmak
d. Pyton b. Veritaban›n›n bir kopyas›n› alarak di¤er bir sis-
e. Visual Basic teme ayn› verileri yüklemek
c. Sunucudaki merkezi ifllemci birimi say›s›n› art›r-
4. Hiyerarflik veritaban› modelinin kullan›lamad›¤› du- mak
rum afla¤›dakilerden hangisidir? d. Bellek miktar›n› art›rmak
a. Tablolar aras›nda çoktan-çoka iliflki olmas› e. A¤a ba¤lanmak için kullan›lan bak›r kabloyu b›-
b. ‹ndeksleme yap›lmak istenmesi rakarak fiber optik kalo takmak
c. Dosya sisteminin verileri depolamaya müsait ol-
mamas› 9. Veri ambar› nedir?
d. Tablodaki kolonlar›n say›s›n›n çok büyük olmas› a. Tarihsel içerikli verileri depolayan veri merkez-
e. Veri miktar›n›n küçük olmas› leridir.
b. Çok say›da bilgisayar›n bulundu¤u merkezlerdir.
5. Veritaban› indeksleme nedir? c. Büyük depolama kapasitesine sahip bilgisayar
a. Veritaban›nda yap›lan sorgulamalar› h›zland›ran a¤lar›d›r.
bir yöntemdir. d. Da¤›t›k depolama birimidir.
b. Veritaban›nda yer alan tablolar› tek bir tablo ha- e. Üzerinde ayn› anda birden fazla say›da VTYS
linde getirme ifllemidir. çal›flt›r›lan bilgisayarlar›n oluflturdu¤u yap›d›r.
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.
18 Veritaban› Uygulamalar›

S›ra Sizde Yan›t Anahtar›


10. SQL nedir? S›ra Sizde 1
a. Sorgu yap›lmas›n› sa¤layan uygulama yaz›l›m›d›r. Arkadafllar›n›z›n do¤um tarihleri, akrabalar›n›z›n isimle-
b. Bir veritaban› yönetim sistemidir. ri ve yak›nl›k dereceleri, su ve elektrik hizmetleri dan›fl-
c. Birinci nesil programlama dilidir. ma telefonlar› gibi önemli bilgiler, bilgisayar ortam›na
d. Veritaban› ifllemleri için kullan›lan komut dille- konulabilecek kiflisel veritabanlar›d›r.
rinden biridir.
e. Web üzerinde sorgulama yap›lmas›n› sa¤layan S›ra Sizde 2
arama motorudur. Oracle, IBM DB2, Microsoft SQL Server, PostgreSQL,
MySQL, Apache Derby, Firebird, FrontBase, HSQLDB,
Informix Dynamic Server, Ingres, InterBase, Microsoft
Kendimizi S›nayal›m Yan›t Anahtar› Access, Microsoft Visual Foxpro, Msql, Openbase, Pa-
1. c Yan›t›n›z yanl›fl ise “Girifl” bafll›kl› bölümü tek- naroma, SmallSQL, SQLLite, Teradata, TxtSQL, Unidata
rar inceleyiniz. ve Valentina.
2. e Yan›t›n›z yanl›fl ise “ ‹liflkisel Veritaban› Yöne-
tim Sistemlerinin Sorunlar›” bafll›kl› bölümü tek- S›ra Sizde 3
rar inceleyiniz. Arkadafllar›m›z›n adresleri ve do¤um tarihleri, telefon
3. b Yan›t›n›z yanl›fl ise “Veritaban› Nedir?” bafll›kl› numaralar›.
bölümü tekrar inceleyiniz.
4. a Yan›t›n›z yanl›fl ise “Veritaban› Türleri ve Uygu- S›ra Sizde 4
lamalar›”bafll›kl› bölümü tekrar inceleyiniz. Stokta tek kalan bir ürünü iki farkl› kiflinin ayn› anda
5. a Yan›t›n›z yanl›fl ise “Veritaban› Nedir?” bafll›kl› al›flverifl sepetine eklemesi.
bölümü tekrar inceleyiniz.
6. b Yan›t›n›z yanl›fl ise “Veritaban› Nedir?” bafll›kl› S›ra Sizde 5
bölümü tekrar inceleyiniz. Banka hesab›nda 1000 TL bulundu¤unu ve iki görevli
7. a Yan›t›n›z yanl›fl ise “Veritaban› Türleri ve Uygu- taraf›ndan bu rakam›n görüldü¤ünü düflünelim. Bir gö-
lamalar›”bafll›kl› bölümü tekrar inceleyiniz. revli 800 TL’sini bir di¤er hesaba gönderirken, di¤erinin
8. e Yan›t›n›z yanl›fl ise “Veritaban› Türleri ve Uygu- ayn› anda 1000TL’yi baflka bir hesaba aktard›¤›n› düflü-
lamalar›”bafll›kl› bölümü tekrar inceleyiniz. nelim. Banka hesab›nda toplam 1000 TL olmas›na ra¤-
9. a Yan›t›n›z yanl›fl ise “Veritaban› Türleri ve Uygu- men, 1800TL’lik transfer yap›labilir.
lamalar›”bafll›kl› bölümü tekrar inceleyiniz.
10.d Yan›t›n›z yanl›fl ise “Veritaban› Nedir?” bafll›kl›
bölümü tekrar inceleyiniz.
1. Ünite - Veritaban› Uygulamalar› 19

Yararlan›lan ve Baflvurulabilecek
Kaynaklar
Raghu Ramakrisnan, Johannes Gehrke, “Database Ma-
nagement 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 mana-
gement systems, 3rd ed. Boston: McGraw-Hill.
J. Erickson, (2009). Database technologies: concepts,
methodologies, tools, and applications. Hers-
hey, PA: Information Science Reference.
PostgreSQL web sitesi: http://www.postgresql.org/
Wikipedia web sitesi: http://www.wikipedia.org/Data-
base/
2
VER‹TABANI UYGULAMALARI

Amaçlar›m›z

N
Bu üniteyi tamamlad›ktan sonra;

N
PostgreSQL yaz›l›m›n› herhangi bir bilgisayara kurabileceksiniz.
PostgreSQL yaz›l›m›yla birlikte gelen ek yaz›l›mlar›n neler oldu¤unu

N
listeleyebileceksiniz.
PostgreSQL kurulumuyla birlikte Bafllat menüsüne eklenen programlar›n
neler oldu¤unu aç›klayabileceksiniz.

Anahtar Kavramlar
• PostgreSQL • Veritaban› sürücüleri
• Kurulum dosyas› • PostGIS
• Dil kodlar›

‹çerik Haritas›

• G‹R‹fi
• POSTGRESQL KURULUM
DOSYASININ ‹ND‹R‹LMES‹
Veritaban› PostgreSQL
Kurulumu • POSTGRESQL YAZILIMININ
Uygulamalar›
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 Win-
dows, Linux ve Unix iflletim sistemlerini desteklemektedir. PostgreSQL yaz›l›m›, ti-
cari 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.par-
dus-wiki.org/BSD_Lisans› adresinden al›nabilir. Yaz›l›m›n ücretsiz olmas›, ticari ya-
z›l›mlar kadar h›zl› çal›flmas› ve kullan›m kolayl›¤› gibi özellikleri nedeniyle, bu ki-
tapta PostgreSQL yaz›l›m› kullan›lm›flt›r. Yer alan örneklerin ve al›flt›rmalar›n tama-
m›, PostgreSQL v8.4 yaz›l›m› üzerinde denenmifl ve çal›flt›r›lm›flt›r. Bundan sonra-
ki 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› üzerin-
de 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 des-
teklerken sekizinci sürümünden itibaren Microsoft Windows deste¤i de getirilmifl-
tir. Unix ve Linux versiyonlar›n›n kurulumu, bu ünitede anlat›lan kurulum sürecin-
den farkl› de¤ildir.
SIRA S‹ZDE SIRA S‹ZDE
Kitab›n yaz›m› s›ras›nda kullan›lan, PostgreSQL’in 8.4.4 sürümü, yaz›l›m›n res-
mi sitesi olan http://www.postgresql.org/download/windows sayfas›ndan in-
dirilmelidir. ‹lgili sayfada “One Click Installer” ba¤lant›s›ndan indirilecek
D Ü fi Ü N E L ‹ M kurulum D Ü fi Ü N E L ‹ M
dosyas› olan “postgresql-8.4.4-1-windows.exe” yaklafl›k 41,21 Mbyte büyüklü¤ün-
dedir. Yaz›l›m›n sürekli gelifltirilmesinden dolay›, çok say›da yeni sürüm sitede ya-
S O R U S 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 D‹KKAT
indirin. Web’deki herhangi bir siteden indirmeniz durumunda, bu dosyayla birlikte gele-
bilecek zararl› yaz›l›mlar›n bilgisayar›n›za yüklenmesine neden olabilirsiniz.

N N
SIRA S‹ZDE SIRA S‹ZDE

AMAÇLARIMIZ 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

D‹KKAT PostgreSQL sitesindeki


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

N N
SIRA S‹ZDE SIRA S‹ZDE
POSTGRESQL YAZILIMININ KURULUMU
Kurulum dosyas› indirildikten sonra dosyan›n üzerine çift t›klayarak kurulum
AMAÇLARIMIZ ifllemi bafllat›l›r. E¤er iflletim sistemi olarak Windows Vista veya Windows 7 kulla-
AMAÇ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 P geçerek kuruluma
K ‹ T A Pdevam edebilirsiniz (fiekil 2).

fiekil 2.1
T E LPostgreSQL
EV‹ZYON TELEV‹ZYON
Kurulumu:
Yetkilendirme izin
ekran›.
‹NTERNET ‹NTERNET

fiekil 2.2

PostgreSQL
Kurulumu:
kurulum bafllangݍ
ekran›.
2. ÜniteSIRA S‹ZDE
- PostgreSQL Kurulumu SIRA S‹ZDE
23

Bir sonraki pencerede kurulum sihirbaz› size PostgreSQL yaz›l›m›n›n


D Ü fi Ü N E L ‹ M kurulaca- D Ü fi Ü N E L ‹ M
¤› dizini soracakt›r. Bu noktada eriflim izininiz olan ve yeterli disk alan›n›n bulun-
du¤u bir dizin seçmeniz do¤ru olacakt›r (fiekil 3). Kurulum dizini seçiminden son-
S O R U S O R U
raki ekranda verilerin saklanaca¤› dizin seçilecektir (fiekil 4).

Kurulum sonras›nda kullanma ihtiyac›n›z›n do¤abilece¤i baz› dosyalar›n D ‹ K sa¤l›kl›


KAT çal›flma- D‹KKAT
s› için kurulum dosyalar›n›n ve verilerin tutulaca¤› dizin yolunun içinde boflluk karakteri
bulunmamas› iyi olacakt›r. Bu sebeple kurulum dizinini “C:\PostgreSql\8.4” ve veri dizini-

N N
SIRA S‹ZDE SIRA S‹ZDE
ni “C:\PostgreSql\8.4\data” olarak de¤ifltirmelisiniz.
fiekil 2.3
AMAÇLARIMIZ AMAÇLARIMIZ
PostgreSQL
Kurulumu: Dizin
seçim ekran›.
K ‹ T A P 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 iste-
yecektir (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› kulla-
n›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 SIRA S‹ZDE


S O R U S O R U

D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M
D‹KKAT Girilen flifreyiD ‹unutmamak
KKAT 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 yetki-
S O R U S O R U
siz flekilde de¤ifltirebilece¤ini unutmay›n›z.

N N
SIRA S‹ZDE SIRA S‹ZDE

D‹KKAT fiifre seçerken,


D ‹ Ktahmin
K A T edilemeyecek harf, rakam ve noktalama iflareti içeren bir dizi seç-
AMAÇLARIMIZ 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 keli-

N N
SIRA S‹ZDE SIRA S‹ZDE
melerden birinin seçilmesinden kaç›n›lmal›d›r. Örne¤in, “merhaba”, “123” veya “999999”
K ‹ T A P gibi flifrelerKkolay
‹ T Atahmin
P edilebilece¤inden, veritaban› yöneticileri için güvenlik sorunla-
AMAÇLARIMIZ r› ç›karabilir.
AMAÇLARIMIZ

TELEV‹ZYON T E L E Vsistemleri
Veritaban› ‹ZYON genellikle kurulu oldu¤u sunucu bilgisayar›n d›fl›ndaki
K ‹ T A P K ‹ T Agelecek
uygulamalardan P isteklere cevap verecek flekilde tasarlanm›fllard›r. Bu
günümüzde en yayg›n biçimde kullan›lan sistem olan sunucu istemci mimari ya-
‹NTERNET p›s›d›r. Genellikle
‹ N T E R N E Tgünümüzde, bu mimarinin uygulamas› olarak, veritaban› su-
TELEV‹ZYON T E Lbir
nucusu ayr› E V ‹bilgisayarda
ZYON çal›flmakta ve istemciler a¤ üzerinden sunucuya erifl-
mektedir. 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 ‹NTERNET
de getirmesidir. Sistemin güvenli ve sorunsuz bir flekilde çal›flmaya devam etme-
si 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›, sis-
tem 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 25


S O R U S O R U

Veritaban› sunucusunun, bir atefl duvar› arkas›nda tutulmas› verilerinD ‹güvenli¤inin


KKAT ve tu- D‹KKAT
tarl›l›¤›n›n sa¤lanmas› için önemlidir.

N N
SIRA S‹ZDE SIRA S‹ZDE
Veritaban› sisteminin kurulu oldu¤u sistemin d›fl›ndan gelecek ba¤lant›lar› ka-
bul edece¤i port numaras›n› seçme aflamas› fiekil 6’te görülmektedir. Burada var-
say›lan port numaras› kullan›labilece¤i gibi sald›r›lara karfl› AMAÇLARIMIZ
güvenli¤i biraz daha AMAÇLARIMIZ
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 K ‹ T A P
fiekil 2.6
PostgreSQL
TELEV‹ZYON Kurulumu: T E Uzak
LEV‹ZYON
ba¤lant›lar için
port belirleme.

‹NTERNET ‹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 gereklilik-
tir. Dil kodu deste¤i sayesinde say› ve para birimi formatlar› ve karakter s›ralama-
s› ö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.
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 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 SIRA S‹ZDE
Oracle ve IBM DB2 gibi veritaban› yönetim sistemlerinde oldu¤u gibi Post-
greSQL sisteminde de dördüncü nesil programlama deste¤i bulunmaktad›r. Post-
AMAÇLARIMIZ greSQL için haz›rlanm›fl olan PL/pgSQL dilini kullanarak veritaban› yönetim siste-
AMAÇ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-
K ‹ T A P ta bulunanKbir ‹ Tistemcinin,
A P defalarca sorgulama yaparak uzun bir sürede ulaflabile-
ce¤i sonuca daha k›sa bir sürede ulaflmas› sa¤lan›r. Veritaban› örneklerinde kulla-
n›lacak olan flablona PL/pgSQL eklemek için dil seçimi ekran›nda “Install pl/pgsql
TELEV‹ZYON in template1
T E L Edatabase”
V‹ZYON 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 ‹NTERNET
flimdiye kadar yap›lan seçimlerde bir de¤ifliklik yap›lmas› gerekiyorsa “Back” (ge-
ri) dü¤mesiyle önceki ekranlara dönülebilir ve kurulum parametreleriyle ilgili iste-
nilen de¤ifliklikler gerçeklefltirilebilir. “Cancel” (iptal) tuflu ise kurulumu iptal ede-
cektir. Son olarak “Next” (ileri) tufluna bast›¤›n›zda kurulum bafllayacakt›r. Post-
greSQL 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).
2. Ünite - PostgreSQL Kurulumu 27

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

Veritaban› yönetim sistemini verimli olarak kullanabilmek için bir tak›m ek uy-
gulamalar›n kurulmas› gerekebilir. Kurulum bittikten sonra gelen “Completing the
PostgreSQL Setup Wizard” ekran›nda bu yaz›l›mlar› kurmak için kullan›lan “Appli-
cation Stack Builder” program›n›n hemen çal›flt›r›lmas›n›n istenip istenmedi¤i so-
rulmaktad›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 bulunma-
maktad›r. Menü içerisindeki program k›sa yollar›n› incelersek;
• Application Stack Builder: Veritaban› yaz›l›m›na ek olarak kullan›lan prog-
ramlar›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. Prog-
ram üzerinden, yeni veritaban› yaratabilir ve var olan veritabanlar›na yeni
tablolar ekleyebilir. Veritaban› yönetim sistemiyle ilgili pek çok ifli gerçek-
lefltirebilir.
• 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 ko-
mut sat›r› penceresi açar. Veritaban› ba¤lant›s› ve program parçalar›n›n ya-
z›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‹KKAT Veritaban›nda D ‹büyük


K K A T de¤ifliklikler yap›lacaksa ve de¤iflikliklerin yap›ld›¤› s›rada kullan›-
c›lar›n sisteme ba¤lanmamas› isteniyorsa, veritaban› durdurulmal›d›r. De¤ifliklikler bit-
tikten sonra,SIRA
Bafllat menüsünden “Start Server” t›klanarak, sunucu tekrar çal›flt›r›labilir.

N N
SIRA S‹ZDE S‹ZDE
fiekil 2.9

Bafllat
AMAÇLARIMIZ AMAÇLARIMIZ
menüsündeki
PostgreSQL dizini

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 D ‹ K K A TSistemi canl› bir sistem oldu¤u için, di¤er kullan›c›lara haber verme-
Veritaban› Yönetim
den durdurmak veya yeniden bafllatmak beklenmeyen sonuçlar verebilir. O an sistemde ça-

N N
SIRA S‹ZDE l›flt›r›lmaktaSIRA
olanS‹ZDE
komutlar yar›da kalaca¤›ndan, durdurup bafllatma an›nda sistem istek-
lere 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 ve-
AMAÇLARIMIZ AMAÇLARIMIZve yeniden bafllatmak için bir zaman aral›¤› belirlenmeli ve bu bilgi
ritaban›n› durdurmak
kullan›c›lara bildirilmelidir.

K ‹ T A P K ‹ T A P
POSTGRESQL YARDIMCI PROGRAMLARIN
KURULUMU
Veritaban› yard›mc› programlar›n›n kurulumu “Bafllat” menüsünden “Application
TELEV‹ZYON TELEV‹ZYON
Stack Builder” seçilerek bafllat›l›r. E¤er Windows Vista veya Windows 7 iflletim sis-
temlerinden 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ç›-
‹NTERNET lan ekranda ‹ N Tek
E R programlar›n
NET hangi yaz›l›m için kurulaca¤› seçilecektir. fiu an itiba-
riyle veritaban› yönetim yaz›l›m› kurulmufl oldu¤u için “5432 portu üzerinde Post-
greSQL 8.4” seçilmelidir. Kurulum ifllemini gerçeklefltirmek için bilgisayar›n›z ‹n-
ternet’e ba¤l› olmal›d›r.
2. Ünite - PostgreSQL Kurulumu 29

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› uygu-


lamalar›n seçimine geçilir. Kurulabilecek uygulamalar a¤aç yap›s› alt›nda listelen-
mifltir. 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 App-
le 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 kulla-
n›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› durumun-
da 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¤ra-
fi ifllemler yapmas›n› sa¤lar. PostgreSQL veritaban›, OpenGIS ad› verilen
uluslararas› standart aç›s›ndan veri tipi ve yordamlar yönünden onaylan-
m›fl bir veritaban›d›r. OpenGIS standartlar›na eksiksiz uymaktad›r.
Web Uygulamalar› (Web Applications): Bu kategoride günümüzde yayg›n ola-
rak kullan›lan forum, wiki ve içerik yönetim yaz›l›mlar› bulunmaktad›r. E¤er Post-
greSQL veritaban›n›n bu sistemler için kullan›lmas› planlan›yorsa, ilgili uygulama-
lar›n bu arayüzden kurulumu kolayl›k sa¤lamaktad›r.
• Drupal: Aç›k kaynak kodlu içerik yönetim sistemlerinin yayg›n olanlar›n-
dan birisidir. Her amaca göre özellefltirilebilir bir sistemdir. Ek bilgi ve sis-
temle 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 mesajlaflma-
s›n› sa¤layan aç›k kaynak kodlu forum yaz›l›m›d›r. Arka planda Post-
greSQL ç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ün-
de kullan›lan aç›k kaynak kodlu ücretsiz bir web sunucu yaz›l›m›d›r. Apac-
he iste¤e ba¤l› olarak Linux ve Windows iflletim sistemleri için ayr›ca indiri-
lerek kurulabilir. Ancak PostgreSQL veritaban› eklentisi için ayr›ca yap›lan-
d›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ç du-
yar. ApachePHP ve phpPgAdmin yaz›l›mlar› kurulduktan sonra, Post-
greSQL veritaban›na verilen yetkiler ve izinler çerçevesinde ba¤lan›larak
gerekli ayarlar ve düzenlemeler yap›labilir. Ancak, veritaban›n› yönetecek
2. Ünite - PostgreSQL Kurulumu 31

bir Web uygulamas› kuruldu¤unda, bu uygulamaya ‹nternet’e ba¤l› her-


kes ulaflabilir. Veritaban› güvenli¤ini sa¤laman›n yan›nda Web uygulama-
s›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 ifla-
retleri 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 eklenti-
lerin hiç birinin kurulmas›na gerek yoktur. ‹lerideki ünitelerde yer alan co¤rafi sor-
gulamalarda 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 ihti-
yaç 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› ya-
z›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 özet-
lenir. E¤er kurulacak program›n ve eklentilerinin seçiminde bir de¤ifliklik yap›lma-
s› 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 indi-
rilecek 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 bileflenleri-


nin 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 dos-
yalar› ç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 iflaretlene-
rek 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 ek-
lenti programlar›n›n kurulumu tamamland›¤›nda fiekil 15’teki sonuç ekran›yla kar-
fl›lafl›l›r.
2. Ünite - PostgreSQL Kurulumu 33

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 tamamlan-


m›fl olur. Kurulan eklenti programlar› Bafllat menüsünde bulunabilir. Windows ifl-
letim 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 Ç
PostgreSQL yaz›l›m›n› herhangi bir bilgisayara N
A M A Ç
PostgreSQL kurulumuyla birlikte Bafllat menüsü-
1 kurabileceksiniz. 3 ne eklenen programlar›n neler oldu¤unu aç›kla-
PostgreSQL’in bir bilgisayara kurulumu, yabileceksiniz.
www.postgresql.org adresinden kurulum yaz›l›- PostgreSQL yaz›l›m› kurulduktan sonra, Bafllat
m›n›n istenen iflletim sistemi için en son sürümü menüsüne çeflitli programlar›n linkleri kurulmak-
indirilerek bafllat›labilir. Bu kitaptaki örnekler ve tad›r. “Start Server” ve “Stop Server” programlar›,
uygulamalar, PostgreSQL 8.4.4 sürümü kullan›la- veritaban›nda tutars›zl›k olmamas› için, büyük
rak haz›rlanmas›na ra¤men, gelecekte ç›kmas› de¤ifliklikler öncesinde sunucuyu kapatmak ve
muhtemel sürümlerde sorun ç›karmadan çal›fla- sonras›nda açmak için kullan›l›r. ApachePHP ve
bilecektir. phpPgAdmin yaz›l›mlar›, web sunucusu kurmak
ve gerekirse PostgreSQL veritaban› yönetim sis-
N
A M A Ç
PostgreSQL yaz›l›m›yla birlikte gelen ek yaz›l›m- temini web üzerinden yönetmek için kullan›l›r.
2 lar›n neler oldu¤unu listeleyebileceksiniz.
PostgreSQL, pek çok farkl› amaç için kullan›labi-
lece¤inden, farkl› yükleme modellerini de des-
tekler. Web uygulamalar› için, web sunucusunu
kurarken, co¤rafi bilgi sistemleri için PostGIS op-
siyonunu da kurulum bileflenlerinde kullan›c›ya
sunar.
36 Veritaban› Uygulamalar›

Kendimizi S›nayal›m
1. PostgreSQL yaz›l›m›n›n kurulumu s›ras›nda, varsay›- 6. PostgreSQL yaz›l›m›n›n web üzerinden yönetilmesi-
lan olarak gelen yönetici ismi afla¤›dakilerden hangisidir? ni sa¤layan yaz›l›m afla¤›dakilerden hangisidir?
a. postgres a. ApachePHP
b. admin b. phpPgAdmin
c. root c. psqlODBC
d. Administrator d. phpBB
e. Noone e. PostGIS

2. PostgreSQL’in TCP ba¤lant› port numaras› afla¤›daki- 7. “Stop Server” ve “Start Server” komutlar›n›n ifllevi
lerden hangisidir? nedir?
a. 21 a. Bilgisayar sistemine elektrik verildi¤i zaman
b. 80 PostgresSQL VTYS’ini çal›flt›rmak, bilgisayar ka-
c. 113 pat›lmadan önce de VTYS’ini kapatmak
d. 8080 b. Bilgisayar›n iflletim sistemini kapatmak ve açmak
e. 5432 c. Yönetim yaz›l›m›n›n yetkisiz kiflilerce farkedil-
meden kullan›lmas›n› engellemek ve kontrollü
3. Afla¤›dakilerden hangisi PostgreSQL sisteminin yö- flekilde tekrar çal›flt›rabilmek
netim program› afla¤›dakilerden hangisidir? d. Veritaban› yap›s›nda de¤ifliklikler olaca¤›nda su-
a. pgAdminIII nucuyu eriflime kapatmak ve ifllem bitti¤inde ye-
b. Drupal niden bafllatabilmek
c. Apache e. VTYS’i çal›flmaz hale geldi¤inde kapatmak ve
d. PHPBB yeniden açmak
e. MySQL Migration Wizard
8. PostgreSQL kurulumu bittikten sonra, ek yaz›l›mlar›n
4. PostGIS nedir? kurulabilmesini sa¤layan program afla¤›dakilerden han-
a. PostgreSQL yaz›l›m›n›n co¤rafi nesneleri depo- gisidir?
lamas› için kullan›lan ektir. a. Application Stack Builder
b. Co¤rafi bilgi sistemidir. b. phpBB
c. PostgreSQL yaz›l›m›n›n ayarlar›n› yapan yöne- c. Start Server
tim modülüdür. d. psqlODBC
d. PostgreSQL’in e-Posta uygulamalar›nda kullan›l- e. pgAdmin
mas›n› sa¤layan ek yaz›l›md›r.
e. Aç›k kaynak kodlu yedekleme sistemidir. 9. mediaWiki nedir?
a. Wikipedia sitesinin de kulland›¤› yaz›l›md›r.
5. Veritaban› yönetim yaz›l›m›nda kullan›lan yönetici b. Resim ve videolar›n izlenebildi¤i YouTube ben-
flifrelerinin sa¤lam olabilmesi için afla¤›dakilerden han- zeri bir arayüz sunan yaz›l›md›r.
gisi yap›lmal›d›r? c. Çevrimiçi ansiklopedi yaz›l›m›d›r.
a. Alfanümerik ve noktalama iflaretlerinin birlefli- d. Resim ve videolar›n depolanmas›n› sa¤layan ar-
minden oluflmal›d›r. fliv yaz›l›m›d›r.
b. En az yirmi adet nümerik karakterden türetilme- e. Çevrimiçi harita sistemidir.
lidir.
c. ‹flletim sisteminin Administrator flifresiyle ayn› 10. PostgreSQL kurulumu s›ras›nda yüklenebilen
olmal›d›r. phpBB eklentisinin ifllevi nedir?
d. Sistemde yer alan her veritaban› için ayr› flifre a. Forum sitesi oluflturabilmek
kullan›lmal›d›r. b. Çevrimiçi içerik yönetim sistemi kurabilmek
e. fiifre oluflturulurken, baflka bir kiflinin görmeme- c. Web üzerinden baz› veritaban› komutlar›n› gön-
sine dikkat edilmelidir. dermeyi sa¤lamak
d. Yedekleme sistemi kurmak
e. Co¤rafi modelleri veritaban›nda kullanabilmek
2. Ünite - PostgreSQL Kurulumu 37

Kendimizi S›nayal›m Yan›t Anahtar› Yararlan›lan Kaynaklar›


1. a Yan›t›n›z yanl›fl ise “PostgreSQL Kurulum PostgreSQL web sitesi
Dosyas›n›n ‹ndirilmesi” bafll›kl› bölümü tekrar http://www.postgresql. org/
inceleyiniz. EnterpriseDB web sitesi
2. d Yan›t›n›z yanl›fl ise “PostgreSQL Yaz›l›m›n›n http://www.enterprisedb.com/
Kurulumu” bafll›kl› bölümü tekrar inceleyiniz. PostGIS web sitesi
3. a Yan›t›n›z yanl›fl ise “PostgreSQL Yaz›l›m›n›n http://postgis.refractions.net/
Kurulumu” bafll›kl› bölümü tekrar inceleyiniz. Drupal web sitesi
4. a Yan›t›n›z yanl›fl ise “PostgreSQL Yaz›l›m›n›n http://drupal.org/
Kurulumu” bafll›kl› bölümü tekrar inceleyiniz. MediaWiki web sitesi
5. a Yan›t›n›z yanl›fl ise “PostgreSQL Yaz›l›m›n›n http://www.mediawiki.org/
Kurulumu” bafll›kl› bölümü tekrar inceleyiniz. Vikipedi web sitesi
6. b Yan›t›n›z yanl›fl ise “PostgreSQL Yard›mc› http://www.wikipedia.org/
Programlar›n Kurulumu” bafll›kl› bölümü tekrar phpBB web sitesi
inceleyiniz. http://www.phpbb.com/.
7. d Yan›t›n›z yanl›fl ise “PostgreSQL Yaz›l›m›n›n Apache Web Sunucusu web sitesi
Kurulumu” bafll›kl› bölümü tekrar inceleyiniz. http://httpd.pa che.org/
8. a Yan›t›n›z yanl›fl ise “PostgreSQL Kurulum phpPgAdmin web sitesi
Dosyas›n›n ‹ndirilmesi” bafll›kl› bölümü tekrar http://phppgadmin.sourceforge.net/
inceleyiniz.
9. a Yan›t›n›z yanl›fl ise “PostgreSQL Yard›mc›
Programlar›n Kurulumu” bafll›kl› bölümü tekrar
inceleyiniz.
10. a Yan›t›n›z yanl›fl ise “PostgreSQL Yard›mc›
Programlar›n Kurulumu” bafll›kl› bölümü tekrar
inceleyiniz.
3
VER‹TABANI UYGULAMALARI

Amaçlar›m›z

N
Bu üniteyi tamamlad›ktan sonra;
PostgreSQL’in yönetim paneli olan pgAdmin program›nda sa¤lanan özellik-

N
leri kullanabileceksiniz.
Herhangi bir veritaban› yönetim sistemiyle birlikte gelen yönetim yaz›l›m›n-

N
daki özellikleri kullanabileceksiniz.
Yönetim program› üzerinden yeni bir veritaban›, veritaban› içine yeni tablo-

N
lar, tablolara yeni kolonlar (alan) ekleyebileceksiniz.
Veritaban› sunucusunda yap›labilecek bak›m ifllemlerini gerçeklefltirebile-

N
ceksiniz.
Veritaban›n›n tamam›n› veya bir k›sm›n› yedekleyebilecek, yedeklerden ve-

N
ritaban›n› yeniden oluflturabileceksiniz.
Veritaban›yla ilgili çeflitli raporlar› oluflturabileceksiniz.

Anahtar Kavramlar
• iliflkisel veritaban› yönetim • veritaban› yedekleme
sistemi • veritaban› kopyalama
• PostgreSQL • veritaban›nda raporlama
• pgAdmin

‹çerik Haritas›

• G‹R‹fi
• pgAdmin III PROGRAMINA GENEL
BAKIfi
• YEN‹ VER‹TABANI OLUfiTURMA
Veritaban› Veritaban› • TABLO OLUfiTURMA
Uygulamalar› Yönetimi • 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 prog-
ramlar 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ül-
leri 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, veri-
taban› 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 durum-
da olmal›d›r. Bu tip bir sorun an›nda belirli bir noktaya dönebilmek için sistem ya-
p›land›rmas› ve veritaban› tablolar›ndaki verilerin yedeklerinin al›nmas› gereklidir.
Veritaban› sistemlerinde bak›m, yedekleme ve sistemi yedeklendi¤i ana geri dön-
dü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 komutlar-
la yap›lmas› gereklidir. pgAdmin, PostgreSQL veritaban› yönetim sisteminin kolay-
l›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 ola-
nak verir. Fare yard›m›yla ekranda yap›lan ifllemler pgAdmin taraf›ndan SQL ko-
mutlar›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. Sunu-
cular›n farkl› bir donan›m mimarisine veya iflletim sistemine sahip olmas› sorun de-
¤ildir. pgAdmin program› PostgreSQL veritaban› üzerinde yap›labilecek tüm ifllem-
lerin yap›labilmesini sa¤lar. Ayr›ca kullan›c› kendi yazd›¤› SQL sorgular›n› pgAd-
min üzerinden çal›flt›rabilir.
pgAdmin program›n› açmak için Bafllat menüsünden Programlar seçilerek Post-
greSQL 8.4 sekmesi alt›ndaki pgAdmin eleman› seçilir (fiekil 1). Daha rahat bir eri-
flim için PostgreSQL yard›mc› programlar›ndan s›k kullan›lanlar›n›n görev çubu¤u-
na veya masaüstüne k›sa yollar› konulmal›d›r. Bu sayede s›k kullan›lan bu prog-
ramlara daha h›zl› bir eriflim sa¤lanm›fl olur.
pgAdmin program› bafllat›l-
fiekil 3.1 d›¤›nda henüz herhangi bir ve-
pgAdmin: Program› ritaban›na ba¤lant› yap›lmad›¤›
bafllatma için bofl bir ekranla karfl›lafl›l›r.
Ekran üzerinde üç ayr› bölüm
bulunmaktad›r (fiekil 2). Bun-
lardan ilki sol k›s›mda bulunan
nesne izleme (Object Browser)
bölümüdür. Bu ekranda verita-
ban› sistemi içerisindeki nes-
neler listelenmektedir. Bu nes-
nelerle ilgili ayr›nt›l› bilgiler ise
ekran›n sa¤ k›sm›nda gösteri-
lir. ‹ncelenmek istenilen nes-
nenin türüne göre Özellikler
(Properties) sekmesinin yan›n-
da ‹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.
3. Ünite - Veritaban› Yönetimi 41

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 ma-
kinedeki veritaban› üzerinde k›rm›z› bir çarp› iflareti bulunur. Bu durum veritaba-
n›n›n var oldu¤unu ancak pgAdmin üzerinden henüz ba¤lant› kurulmad›¤›n› gös-
terir. Ba¤lant›y› kurmak için “PostgreSQL 8.4 (localhost:5432)” eleman›na çift t›kla-
mak yetecektir. Ba¤lant›n›n kurulmas› için gerekli flifre kullan›c›ya sorulur. Bu flif-
re, veritaban› yönetim sisteminin kurulumu s›ras›nda girilmifl olan flifredir. Verita-
ban› 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çe-
risinde veritabanlar› (Databases), tablo alanlar› (Tablespaces), grup rolleri (Group
Roles) ve Kullan›c› girifl rolleri (Login Roles) dü¤ümleri listelenir. Listelenen nesne-
ler 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› veritaba-
n› sunucusu alt›ndaki farkl› veritaban› örneklerini kullan›c›ya bir arada gösterebil-
mektedir.
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 nere-
de bulunaca¤› tablo alanlar› taraf›ndan belirlenir. Sistem ilk defa çal›flmaya baflla-
d›¤›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› nes-
neleri farkl› tablo alanlar›n› kullanabilir. Veritaban› yöneticileri sistemi daha verim-
li 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 ba-
sarak Yeni Tablo Alan› (New Tablespace) opsiyonu seçilir. Gerekli bilgiler girile-
rek 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 verita-
ban›nda sadece sorgulama yapabilirken, baz›lar›n›n de¤ifltirme yetkisi bulunur. An-
cak kullan›c› ve nesne say›s› artt›¤›nda yetkilendirme iflleminin yönetilmesi zorlafla-
bilir. 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›l-
maktad›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
3. Ünite - Veritaban› Yönetimi 43

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 gere-
kebilir. Bu durumda kullan›c› ad›yla ayr›ca ek bir yetkilendirme yap›labilir.
Kullan›c› Girifl Rolleri (Login Roles): Sistemde ifllem yapmaya yetkili kulla-
n›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 kul-
lan›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 ye-
ni 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 pence-
resinde Veritabanlar› (Databases) dü¤ümü aç›ld›¤›nda sistemde daha önceden ta-
n›mlanm›fl veritabanlar› görüntülenir. Bu veritaban› örneklerinden “postgres” veri-
SIRA
taban› örne¤i, veritaban› sistemi, içsel iflleyifli ve yap›land›rmas› S‹ZDE bilgileri,
hakk›nda SIRA S‹ZDE
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”
Ü fi Ü N E L ‹ M
veritaba- D Ü fi Ü N E L ‹ M
n› içerisinde oluflturulmamal›d›r. E¤er PostgreSQL kurulumundan sonra “Applica-
tion Stack Builder” program› çal›flt›r›larak PostGIS eklentisi kurulmuflsa, sistem içe-
risinde postgis veritaban› örne¤i de görülebilir. Bu örnek flekil S3’te O R U
görülmektedir. S O R U

Veritabanlar› içinde görülen postgres veritaban› üzerinde kesinlikleD ifllem


‹ K K A Tyap›lmamal›- D‹KKAT
d›r. Aksi taktirde, veritaban› çal›flamaz hale gelebilir.

N N
SIRA S‹ZDE SIRA S‹ZDE
Yeni bir veritaban› örne¤i fiekil 3.4
oluflturmak için Veritabanlar› pgAdmin: Sistemde
(Databases) dü¤ümüne sa¤ t›k- AMAÇLARIMIZ AMAÇLARIMIZ
tan›ml› veritaban-
lanarak aç›lan menüden Yeni lar›.
Veritaban› (New Database) op-
siyonu seçilir. Bu aflamada fie- K ‹ T A P K ‹ T A P
kil 4’te gösterilen yeni veritaba-
n› örne¤i oluflturma ekran› gö-
rüntülenir. Yeni veritaban› olufl- TELEV‹ZYON TELEV‹ZYON
turma penceresinin üst k›sm›n-
da birden fazla sekme bulun-
maktad›r. Özellikler (Properti-
‹NTERNET ‹NTERNET
es) sekmesinde ekran üzerinde
oluflturulacak olan veritaban›
örne¤i ile ilgili girilmesi gere-
ken alanlar görülür. Bu alanlar-
dan baz›lar› girilmesi zorunluy-
ken, (örne¤in Veritaban› Ad› - Name gibi), baz›lar› ise zorunlu olmayan alanlard›r (ör-
ne¤in Yorum - Comment alan› gibi).
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 pen-
cerenin 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çilme-
lidir. Karakter kodlamas› (Encoding) seçene¤i UTF8’de b›rak›lmal›d›r. UTF8 en ge-
nifl 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 veri-
taban›n›n bulunaca¤› dizini belirler. Bu alan “default tablespace” olarak seçilmeli-
dir. Harmanlama (Collation) alan› veritaban› oluflturulduktan sonra sisteme girile-
cek olan verilerin s›ralanmas›nda kullan›lacak kurallar› belirlemektedir. Bu alanda
“Turkish, Turkey” seçilmelidir. Karakter tipi (Character type) veritaban›nda kulla-
n›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” giril-
melidir. 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 (Com-
ment) 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 il-
gili 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 45


S O R U S O R U

Veritaban› oluflturulurken karakter kodlaman›n UTF8 olarak seçilmesi,


D ‹ Kgirilecek
KAT verilerin D‹KKAT
de¤iflik dillerde olabilmesini sa¤lar.

N N
SIRA S‹ZDE SIRA S‹ZDE
Tüm alanlar girildikten sonra PostgreSQL veritaban›n›n girilen bilgiler do¤rultu-
sunda ç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›ca- AMAÇLARIMIZ
l›klar (Priviledges) sekmeleridir. Ayr›cal›klar sekmesi sistemdeki grup ve kullan›c›-
lara, oluflturulacak veritaban› üzerinde yetki vermek için kullan›l›r. Yetkilendirme
ifllemi veritaban› örne¤i oluflturulduktan sonra tekrar yap›labilir,
K ‹baz›
T A gruplar›n
P yet- K ‹ T A P
kileri kald›r›l›rken, yeni gruplara yeni yetkiler atanabilir. De¤iflkenler sekmesi ise
bu noktada ifllevsel de¤ildir.
TELEV‹ZYON TELEV‹ZYON
fiekil 3.6
Doldurulmufl yeni
veritaban› olufltur-
‹NTERNET ma ekran›‹ NveT Eçal›fl-
RNET
t›r›lacak SQL cüm-
leci¤i.

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 verita-
ban› ö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 (Repli-
cation) 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-
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çile-
rek, 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›la-
cakt›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 sa-
yede e¤er aktif ana veritaban› herhangi bir sebepten dolay› durursa, kopya verita-
banlar›ndan birisi aktif hale geçer ve sistem çal›flmaya devam eder. Bu flekilde ça-
l›flan sunucular›n tamam›na sunucu kümesi ad› verilir. E¤er “Application Stack Bu-
ilder” program› çal›flt›r›larak Slony-I eklentisi kurulduysa, Kopyalama dü¤ümün-
den yeni bir sunucu kümesi oluflturmak veya kurulan sistemi var olan bir sunucu
kümesine eklemek mümkün olabilir.

SIRA S‹ZDE Yukar›da belirtilen ad›mlar› izleyerek, siz de kendi kullan›m›n›z için bir veritaban› olufl-
SIRA S‹ZDE
1 turun.
D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M
fiekil 3.7

S O R U
Veritaban› örne¤i S O R U
ve içindeki
nesneler.
D‹KKAT D‹KKAT

N N
SIRA S‹ZDE SIRA S‹ZDE

AMAÇLARIMIZ 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üzenle-
mek 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 tablolar-
la olan iliflkilerine göre tasarlan›r. Tablolar SQL dilinde yaz›lm›fl komutlarla olufltu-
rulabilece¤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 ya-
p›s›n›n veri depolamak için kullan›ld›¤›n› kabul ederek, tablolar› pgAdmin üzerin-
3. Ünite - Veritaban› Yönetimi 47

den görsel flekilde oluflturaca¤›z. Tablo oluflturmak için, ilk aflamada veritaban› ör-
ne¤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 ve-
ritaban› sistemi için özel anlam ifade eden bir kelime olmamal›d›r. PostgreSQL,
isimlerde küçük büyük harf ayr›m› yapmaktad›r. Di¤er bir deyiflle, SIRA S‹ZDE
ULKELER ve SIRA S‹ZDE

Ulkeler isimli birbirinden farkl› iki ayr› tablo oluflturulabilmektedir. Ancak, tab-
lolar› olufltururken, bir tarz benimsemeniz yerinde olacakt›r. Örne¤in,
D Ü fi Ü N E L ‹tablo
M isimle- D Ü fi Ü N E L ‹ M
rinin tamam›n›n büyük harf veya ilk harf d›fl›nda di¤erlerinin küçük
SIRA S‹ZDE harf seçilmesi SIRA S‹ZDE
veya bütün harflerin küçük harf olmas› gibi yaklafl›mlar, isimlerde tutarl›l›k sa¤lan-
S O R U S O R U
mas› aç›s›ndan önemlidir.
D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M
Veritaban›ndaki nesnelerin isimlerinde, ö, ü, ›, ç, ¤ gibi Türkçe karakterler
D ‹ K K Akesinlikle
T kul- D‹KKAT
lan›lmamal›d›r. S O R U S O R U

N N
SIRA S‹ZDE SIRA S‹ZDE
Tablo isimlerinin, tablonun ifllevini aç›klayacak kadar uzun isimlerden
D ‹ Kseçilmesi,
KAT yap›lan D‹KKAT
ifllemlerde hata yap›lmas›n› engeller.
AMAÇLARIMIZ AMAÇLARIMIZ

N N
SIRA S‹ZDE SIRA S‹ZDE
fiekil 8’deki ekranda, tablo sahibi olarak postgres kullan›c›s› ve tablo alan› ola-
rak varsay›lan tablo alan› (default tablespace) seçilmelidir. Doldurma
K ‹ T A Katsay›s›
P (Fill K ‹ T A P
Factor) tablonun yeni kay›t ekleme veya güncelleme için ayr›lm›flAMAÇLARIMIZ depolama alan› AMAÇLARIMIZ
oranlar›yla ilgilidir. Bofl b›rak›larak %100 de¤eri atanmas› uygun olacakt›r. ‹leri se-
viyede, bir tablonun sabit kay›tlar› ve de¤ifltirilen kay›tlar› aras›ndaki
T E L E V ‹ Z Y Ooran
N bilinir- TELEV‹ZYON
se, bu alan daha iyi bir de¤erle de¤ifltirilebilir. K ‹ T A P K ‹ T A P
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 isim-
SIRA
‹ENLTEEVRS‹ZDE
li kolonu eklemesi isteniyorsa seçilebilir. Ancak, OID’ler ileri Tveritaban› ‹ ZNYEOT Nuygulama- T‹SIRA
ENLTEEVRS‹ZDE
‹ NZ YE OT N
lar›nda kullan›lan nesnelerdir. Burada, “OID’ye sahip” bölümü iflaretlenmemelidir.
Tablo ile ilgili aç›klamalar, hangi tarihte ne amaçla oluflturuldu¤uD Ü fi Ügibi
N E L ‹ Mbilgiler, yo- D Ü fi Ü N E L ‹ M
rumlar (Comments) alan›na girilebilir. Türetim (Inherits) sekmesi ‹NTERNET
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 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 ç›- D‹KKAT
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.

N N
SIRA S‹ZDE SIRA S‹ZDE

AMAÇLARIMIZ 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çerisinde-


ki verinin farkl› parçalar›n› ifade eder. Üçüncü ünitede verilen ULKELER tablosu-
nun yap›s› Tablo 1’de verilmifltir. Bu yap›ya uygun olarak yeni tabloya kolonlar ek-
lenecektir.
Tablo 3.1 Kolon Ad› Kolon Tipi
ULKELER tablosunun
yap›s›. 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 valu-
e) alan›na girilmelidir. Kolon ile ilgili aç›klamalar, örne¤in kolonlar› oluflturan kifli-
nin ad›, oluflturulma amac› gibi bilgiler Yorum (Comment) alan›na girilebilir. Ta-
mam (OK) dü¤mesine bas›larak ilk sütun oluflturulur. Ayn› ifllemler UlkeAdi ko-
lonu 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-
3. Ünite - Veritaban› Yönetimi 49

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› en-
gellemek 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 ek-
leme penceresi aç›l›r. Birincil anahtar ismi olarak, daha aç›klay›c› olsun diye PK_UL-
KEID 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 giril-
mesine 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 Birincil anahtar,


D ‹ K Kiliflkisel
AT veritaban› uygulamalar›nda, tablolar aras›ndaki iliflkileri kur-
mak için zorunludur.

N N
SIRA S‹ZDE SIRA S‹ZDE
pgAdmin içerisinde oluflturulan tablolara veri girmek, girilen verileri görüntüle-
mek ve SQL komutlar› yazmak için Veri düzenleme (Edit data) ve SQL düzenleyi-
AMAÇLARIMIZ cisi (SQL Editor) araçlar› bulunmaktad›r.
AMAÇLARIMIZ

PostgreSQL SUNUCU DURUMU ‹NCELEME


K ‹ T A P PostgreSQLK veritaban›
‹ T A P 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
TELEV‹ZYON (Server Status)
T E L E Vpenceresinden
‹ZYON eriflilir. Sunucu durumu penceresini açmak için nes-
ne 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 ‹NTERNET
3. Ünite - Veritaban› Yönetimi 51

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üm-
kündür.
Veritaban› tablolar› üzerinde bir kullan›c› baz› komutlar çal›flt›r›rken di¤er kul-
lan›c›lar›n ayn› tabloya eriflimlerinin k›s›tlanmas› gerekebilir. Örne¤in, bir uçak re-
zervasyon/check-in sisteminde, bir kullan›c›n›n 17-F numaral› koltu¤u seçip onay-
lamas› s›ras›nda, tablodaki verilerin tutarl› kalmas› için di¤er kullan›c›lar›n tabloya
SIRA S‹ZDE SIRA S‹ZDE
eriflimlerinin k›sa süreli ask›ya al›nmas› gereklidir. ‹fllem bittikten sonra, di¤er kul-
lan›c›lar›n ifllem yapmas›na izin verilmelidir. Çünkü, ayn› anda iki ayr› kullan›c› 17-
F koltu¤unu almaya çal›fl›rsa verilerde tutars›zl›k ortaya ç›kacakt›r.
D Ü fi Ü NBu gibi durum-
EL‹M D Ü fi Ü N E L ‹ M
larda ilk kullan›c› tablo üzerine bir kilit koyar, di¤er kullan›c›lar koyulan kilidin se-
viyesine göre ilgili tabloya eriflemezler veya k›s›tl› olarak eriflirler. Sunucu Durumu
S O R U S O R U
bölümünde, tablolar üzerinde bulunan bu kilitleri görmek mümkündür.

Kilit mekanizmas›, tablodaki verilerin belirli bir anda tek bir kullan›c›
D ‹ taraf›ndan
KKAT de¤iflti- D‹KKAT
rilmesini sa¤lad›¤› için verilerin tutarl›l›¤›n› sa¤lar.

N N
SIRA S‹ZDE SIRA S‹ZDE
Veritaban› üzerinde çal›flt›r›lan baz› komut dizilerinin bölünemez di¤er bir de-
yiflle 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 komutla- AMAÇLARIMIZ
r›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 pen-
ceresinin hareketler alan›nda görüntülenir. K ‹ T A P 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üle-
nebilir. Bu dosyalar›n incelenmesiyle sistemin genel durumu veya oluflan hatalar
hakk›nda bilgilere ulafl›labilir.
fiekil 3.12

pgAdmin: Sunucu
durumunu incele-
me.

SUNUCU BAKIMI
PostgreSQL sunucusunun yüksek baflar›mla ve kapasiteyle çal›flmaya devam etme-
si 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, ar-
t›k kullan›lmayan disk alan› hemen boflalt›lmayabilir. Veritaban› yönetim sistemi-
nin, bu tip durumlarda istatistik bilgilerini güncellemesi, yeni durum için gerekli
bilgileri toplamas› ve gereksiz disk alan›n› boflaltmas› gereklidir. Bu ifllemler oto-
matik hale getirilebildi¤i gibi, kullan›c›n›n bafllatmas›yla da gerçeklefltirilebilir. Bu-
nun 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.
3. Ünite - Veritaban› Yönetimi 53

fiekil 3.13
Veritaban› üzerin-
de bak›m iflleminin
(maintenance) se-
çilmesiVeritaban›
üzerinde bak›m ifl-
leminin (mainte-
nance) 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 ifl-
lemi gerçeklefltirirken üç tip yöntem kullan›labilir. Tam (FULL) vakum yap›l-
d›¤›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, son-
ras›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›r-


mak için tablolar hakk›nda istatistiksel veriler tutmaktad›r. Tablolar üzerin-
de yap›lan büyük de¤ifliklikler bu istatistiksel bilgilerin güncelli¤ini yitirme-
sine sebep olur. Bak›m program› analiz seçene¤i ile çal›flt›r›ld›¤›nda ilgili is-
tatistiksel 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 tab-
lodan ç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 (REC-
REATE) seçene¤i ile kullan›ld›¤›nda tablolar üzerinde bulunan indeksler si-
linerek 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 kilit-
lenmesine, 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
Her sistemde olabilece¤i gibi PostgreSQL veritaban› sistemi de çal›flmaz hale gele-
bilir. Bu durum, ço¤unlukla sabit disk gibi donan›m birimlerinin bozulmas›ndan
SIRA S‹ZDE
veya iflletimSIRA S‹ZDE
sistemindeki sorunlardan kaynaklanmaktad›r. Düzenli olarak bak›m›n
yap›lmas› veya sürekli olarak sistemin izlenmesi sistemde verilerin tutuldu¤u dis-
D Ü fi Ü N E L ‹ M kin bozulmas›n›
D Ü fi Ü N E engelleyemez.
L‹M Yaz›l›m veya donan›m sorunlar›ndan dolay› siste-
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 ye-
S O R U S O R U
deklenmesi için pgAdmin üzerinde kullan›labilecek çeflitli araçlar bulunmaktad›r.

D‹KKAT Dikkat: veritaban›


D ‹ K K As›k
T s›k yedeklenmelidir. Aksi taktirde verilerinizi iflletim sistemdeki ve
donan›m birimlerden gerçekleflen sorunlar nedeniyle kaybedebilirsiniz.

N N
SIRA S‹ZDE 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
AMAÇLARIMIZ veritaban› AMAÇLARIMIZ
yedekleme penceresi görüntülenir.

K ‹ T A P K ‹ T A P

TELEV‹ZYON TELEV‹ZYON

‹NTERNET ‹NTERNET
3. Ünite - Veritaban› Yönetimi 55

fiekil 3.15
pgAdmin: Veritaba-
n› 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. Ya-
ni dosya hem üçüncü flah›slar›n eline geçmemeli hem de bir baflka ar›zadan etki-
lenip kaybolmamal›d›r. Örne¤in, veritaban› yedek dosyalar›n› veritaban› sunucu-
sunda 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 ye-
dekler kullan›lamaz duruma gelir.
Yedek alma penceresindeki Biçim (Format) seçeneklerinden S›k›flt›rma (Com-
press) 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 temel-
li 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 iflaret-
lendi¤inde sisteme ait hangi bilgilerin yede¤inin al›naca¤› Yal›n Seçenekleri (PLA-
IN options) grubu alt›nda eriflilebilir hale gelir. Bu grupta s›ras›yla yaln›z veri, yal-
SIRA S‹ZDE
n›z flema, sahipsiz, veritaban› oluflturma, veritaban› silme, tetikleri etkisiz hale ge- SIRA S‹ZDE
tirme gibi seçenekler bulunmaktad›r. Yal›n seçene¤i kullan›larak al›nan yedek dos-
yas› herhangi bir metin düzenleyici program›nda, örne¤in notepad D Ü fi Ü Nyaz›l›m›yla
EL‹M aç›- D Ü fi Ü N E L ‹ M
larak görüntülenebilir. Dosyan›n içerisinde istenilen seçeneklere ait SQL komutla-
r› bulunmaktad›r. Yal›n yedek dosya kullan›larak sistemi geri alma ifllemi dosya
S O R U 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. D‹KKAT D‹KKAT

Veritaban›n› Yedekten Geri Yükleme

N N
SIRA S‹ZDE SIRA S‹ZDE
Veritaban› sisteminde herhangi bir yaz›l›m veya donan›m ar›zas› oldu¤unda, önem-
li 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.
AMAÇLARIMIZ Bunun 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 birleflim-
le 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ür-
mek için öncelikle bir veritaban› oluflturulmal›d›r. Bu ifllem için var olan bir verita-
ban› 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 tu-
fluyla bas›larak Eski Haline Getir (Restore) eleman› seçilerek fiekil 15’teki eski ha-
line getirme penceresi görüntülenir.
fiekil 3.16

pgAdmin: Veritaba-
n› yedek geri yükle-
me ekran›

Öncelikle hangi yedek dosyas› kullan›larak geri yükleme yap›lacaksa bu dos-


yan›n seçilmesi gereklidir. Geri yükleme iflleminin tüm veritaban›n› içermesi ge-
rekmez. 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 ta-
mamlan›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› belge-
lendirmek için pgAdmin içerisindeki raporlama araçlar› kullan›labilir. Bu yöntem-
le istenilen nesne ile ilgili bilgiler belgelendirilmifl olur.
Az önce oluflturulan AUDB veritaban›n›n özellikleriyle ilgili bir rapor olufltura-
l›m. Raporlama ifllemine bafllamak için Nesne ‹zleme bölümünde (Object Browser)
3. Ünite - Veritaban› Yönetimi 57

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 In-
ternet 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 (properti-
es) raporunun olufl-
turulmas›
58 Veritaban› Uygulamalar›

fiekil 3.18

Veritaban› özellik-
lerinin görüldü¤ü
özellikler raporu
3. Ünite - Veritaban› Yönetimi 59

Özet

N
A M A Ç
PostgreSQL’in yönetim paneli olan pgAdmin N
A M A Ç
Veritaban› sunucusunda yap›labilecek bak›m ifl-
1 program›nda sa¤lanan özellikleri kullanabile- 4 lemlerini gerçeklefltirebileceksiniz.
ceksiniz. Veritaban›, sunucu sisteminde çal›flan bir yaz›l›m
pgAdmin, PostgreSQL yaz›l›m›n›n yönetimi için ve verilerin tutuldu¤u dosyalardan oluflur. Baz›
kullan›lan programd›r. Veritaban› ifllemlerini gör- durumlarda, veri dosyalar› içinden silinen veriler
sel olarak yapmam›z› sa¤lar. pgAdmin görsel ya- nedeniyle boflal›r ve içinde arama yapmak ya-
p›lan ifllemleri SQL diline çevirerek çal›flt›r›r. vafllar. Bu nedenle, dosyalar›n VACUUM denilen
pgAdmin yaz›l›m› çal›flt›r›ld›¤›nda, program pen- bir ifllemle daha küçük hale getirilmesi ve gerek-
ceresi üzerinde menü, nesne izleyicisi, nesnele- siz bilgilerin silinmesi gerekebilir.
rin özelliklerini gösteren özellikler ve SQL pa-
nosu bölümleri görülür. Nesne izleyicisi, pgAd- N
A M A Ç
Veritaban›n›n tamam›n› veya bir k›sm›n› yedek-
min taraf›ndan idare edilen veritabanlar›n› ve 5 leyebilecek, yedeklerden veritaban›n› yeniden
bunlar›n alt›ndaki nitelikler üzerinde gezinmemi- oluflturabileceksiniz.
zi sa¤lar. Herhangi bir nesne üzerine t›klanarak Yedekleme ifllemi, verilerin kaybolmas›n› engel-
seçilirse, özellikler bölümünde nesneyle ilgili bil- leyen temel ifllemlerden biridir. Günümüzde, ve-
giler görülebilir. SQL panosu, görsel yap›lan iflle- ritaban› yöneticileri veritaban›nda yer alan tablo-
rin SQL karfl›l›¤›n› görmemizi sa¤lar. lalar› s›k aralarla yedeklerler ve yedek dosyalar›
baflka sistemlere tafl›rlar. Sistemde olabilecek bir

N
A M A Ç
Herhangi bir veritaban› yönetim sistemiyle bir-
likte gelen yönetim yaz›l›m›ndaki özellikleri kul-
ar›zada yedek dosyalar›nda yer alan veriler tek-
rar veritaban›na yüklenir.
2

N
lanabileceksiniz.
Bütün veritaban› yönetim sistemlerinin yönetim Veritaban›yla ilgili çeflitli raporlar› oluflturabile-
A M A Ç
yaz›l›mlar› bulunmaktad›r. pgAdmin program›n- 6 ceksiniz.
da oldu¤u gibi, SQL komutlar›n›n yaz›lmas›, ye- Veritaban›nda raporlama, veritaban›yla ilgili bil-
ni veritaban› oluflturulmas›, yeni tablolar eklen- gilerin al›nmas› ve saklanmas›d›r. Veritaban›n›n
mesi gibi ifllemler yönetim yaz›l›mlar› sayesinde temel ifllevi, veritaban›n›n yap›s›na dayan›r. Her
gerçeklefltirilebilmektedir. Yönetim programlar›- tablonun yap›s›n›n ve bu tabloyu oluflturan SQL
n›n bir di¤er özelli¤i de, veritaban›n›n sa¤l›kl› fle- komutunun raporlanmas›, veritaban› yöneticile-
kilde kullan›labilmesi için rutin bak›m ifllemleri- rine büyük kolayl›k sa¤lamaktad›r.
nin yap›labilmesini sa¤lamas›d›r.

N
AM A Ç
Yönetim program› üzerinden yeni bir veritaba-
n›, veritaban› içine yeni tablolar, tablolara yeni
3
kolonlar (alan) ekleyebileceksiniz.
‹liflkisel veritabanlar› içindeki temel veri öbekle-
ri 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 olufltu-
rulacak tabloyla ayn› ismi tafl›yamaz. Tablo olufl-
turulurken, kolonlar›n her birinin ismi ve veritip-
leri belirlenmelidir. E¤er istenirse, tablo alanla-
r›ndan biri her kay›t için eflsiz bir numara içer-
mesi için birincil anahtar olarak tan›mlanabilir.
60 Veritaban› Uygulamalar›

Kendimizi S›nayal›m
1. Afla¤›dakilerden hangisi pgAdmin program›n›n gö- 5. PosgreSQL veritaban›nda tablo oluflturmakla ilgili
revlerinden biri de¤ildir? afla¤›daki ifadelerden hangisi do¤rudur?
a. Veritaban› yedeklemesi a. Tablo isimlerinde küçük-büyük karakter ayr›m›
b. Tablo oluflturma yap›lmaktad›r.
c. Kullan›c› silme b. Bir veritaban›ndaki bütün tablolar ayn› tablo ala-
d. Tablolar›n bulundu¤u disk hatalar›n› onarma n› içerisinde bulunmal›d›r.
e. Kay›t dosyalar›n› inceleme c. Tablo isimlerinde 25 karakterlik uzunluk s›n›r›
bulunmaktad›r.
2. pgAdmin ile ilgili afla¤›daki ifadelerden hangisi do¤- d. Oluflturulan tabloya yaln›z tabloyu oluflturan kul-
rudur? lan›c›n›n eriflim hakk› vard›r.
a. pgAdmin, PostgreSQL veritaban›n›n temel bir e. Tablo oluflturulma ekran›nda bofl girifl alan› b›-
bileflenidir. rak›lamaz.
b. Veritaban› eriflimi için pgAdmin program›n› aç-
mak yeterlidir. 6. Tablo oluflturma iflleminde oluflturulacak kolonlarla
c. pgAdmin ile uzaktaki veritaban› sunucular› da ilgili afla¤›daki ifadelerden hangisi do¤rudur?
yönetilebilir.
d. pgAdmin, veritaban› üzerinde yap›lan de¤iflik- a. Kolonlar isim s›ras›na göre oluflturulmal›d›r.
likleri do¤rudan dosya sistemi üzerinde yapar. b. Kolon isimlerinin ilk karakterleri kolonlar›n s›ra
e. pgAdmin, veritaban› nesnelerini kullan›c›dan numaras› olarak verilmesi bir zorunluluktur.
gizleyerek güvenli¤i artt›r›r. c. Tablo oluflturulduktan sonra yeni bir kolon ek-
leme ifllemi gerçeklefltirilebilir.
3. Afla¤›dakilerden hangisi pgAdmin ile oluflturulan d. Tamsay› tipinde kolon oluflturulurken uzunluk
gruplar›n özelliklerinden biri de¤ildir? bilgisi girilebilecek en büyük tam say›y› belirle-
a. Sistemde birden fazla grup olabilir. mede kullan›l›r.
b. Her bir gruba farkl› yetkiler atanabilir. e. Kolon özelliklerinde “Not Null” seçildi¤inde tab-
c. Bir kullan›c› birden fazla grupta yer alabilir. loda o kolona ait sat›rlara varsay›lan olarak s›f›r
d. Bir grupta birden fazla kullan›c› bulunabilir. de¤eri atan›r.
e. Bir veritaban› üzerinde en fazla bir grup yetki-
lendirilebilir. 7. pgAdmin ile PostgreSQl veritaban› sunucusu duru-
munu izleme arayüzünden afla¤›daki bilgilerden hangi-
4. Yeni bir veritaban› oluflturlurken seçilen özelliklerle sine ulafl›lamaz?
ilgili afla¤›daki ifadelerden hangisi yanl›flt›r? a. Aktivite
a. Veritaban› ismi, oluflturulacak veritaban›n› sis- b. Günlük dosyalar›
temdeki di¤er veritabanlar›ndan ay›rt etmek için c. Tablolar›n kaplad›¤› disk alan›na
kullan›l›r. d. Kilitlere
b. Veritaban› oluflturulduktan sonra oluflturma ek- e. Birim-ifllemlere
ran›nda girilen baz› özellikler de¤ifltirilebilir.
c. Veritaban›na farkl› dillerde veri girifli yap›lacak-
ca 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.
3. Ünite - Veritaban› Yönetimi 61

Kendimizi S›nayal›m Yan›t Anahtar›


8. Sunucu bak›m› ifllemleriyle ilgili afla¤›daki ifadelerden 1. d Yan›t›n›z yanl›fl ise “pgAdmin III Program›na
hangisi yanl›flt›r? Genel Bak›fl” bafll›kl› bölümü tekrar inceleyiniz.
a. Vakum’la, tablolarda kullan›mayan alanlar bo- 2. c Yan›t›n›z yanl›fl ise “pgAdmin III Program›na
flalt›l›r. Genel Bak›fl” bafll›kl› bölümü tekrar inceleyiniz.
b. Analiz ifllemiyle, tablolar ile ilgili istatistiki bilgi- 3. e Yan›t›n›z yanl›fl ise “pgAdmin III Program›na
ler güncellenir. Genel Bak›fl” bafll›kl› bölümü tekrar inceleyiniz.
c. Yeniden indeksleme ifllemiyle, var olan indeks- 4. e Yan›t›n›z yanl›fl ise “Yeni Veritaban› Oluflturma”
ler silinir ve yerlerine sistemin önerdi¤i yeni in- bafll›kl› bölümü tekrar inceleyiniz.
deksler otomatik olarak oluflturulur. 5. a Yan›t›n›z yanl›fl ise “Tablo Oluflturma” bafll›kl›
d. Dondurma ifllemiyle, salt okunur tablolarda iyi- bölümü tekrar inceleyiniz.
lefltirme yap›l›r. 6. c Yan›t›n›z yanl›fl ise “Tablo Oluflturma” bafll›kl›
e. Yeniden oluflturma ifllemiyle, var olan indeksler bölümü tekrar inceleyiniz.
silinir ve ayn› flekilde tekrar oluflturulur. 7. c Yan›t›n›z yanl›fl ise “PostgreSQL Sunucu
Durumu ‹nceleme” bafll›kl› bölümü tekrar ince-
9. Veritaban› yedeklemeyle ilgili afla¤›daki ifadelerden leyiniz.
hangisi do¤rudur? 8. c Yan›t›n›z yanl›fl ise “Sunucu Bak›m›” bafll›kl› bö-
a. Veritaban› yede¤i fazla yer tutmamas› için ancak lümü tekrar inceleyiniz.
ihtiyaç oldu¤uda al›nmal›d›r. 9. d Yan›t›n›z yanl›fl ise “Veritaban› Yedekleme”
b. Veritaban› yedek dosyalar› h›zl› eriflim için veri- bafll›kl› bölümü tekrar inceleyiniz.
taban› sunucusu ile ayn› donan›m üzerinde bu- 10. c Yan›t›n›z yanl›fl ise “Raporlama” bafll›kl› bölü-
lunmal›d›r. mü tekrar inceleyiniz.
c. Veritaban› yede¤ini tüm kullan›c›lara vermek ve-
rinin 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 fi-
ziksel makinede geri alma ifllemi yap›labilir.
e. Veritaban›n› eski haline getirirken yede¤i al›n- S›ra Sizde Yan›t Anahtar›
m›fl tüm nesnelerin beraber geri al›nmas› zorun- S›ra Sizde 1
ludur. fiekil 5’teki pencere üzerinde, arkadafllar›n›z›n isimle-
rin, ve telefon numaralar›n› tutan veritaban›n›n ismini
10. Raporlama ifllemiyle ilgili afla¤›daki ifadelerden han- giriniz. SQL sekmesinden, veritaban› oluflturmak için
gisi yanl›flt›r? gerekli SQL program›n› görünüz.
a. Raporlama seçenekleri içerisinde kullan›c› akti-
viteleri listeleme bulunmaktad›r.
b. Raporlama sistemin dokümantasyonunun ç›kar-
t›lmas›nda yararl› bir araçt›r.
c. Raporlama araçlar› kullan›larak sistem eriflim gü- Yararlan›lan ve Baflvurulabilcek
venli¤i art›r›l›r. Kaynaklar
d. Raporlama seçenekleri içerisinde sunucu özel- pgAdmin web sayfas›.
likleri listeleme bulunmaktad›r. http://www.pgadmin.org/.
e. Birden fazla biçimde rapor ç›kt›s› al›nabilir. PostgreSQL resmi sitesi.
http://www.postgresql.org/docs/.
PostgreSQL Guide.
http://www.postgresqlguide.com/.
VER‹TABANI UYGULAMALARI

4
Amaçlar›m›z

N
Bu üniteyi tamamlad›ktan sonra;

N
‹liflkisel veritaban›n›n hangi uygulamalarda yararl› oldu¤una karar verebileceksiniz.

N
‹liflkisel veritaban› uygulamalar›n› di¤er veritaban› türlerinden ay›rabileceksiniz.
Bir veritaban›n› oluflturan temel bileflenleri listeleyebilecek iliflkisel veritaban›

N
yönetim sisteminin nas›l çal›flt›¤›n› aç›klayabileceksiniz.

N
Temel SQL sorgular› kurabileceksiniz.
Veritaban› tasarlarken, temel normalizasyon kurallar›n› uygulayabileceksiniz.

Anahtar Kavramlar
• ‹liflkisel veritabanlar› • SQL
• Tablo • Birincil anahtar
• Kay›t • Yabanc› anahtar
• Kolon • Normalizasyon
• Çokuzlu veri

‹çerik Haritas›

• 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‹
‹liflkisel Veritabanlar› • YAPISAL SORGU D‹L‹NE (SQL)
Veritaban› ve Veritaban› G‹R‹fi
Uygulamalar› Tasar›m› • 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‹ZASYO-
NUYLA 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 depola-
mak 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›klafl-
mas›, tarihsel süreç içinde yeni veritaban› modellerinin ortaya ç›kmas›na neden ol-
mufltur. ‹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 kurul-
maktad›r.
Bu bölümde iliflkisel veritabanlar›n›n temel özellikleri incelenecek ve SQL di-
lindeki komutlarla temel veritaban› ifllemlerinin nas›l yap›laca¤› anlat›lacakt›r. Ay-
r›ca, iliflkisel veritabanlar›n› etkin bir flekilde tasarlayabilmek için, tekrar eden ve-
rilerin 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 fle-
kilde grupland›r›larak depolanmas›na izin verir. ‹liflkisel veritabanlar›nda veriler
tablolar halinde gruplan›r. Tablolar aras›ndaki iliflkiler, tablolarda bulunan kolon-
lar›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 iliflkilendi-
rerek 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 bilgisayar-
lardan 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) belir-
lenebilir. Yine bu sistemler veritaban› üzerindeki tablolar›n yedeklenmesi, kopya-
lanmas› 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 olmufl-
tuk. Ü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 Sis-
temi ad› verilir. Ticari olarak sunulan çok say›da iliflkisel veritaban› yönetim siste-
mi bulunmaktad›r. Bunlardan baz›lar›, Oracle, IBM DB2, Microsoft SQL Server,
PostgreSQL, MySQL, Apache Derby, Firebird, FrontBase, HSQLDB, Informix Dyna-
mic Server, Ingres, InterBase, Microsoft Access, Microsoft Visual Foxpro, Msql,
Openbase, Panaroma, SmallSQL, SQLLite, Teradata, TxtSQL, Unidata ve Valenti-
na’d›r. Bu sistemlerin hepsinin kendine özgü özellikleri, avantajlar› ve dezavantaj-
lar› 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 ser-
ver, Microsoft Access ve FoxPro gibi sistemler sadece Microsoft iflletim sistemlerin-
de 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 flekil-
de 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 iliflki-
sel 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 ka-
y›t ad› verilir. Bir tabloda bulunan kay›tlar›n hepsinin biçimi ayn›d›r. fiekil 1’de ör-
nek iliflkisel veritaban›n›n yap›s› verilmifltir. Bu yap› üzerinden giderek temel veri-
taban› bileflenleri ayr›nt›l› flekilde aç›klanacakt›r. ‹liflkisel veritaban› yönetim sis-
temlerinde genellikle tek bir veritaban› bulunmaz. Çünkü, bu sistemler birden faz-
la 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 ol-
mak 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 (at-
tribute) ad› verilir. Bu özelliklerin her bir sat›rdaki karfl›l›¤›na ise alan (field) ad›
verilir.
4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m› 65

fiekil 4.1
Örnek bir
Ulkeler Tablosu iliflkisel
veritaban›
UlkeID UlkeAdi yap›s›
1 A.B.D.
90 Türkiye
93 Afganistan

Tablo Ad›: Ulkeler Sehirler Tablosu


SehirID UlkeID SehirAdi
1 93 Kabil
Veritaban›
2 1 New York City
Ad›: Tablo Ad›: Sehirler
CografiBilgiler 3 90 Ankara

Tablo Ad›: Daglar Daglar Tablosu


DagID UlkeID DagAdi
25 93 Hindikufl Da¤lar›
796 1 McKinley Da¤›
1288 90 A¤r› Da¤›
1289 90 Nemrut Da¤›

Tablolardaki kay›tlar›n her biri matematiksel aç›dan çokuzlu veri (tuple) halin-
dedir. 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, Sehi-
rAdi} biçiminde olmal›d›r. Bu biçime uygun olan kay›t örnekleri olarak, {1, 93, “Ka-
bil”} ve {2, 1,”New York City”} verilebilir. Çokuzludaki alanlar, tablodaki kolonlar-
la 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 ta-
n›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. Ör-
ne¤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› fle-
kilde Daglar tablosundaki DagAdi sütunu Daglar tablosunun 3’üncü kolonu-
na 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 ya-
p›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 bir-
den fazla veritaban›n› yönetebilecek flekilde tasarlan›rlar. Gerek duyuldu-
¤unda, yeni bir veritaban› eklenebilir.
• Kullan›c› oluflturma: ‹liflkisel veritaban› yönetim sistemlerinde birden faz-
la kullan›c› oluflturabilir ve kullan›c›lar›n haklar› veritaban› ve tablo düzeyin-
de belirlenebilir.
• Temel tablo ifllemleri: Tabloya kay›t ekleme, kay›t düzeltme ve silme, sor-
gulama gibi ifllemler tablolar üzerinde yap›labilen temel ifllemlerdir.
• Görüntü (View) oluflturma: Bir veya birden fazla tablodaki verilerin bir-
lefltirildi¤i, ve tek bir tabloymufl gibi gösterildi¤i veritaban› özelli¤ine görün-
tü (view) ad› verilir. ‹liflkisel veritaban› yönetim sistemleri çok say›da görün-
tü oluflturulmas›na ve yönetilmesine olanak sa¤lamaktad›r.
• Kullan›c›lar›n uzak bilgisayarlardan veritabanlar›na ve tablolara erifl-
melerine 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 bulu-
nan veritabanlar›na ve tablolara kullan›c› baz›nda eriflim yetkileri tan›mlana-
bilir.
• 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› sistem-
lerde 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 üzerin-
de 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 ve-
rilere h›zl› eriflim sa¤layabilmek için kullan›lan yöntemdir. ‹liflkisel veritaba-
n› yönetim sistemleri tablolar üzerindeki çeflitli kolonlardaki veriler için in-
deks 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 sis-
temlerinin ço¤unlu¤u taraf›ndan desteklenmektedir.
• Veri optimizasyonu: ‹liflkisel veritabanlar›nda veriye en h›zl› flekilde ula-
flabilmek 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 ve-


ritabanlar›n›n ve tablolar›n yedeklerini oluflturabilir ve herhangi bir felaket
senaryosunun gerçekleflmesi durumunda veritabanlar›n› yedeklendikleri an-
daki 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 bulu-
nacak 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, ta-
n›mlay›c›, say› veya özel bir karakter olabilir. Kelimeler aras›nda boflluk b›rak›labi-
lir 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 kelime-
ler, 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›m-
lay›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 SIRA S‹ZDE


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

SQL dilinde arka arkaya yaz›lan komutlar›n kar›flmamas› için aralar›nda


D ‹ K K A noktal›
T virgül D‹KKAT
kullan›lmal›d›r. Noktal› virgül iflareti, komutun bitti¤ini gösterir. S O R U S O R U

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

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

TELEV‹ZYON TELEV‹ZYON
‹NTERNET ‹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 verile-


rin tipi, veritipi bölümünde tan›mlanmal›d›r. Veritipleri, VTYS’lerin anlad›¤› tipler-
den 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 ko-
mutu 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 ifa-
desi, 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 ala-
n›ndaki de¤er 5’ten büyükse, UlkeID alan›ndaki de¤erleri getiren sorgu flöyledir:

SIRA S‹ZDE Sehirler tablosundan,


SIRA S‹ZDE flehir ad› ‘Ankara’ olan kayd›n sehirID de¤erini getiren SQL komu-
1 tunu yaz›n›z.

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

INSERT INTO Ulkeler


VALUES (99, ‘Güney Afrika Cumhuriyeti’);

N N
SIRA S‹ZDE SIRA S‹ZDE

AMAÇLARIMIZ AMAÇLARIMIZ

SIRA S‹ZDE SehirlerSIRA


tablosuna
S‹ZDE yeni bir kay›t ekleyen SQL komutunu yaz›n›z.
2
K ‹ T A P K ‹ T A P
D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M

TELEV‹ZYON TELEV‹ZYON
S O R U S O R U

D‹KKAT D‹KKAT
‹NTERNET ‹NTERNET
4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m› 69

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 ka-
y›tlar›n hangi koflula göre seçilece¤ini gösterir.

‹smi ‘Güney Afrika Cumhuriyeti’ olan ülkenin ismini ‘Güney Afrika’SIRA


olarak de¤ifltiren SQL
S‹ZDE SIRA S‹ZDE
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 bir-
S O R U 99 olan ülke-
likte kullan›ld›¤›nda, koflula uygun olan kay›tlar› siler. Ülke numaras› S O R U
nin kayd›n› silmek için afla¤›daki SQL komutu kullan›labilir:
D‹KKAT D‹KKAT
DELETE FROM Ulkeler WHERE UlkeID = 99;

N N
SIRA S‹ZDE SIRA S‹ZDE

Tablo birlefltirme (JOIN): SELECT komutu ile birlikte kullan›lan bu yap› saye-
sinde birden fazla tablodaki birbiriyle iliflkili verilerin birlefltirilerek
AMAÇLARIMIZ 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 ifa-
delerini kullanmakt›r. Birbiriyle iliflkili tablolar›n tek bir tabloK olarak
‹ T A Pgösterilmesi, K ‹ T A P
ilerideki ünitelerde ayr›nt›l› bir flekilde anlat›lacakt›r.
Tablo yap›s›n› de¤ifltirme (ALTER): Bu ifllem veritaban›nda tan›ml› olan tab-
lolar›n yap›s›n›n de¤ifltirilmesini sa¤lar. Bu ifllemi var olan tabloya
T E L E V ‹ Z Yyeni
O N kolonlar TELEV‹ZYON
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.
Alanlar›n özelliklerinde yap›lmas› istenen de¤iflikliklerinde ALTER ‹ N T E R NTABLE
ET komu- ‹NTERNET
tu kullan›labilmektedir.

ALTER TABLE Ulkeler ADD COLUMN nufus integer;

UlkeIsim alan›n›n maksimum 50 karakterlik uzunlukta olacak flekilde “cha-


racter varying” tipinde tan›mland›¤›n› düflünelim. Maksimum uzunlu¤u 100 yap-
mak için gerekli komut flöyle olmal›d›r:

ALTER TABLE Ulkeler ALTER COLUMN UlkeIsim SET DATA TYPE


character varying (100);

Sehirler tablosundaki SehirAdi alan›ndaki maksimum karakter


SIRA say›s›n›
S‹ZDE 150’ye ç›- SIRA S‹ZDE
karacak SQL komutunu yaz›n›z. 4
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 veritaba-
n›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-


D Ü fi Ü N E L ‹ M ¤›daki SQLD Ükomutunda
fi Ü N E L ‹ M oldu¤u gibi silinebilmektedir.

DROP DATABASE CografiBilgiler;


S O R U S O R U

D‹KKAT DROP ifllemini


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

N N
SIRA S‹ZDE SIRA S‹ZDE
B‹R ‹L‹fiK‹SEL VER‹TABANI TASARIMI VE
OLUfiTURMA
AMAÇLARIMIZ 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 flekil-
K ‹ T A P K ‹ 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.
TELEV‹ZYON T E L E Vdikkat
Tasar›mda ‹ Z Y O N edilmesi gereken bir di¤er özellik ise gruplanan veriler aras›n-
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.
T E R N E Tbulundu¤u ülkenin UlkeID de¤eri referans gösterilerek, tablolar
Bu sütunda‹ Nflehrin
aras›nda iliflki kurulmal›d›r. Bu alandaki bilgiler arac›l›¤›yla Sehirler ve Ulke-
‹NTERNET

ler 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 ko-
lonunda, her bir ülke için eflsiz bir ülke kodu verilmektedir. ‹kinci kolonda ise ül-
kelerin isimleri tutulmaktad›r. Bu tablonun tasar›m yap›s› Tablo 1’de verilmifltir. Ül-
kelerin nüfuslar›, yüzölçümleri gibi özellikler de bu tabloya eklenebilirdi, fakat ta-
sar›m›n basit olmas› aç›s›ndan Ulkeler tablosu sadece ülke isimlerini tutacak fle-
kilde 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 Sütun Ad› Sütun Tipi
Ulkeler tablosunun
yap›s› UlkeID(Birincil Anahtar) integer
UlkeAdi varchar(50)
Tablo Ad›: Ulkeler
4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m› 71

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

UlkeID UlkeAdi Tablo 4.2


Ulkeler tablosunun
1 A.B.D. örnek içeri¤i
20 M›s›r
32 Belçika
49 Almanya
90 Türkiye
93 Afganistan
... ...

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¤u-
nu 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 dizile-
rinin 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 tablo-
sundaki 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 Tablo 4.3


Sehirler tablosunun
SehirID((Birinci Anahtar) integer yap›s›
UlkeID((Yabanc› Anahtar) integer
SehirAdi varchar(50)
Tablo Ad›: Sehirler
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 çeflit-
li ö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 sa-
hip olan flehirlerde UlkeID de¤erlerinin de¤iflmesini sa¤layabiliriz. Yabanc› anah-
tar kavram› üzerinde ünitenin ilerleyen k›s›mlar›nda detayl› olarak durulacakt›r.

Daglar Tablosu
Daglar tablosu yap› olarak Sehirler tablosunun benzeridir. Bu tablo ülkeler-
de 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 fle-
kilde bir tamsay› de¤er tutulur. Bunu garanti alt›na almak için DagID alan› birin-
cil 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 nu-
mara 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 bilgi-
sini 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 Sütun Ad› Sütun Tipi


Daglar tablosunun
yap›s› DagID((Birincil Anahtar) integer

UlkeID((Yabanc› Anahtar) integer

SehirAdi varchar(50)

Tablo Ad›: Daglar


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

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ütu-


nunun yan›ndaki Yabanc› Anahtar ibaresidir. Bu ibare Daglar tablosundaki Ul-
keID 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¤iflmesi-
ni 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 ta-
n›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üven-
lik 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› ör-
neklerinde oldu¤u gibi do¤al flekilde birincil anahtar›n tan›mlanamad›¤› durumlar-
da, 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›mlanma-
s›d›r. Bu flekilde, yeni bir kay›t eklenmesi s›ras›nda o kolon için tablodaki di¤er ka-
y›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 iste-
nirse, 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ü Ulke-
ID 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.
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›m-
lamalar› iliflkisel veritaban›n› “iliflkisel” olmas›n› sa¤layan en temel unsurlardan bi-
ridir. Yabanc› anahtar oluflturmak iste¤e ba¤l›d›r. Örnek olarak A tablosunun Birin-
cil Anahtar›’n›n B tablosunda Yabanc› Anahtar olarak kullan›labilmesi için B tablo-
sunu olufltururken FOREIGN KEY ve REFERENCES anahtar sözcü¤ü ile A tablosu-
nun 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¤u-
nu gösterir. REFERENCES anahtar sözcü¤ü ise ilgili yabanc› anahtar›n referans gös-
terilece¤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 tablosun-
da birincil anahtar oldu¤u için bu tan›mlamay› yapabiliriz. Bir baflka deyiflle birin-
cil anahtar olmayan alanlar baflka tablolarda yabanc› anahtar olarak tan›mlanamaz.
Yabanc› anahtar tan›mlamalar› bizi çeflitli zorluklardan kurtar›r. Yabanc› Anah-
tar 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 tu-
tarl›l›¤›n› sa¤lamakt›r. Ayr›ca, do¤ru yap›lm›fl yabanc› anahtar atamalar› bizi gerek-
siz 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 girile-
mesin.

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 ka-
y›tlar›n da otomatik olarak silinmesini sa¤layal›m.

Bu ifllem için Sehirler tablosu oluflturulurken tablodaki UlkeID de¤eri Ul-


keler tablosunda referans gösterildikten sonra ON DELETE CASCADE komutu-
nun 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 ül- ÖRNEK 4.3
keyi referans gösteren baflka kay›tlar bulunuyorsa silme iflleminin gerçeklefltirilme-
mesini sa¤layal›m.

Bu ifllem için ON DELETE RESTRICT komutunun afla¤›daki SQL komutunda-


ki 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 ÖRNEK 4.4
ü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 Ul-


keler 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 des-
tek sa¤lasa da, veritaban›n›n tasar›m› uygulama gelifltiricilerinin sorumlulu¤unda-
d›r. Uygulama yaz›l›mlar›n›n baflar›s›, arka tarafta kullan›lan veritaban›n›n iyi flekil-
de tasarlanmas›na ba¤l›d›r. Veritaban›nda hangi verilerin depolanaca¤› konusu uy-
gulamay› kullanacak kiflilerin talepleri do¤rultusunda belirlenmekle birlikte, tablo-
lar aras›ndaki iliflkiler ve tablolardaki alanlar›n belirlenmesi ifli programc›lar›n ini-
siyatifindedir. Etkin çal›flan bir veritaban› tasar›m›n›n sistematik olarak gerçekleflti-
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› engelleye-
bilmek 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 ka-
bul görmüfl 5 normalizasyon kural› vard›r. Veritaban› tasar›m› yaparken, bu kural-
lar›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 ta-
nesinden 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 ku-
ral›na ayk›r›d›r. Afla¤›da bu kurala uygun olmayan bir tablo tasar›m› verilmektedir.
Tablo 4.5
Birinci YONETMENID YONETMENADI UYRUK FILM1 FILM2 FILM3
normalizasyon
kural›na uymayan Er Ryan’› Az›nl›k
1 Steven Spielberg A.B.D E.T.
tablo tasar›m› Kurtarmak Raporu

Gelece¤e Forrest
2 Robert Zemeckis A.B.D Mesaj
Dönüfl Gump

Yedi
3 Akira Kurosowa Japonya Yojimbo Rashomon
Samuray

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

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öne-
timini 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önet-
menlerin çektikleri film bilgilerinin kolonlara de¤il de sat›rlara yay›lmas› gereklidir.
Tablo 4.6 YONETMENID YONETMENADI UYRUK FILM
Birinci
normalizasyon 1 Steven Spielberg A.B.D. Er Ryan’› Kurtarmak
kural›na uygun
tablo tasar›m› 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
4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m› 77

YONETMENLER tablosunun içeri¤inin Tablo 6’daki hale getirilmesi, birinci nor-


malizasyon 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 du-
rumda 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 Tablo 4.7


Yonetmenler tablosu
1 Steven Spielberg A.B.D.
ID ve isim tutacak
2 Robert Zemeckis A.B.D. flekilde
oluflturulmufltur.
3 Akira Kurosowa Japonya
... ...
TabloAd›: YONETMENBILGISI

Tablo 4.8
FILMID YONETMENID FILMADI
YONETMENLER
1 1 Er Ryan’› Kurtarmak tablosunun ikinci
k›sm›d›r.
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 YONET-
MENBILGISI tablosundan ilgili yönetmenin kayd›na ulaflmam›z gerekmektedir.
Birinci normalizasyon kural›na uygun olan bu tasar›mda, bir yönetmen için her-
hangi 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. Ör-
ne¤in ana tablodaki UYRUK kolonu böyle bir aland›r. Bu normalizasyon kural› uy-
guland›¤›nda ek bir tablo oluflturulmas›na gerek duyulur. Kural uyguland›¤›nda
tablolar›n içerikleri Tablo 9’da verilmifltir.
78 Veritaban› Uygulamalar›

Tablo 4.9 UYRUKID UYRUKADI


Üçüncü
1 A.B.D.
normalizasyon
kural›na uygun 2 A.B.D.
olarak tan›mlanm›fl
UYRUKBILGISI 3 Japonya
tablosu. ...

UYRUKBILGISI
TabloAd›:U

Tablo 4.10
YONETMENBILGISI YONETMENID YONETMENADI UYRUKID
tablosunun üçüncü
1 Steven Spielberg 1
normalizasyon
kural›na göre 2 Robert Zemeckis 1
ayr›flt›r›ld›ktan
3 Akira Kurosowa 2
sonraki durumu.
... ...
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çin-
den uyruk tablosuna referans gösterilmesi sa¤lanm›flt›r. Bunun sonucunda uyruk
adlar› tek bir tabloda tutulacak ve YONETMENBILGISI tablosundan UYRUK tab-
losuna UYRUKID referans›yla eriflim sa¤lanacakt›r.
4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m› 79

Özet

N
A M A Ç
‹liflkisel veritaban›n›n hangi uygulamalarda ya- N
A M A Ç
Bir veritaban›n› oluflturan temel bileflenleri liste-
1 rarl› oldu¤una karar verebileceksiniz. 3 leyebilecek ve iliflkisel veritaban› yönetim sistemi-
‹liflkisel veritaban› modeli, günümüzde kullan›- nin nas›l çal›flt›¤›n› aç›klayabileceksiniz.
lan bir çok veritaban› uygulamas›nda baflar›yla ‹liflkisel veritaban› sistemlerinde, veriler tablo ad›
kullan›lmaktad›r. Veri tekrar›n› engelleyecek fle- verilen yap›larda tutulur. Her tablo, farkl› say›da
kilde verilerin birbiriyle iliflkili tablolarda tutul- alandan veya di¤er bir deyiflle özellikten oluflur.
mas›, sorgu h›z›n› art›rmakta ve veritaban› per- Tabloya veri girilirken, alanlara karfl›l›k gelen de-
formans›n› yükseltmektedir. ¤erler, o alan›n veri tipinde girilerek kay›tlar olufl-

N
turulur. Farkl› tablolar›n kolonlar› aras›ndaki ilifl-
‹liflkisel veritaban› uygulamalar›n› di¤er verita- kiler, iliflkisel veritaban›n›n en temel tasar›m özel-
AM A Ç

2 ban› türlerinden ay›rabileceksiniz. li¤idir.

N
Hiyerarflik ve a¤ modellerinde, çoktan çoka veri
modellerinde s›k›nt›lar yaflanmakta ve iliflkisel A M A Ç Temel SQL sorgular› kurabileceksiniz.
4
veritaban› modeli daha iyi sonuç vermektedir. SQL (Yap›sal Sorgu dili), 1980’lerde gelifltirilen
Ancak, birbirine ba¤l› binlerce tablonun bulun- ve günümüzde yayg›n flekilde kullan›lan ulusla-
mas› ve çok say›da tabloyu ilgilendiren sorgula- raras› bir standarda dayal› veritaban› sorgu dili-
malarda, örne¤in veri madencili¤i gibi uygula- dir. Veritaban› yönetim sistemlerinin büyük bir
malarda, iliflkisel veritaban› modeli iyi çal›flma- k›sm›, SQL dilini standartlara uygun flekilde des-
maktad›r. Bu nedenle, veri madencili¤i uygula- tekler. SQL diliyle, veritaban› ve içinde tablolar
malar›nda farkl› modeller kullan›lmaktad›r. oluflturulabilir, farkl› koflullara dayal› sorgular ku-
rulabilir, 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¤›dakiler- 5. SQL komutlar›nda kullan›lan SERIAL anahtar kelime-
den hangisiyle sa¤lan›r? sinin ifllevi nedir?
a. ‹ki ayr› veritaban›nda yer alan ve ayn› isimdeki a. Kolonun birincil anahtar olarak kullan›lmas›n›
tablolar›n kullan›lmas›yla sa¤lamak
b. Tablo içinde yer alan kolonlar›n özelliklerine b. Eklenen kay›tlar›n, s›rayla veritaban›na eklen-
göre mek
c. Farkl› tablolarda tekrar eden kay›tlar›n eklenme- c. Yabanc› anahtar de¤erlerinin otomatik olarak
siyle oluflturulmak
d. Farkl› tablolardaki kolonlar aras›ndaki iliflkilerle d. Yeni bir kay›t eklendi¤inde, eflsiz bir say›n›n bir
e. ‹ndeks dosyalar›n›n kullan›lmas›yla kolon için otomatik olarak üretilmesini sa¤la-
mak
2. Veritaban›nda sorgu yapmaya yarayan SQL komutu e. Kolonlara tamsay› de¤erini vermek
afla¤›dakilerden hangisidir?
a. SELECT 6. CREATE TABLE iflleminin içinde yer alan, “FOREIGN
b. UPDATE KEY (UlkeID) REFERENCES Ulkeler(UlkeID)” ifadesi-
c. DROP nin anlam› afla¤›dakilerden hangisidir?
d. INSERT INTO a. Ulkeler tablosunda sadece yabanc› anahtar bu-
e. CREATE lundu¤unu belirtir.
b. Ulkeler tablosundaki UlkeID kolonunun birincil
3. Veritaban›n›n silinmesi için kullan›lan SQL komutu anahtar oldu¤unu gösterir.
afla¤›dakilerden hangisidir? c. Tablo içinde yer alan UlkeID kolonunun, Ulke-
a. DELETE ler tablosundaki UlkeID kolonuyla iliflkili oldu-
b. DROP ¤unu belirtir.
c. UPDATE d. UlkeID alan›n›n yabanc› anahtar ve birincil anah-
d. INSERT INTO tar olarak tan›mland›¤›n› anlat›r.
e. ALTER TABLE e. Ulkeler tablosunda yabanc› anahtar bulunmad›-
¤›n› gösterir.
4. ID de¤erinin iki ayr› tabloda birbiriyle iliflkili flekilde
tutuldu¤uvarsay›m›yla, bir tablodaki bir ID de¤eri de- 7. Çeflitli SQL komutlar›n›n içinde bulunan WHERE
¤iflti¤inde di¤er tabloda yer alan kay›tlardaki ID de¤eri- anahtar kelimesinin ifllevi nedir?
ninde de¤iflmesi için, CREATE TABLE komutunda yer a. Hangi tablo üzerinde ifllem yap›laca¤›n› belirt-
almas› gereken komut afla¤›dakilerden hangisidir? mek
a. ON UPDATE CASCADE b. ‹fllemin yap›lmas› için gerekli koflulu göstermek
b. ON DELETE RESTRICT c. ‹fllemin, hangi veritaban›nda uygulanaca¤›n›
c. ON DELETE CASCADE göstermek
d. ON UPDATE RESTRICT d. Hangi sunucuda ifllemin gerçeklefltirilece¤ini be-
e. ON UPDATE DELETE lirtmek.
e. Hangi kolonlar aras›nda iliflki oldu¤unu göster-
mek.
4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m› 81

8. Veritaban› normalizasyonunun temel amac›


afla¤›dakilerden hangisidir?
a. Uygulama yaz›l›mlar›n›n h›zl› çal›flmas›n› sa¤la-
mak
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›r-
mak
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 in-
teger;

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› azalt-
mak
e. Tablolar› h›zl› bir flekilde yaratabilmek
82 Veritaban› Uygulamalar›

Kendimizi S›nayal›m Yan›t Anahtar› S›ra Sizde Yan›t Anahtar›


1. d Yan›t›n›z yanl›fl ise “Girifl” bafll›kl› bölümü tekrar S›ra Sizde 1
inceleyiniz. “SELECT sehirIID FROM Sehirler WHERE sehirAdi =
2. a Yan›t›n›z yanl›fl ise “Yap›sal Sorgu Diline (SQL) ‘Ankara’ “ komutuyla, Sehirler tablosundan, flehir ad›
Girifl” bafll›kl› bölümü tekrar inceleyiniz. ‘Ankara’ olan kayd›n sehirID de¤erini getirebilirsiniz.
3. b Yan›t›n›z yanl›fl ise “Yap›sal Sorgu Diline (SQL)
Girifl” bafll›kl› bölümü tekrar inceleyiniz. S›ra Sizde 2
4. a Yan›t›n›z yanl›fl ise “Birincil Anahtar (Primary “INSERT INTO Sehirler VALUES (102, 99, ‹stanbul');”
Key) Kavram›” bafll›kl› bölümü tekrar komutuyla Sehirler tablosuna yeni bir kay›t
inceleyiniz. ekleyebilirsiniz.
5. d Yan›t›n›z yanl›fl ise “Bir iliflkisel Veritaban›
Tasar›m›” bafll›kl› bölümü tekrar inceleyiniz. S›ra Sizde 3
6. c Yan›t›n›z yanl›fl ise “Birincil Anahtar (Primary “UPDATE Ulkeler SET UlkeAdi = ‘Güney Afrika’ WHERE
Key) Kavram›” bafll›kl› bölümü tekrar UlkeAdi = ‘Güney Afrika Cumhuriyeti’;” komutuyla
inceleyiniz. istenen ifllem gerçeklefltirilebilir.
7. b Yan›t›n›z yanl›fl ise “Yap›sal Sorgu Diline (SQL)
Girifl” bafll›kl› bölümü tekrar inceleyiniz. S›ra Sizde 4
8. e Yan›t›n›z yanl›fl ise “Yabanc› Anahtar (Foreign “ALTER TABLE Sehirler ALTER COLUMN SehirAdi SET
Key) Kavram›” bafll›kl› bölümü tekrar DATA TYPE character varying(150);” komutuyla istenen
inceleyiniz. ifllem gerçeklefltirilebilir.
9. e Yan›t›n›z yanl›fl ise “Yap›sal Sorgu Diline (SQL)
Girifl” bafll›kl› bölümü tekrar inceleyiniz.
10. c Yan›t›n›z yanl›fl ise “‹liflkisel Veritaban› Yönetim
Sistemlerinin Özellikleri” bafll›kl› bölümü tekrar
inceleyiniz.
4. Ünite - ‹liflkisel Veritabanlar› ve Veritaban› Tasar›m› 83

Yararlan›lan ve Baflvurulabilecek
Kaynaklar
P. Revesz (2010.) Introduction to Databases. New York,
Springer,
G. C. Simsion and G. C. Witt (2005.) Data modeling es-
sentials, 3rd ed, Amsterdam ; Boston: Morgan Kauf-
mann Publishers,
www.vikipedi.org
Seminer.linux.org.tr
Belgeler.linux.org.tr
PostgreSQL dokümanlar› http://www.post-
gresql.org/docs/8.4/
5
VER‹TABANI UYGULAMALARI

Amaçlar›m›z

N
Bu üniteyi tamamlad›ktan sonra;
SQL diliyle ve C++, C# ve Java gibi yordamsal diller aras›ndaki fark› aç›kla-

N
yabileceksiniz.

N
Bir anda yap›lmas› gereken SQL komutlar›ndan oluflan hareketi kurabilecek-

N
siniz.

N
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 • SELECT
• INSERT • UPDATE
• DELETE • Hareket (transaction)
• PL/PgSQL • Tetikler (triggers)

‹çerik Haritas›

• G‹R‹fi
• SQL KOMUTLARI NASIL
ÇALIfiTIRILIR
• SQL KAVRAMLARI
Veritaban› Temel Sol
Kavramlar› ve • SQL VER‹ T‹PLER‹
Uygulamalar› Komutlar› • 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çeklefltir-
mek üzere gelifltirilen standartlaflm›fl bir programlama dilidir. Yazd›¤›m›z SQL ko-
mutlar›yla veritaban› yönetim sistemine ne istedi¤imizi belirtiriz. ‹stedi¤imiz verile- Programlama dillerinin
rin nas›l getirilece¤i, SQL komutlar›nda bulunmaz. Bu anlamda, Java, C#, C ve C++ seviyesi, insan diline olan
yak›nl›¤›yla ölçülür. En
gibi programlama dillerinde yaz›lan programlardaki gibi, yap›lacak ifl ad›mlar ha- yüksek seviyeli programlama
linde, di¤er bir deyiflle, algoritmik olarak belirtilmez. Veritaban› yönetim sistemle- dili insan dilidir. E¤er
bilgisayarlar insan dilini
ri verileri nas›l bulaca¤›n› kendisi belirler. Bu anlamda, SQL dili Java ve C# gibi anlayacak ve insanlar›n
programlama dillerine göre daha üst seviyeli bir dildir. cümlelerle belirtti¤i iflleri
yapabilecek duruma
Bir önceki ünitede, temel SQL komutlar›yla ilgili k›sa bir girifl yapm›fl ve SE- geldiklerinde, günümüzde
LECT, UPDATE, INSERT INTO gibi komutlar› tek tablo üzerine uygulayarak çeflit- kulland›¤›m›z programlama
dillerine gerek
li örnekler vermifltik. Ancak, birden fazla tablodan veri getirilmesi söz konusu ol- duyulmayacakt›r.
du¤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 ünite-
de, temel SQL kavramlar› anlat›ld›ktan sonra yayg›n olarak kullan›lan SELECT, UP-
DATE ve INSERT INTO gibi komutlar›n kullan›m› ayr›nt›l› flekilde ifllenecektir.
Ünitenin içinde verilecek örneklerin uygulanmas› için, Türkiye ‹statistik Kuru-
mu (TÜ‹K) verilerine dayanan ve dört tablodan oluflan örnek bir veritaban› olufl-
turulmufltur. TÜ‹K, Türkiye’yle ilgili istatistikler üreten ve kamuya web sitesi üze-
rinden sunan bir kurumdur. ‹statiksel bilgilere, http://www.tuik.gov.tr/ adresinden
“veritabanlar›” ba¤lant›s›na t›klanarak eriflilebilir. Site, web sayfalar›nda girilen kri-
terlere 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.anado-
lu.edu.tr/kitap/ornek.backup adresinden indirilebilir. ‹lk olarak, pgAd-
min 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.bac-
kup dosyas› seçilerek OK (tamam) tufluna bas›lmal›d›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 cin-
siyete 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 tablosun-
daki id alan›, di¤er tablolarla ortak kullan›lan bir aland›r. Örne¤in, ö¤renim du-
rumunu içeren ilogrdurum tablosunda bulunan ilid de¤eri kullan›larak, il-
ler 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 lisan-
s› derecesine sahip kifli say›s›n›n 4220 oldu¤u anlafl›labilir.
fiekil 5.2
iller ilogrdurum
Örnek veritaban›
yap›s›
id: smallint (PK) durumid: serial (PK)
iladi: character varying(255) ilid: integer
nufus: integer ogrdrmid: integer
nufuserkek: integer sayitoplam: integer
nufuskadin: integer sayierkek: integer
sayikadin: integer

dogumist2008 ogrdurum

ilid: integer (PK) ogrdrmid: integer


aciklama: character varying(255)
sayierkek: integer
sayikadin: integer
5. Ünite - Temel SQL Kavramlar› ve Komutlar› 87

Tablo 5.1
iller iller tablosu örnek
veriler
id iladi nufus nufuserkek nufuskadin

1 Adana 2062226 1029640 1032586


2 Ad›yaman 588475 294213 294262
3 Afyon 701326 348194 353132
4 A¤r› 537665 280000 257665

Tablo 5.2
dogumist2008 2008 y›l›n do¤um
istatistikleri örnek
ilid sayierkek sayikadin veriler
1 19670 40621
2 6169 12718
3 5094 10556
4 6383 13428

Tablo 5.3
ilogrdurum ilogrdurum
tablosunun içeri¤i
durumid ilid ogrdrmid sayitoplam sayierkek sayikadin
1 1 1 148634 29472 119162
2 1 2 398108 197196 200912
3 1 3 480531 235663 244868
4 1 4 211000 111116 99884
5 1 5 84733 51534 33199
. . . ... ... ... ... ... ... ... ... ...
258 26 8 4220 2173 2047
. . . ... ... ... ... ... ... ... ... ...

Tablo 5.4
ogrdurum Ö¤renim durumu
listesi
ogrdrmid aciklama

1 Okuma yazma bilmeyen


2 Okuma yazma bilen fakat bir okul bitirmeyen
3 ‹lkokul mezunu
4 ‹lkö¤retim mezunu
5 Ortaokul ve dengi okul mezunu
6 Lise veya dengi okul mezunu
7 Yüksekokul veya fakülte mezunu
8 Yüksek lisans mezunu
9 Doktora mezunu
10 Bilinmiyor
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 tu-
fluna 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 komu-
tu bulunmaktad›r. SQL komutunu yazmak için, pencerede görünen program› ta-
mamen siliniz (fiekil 4).
fiekil 5.3

pgAdmin SQL
editörünün
seçilmesi

fiekil 5.4

SQL editörü
5. Ünite - Temel SQL Kavramlar› ve Komutlar› 89

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 sekmesi-
nin 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ön-
tem bu kitapta gösterilmeyecektir.
SQL editöründe, “SELECT * from ilogrdurum” komutunu yazd›ktan son-
ra, menüdeki Query eleman›n›n alt›nda “Execute Query” (Sorguyu Çal›flt›r) opsiyo-
nunu 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 pence-
renin 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 talepleri-
ne 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üne-
lim. ‹l yap›lan ilçenin nüfusunun, daha önce ba¤l› oldu¤u il nüfusundan ç›kar›lma-
s› 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, terildi¤i gibi, hareketlerin gerçeklefltirilmesiyle ilgili çal›flt›r›lan SQL komutlar›n›n
hareketin bölünmeyen
(atomic), tutarl› s›ras› flöyledir:
(consistent), izole (isolated) 1. Hareketi bafllatmak için BEGIN komutu kullan›l›r
ve dayan›kl› (durable)
olmas› ve koflullar›n ilk 2. Birden fazla sorgu ve veri de¤iflikli¤i ifllemi arka arkaya yap›l›r.
harfleri bir araya 3. E¤er hata yoksa, di¤er bir deyiflle bütün ifllemler hatas›z gerçeklefltiyse, ha-
reket içinde yer alan ifllemler veritaban›na, COMMIT komutuyla uygulan›r ve
getirildi¤inde ACID (Türkçe
olarak AS‹T) olarak bilinen
koflulu sa¤lamas› gereklidir.
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 ifl-
lemler iptal edilir.

fiekil 5.6

Antalya’n›n
de¤erlerini BEGIN;
de¤ifltiren ve UPDATE iller SET nufus=755427, nufuserkek=374990, nufuskadin=380437 WHERE id = 7;
Alanya ilinin INSERT INTO iller VALUES (82, ‘Alanya’, 102553, 51443, 51110);
bilgilerini COMMIT;
ekleyen
hareket

Kullan›c› Taraf›ndan Tan›mlanan Fonksiyonlar (Functions)


Veritabanlar›nda s›k olarak çal›flt›r›lan komut dizileri, fonksiyon olarak tan›mlana-
bilmektedir. Fonksiyona girdi olarak verilen iki say›y› ekleyen ve toplam› geri dön-
düren ekle() fonksiyonunun SQL dilinde tan›mlanmas› fiekil 7’de gösterilmek-
tedir. 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›fl-
t›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 verita-
ban› alt›ndaki “Functions” bölümünde ekle() fonksiyonu görülecektir (fiekil
8). Bundan sonra, ekle() fonksiyonu, herhangi SQL komutunda kullan›labil-
mektedir.

fiekil 5.7

ekle() fonksiyonu CREATE FUNCTION ekle (integer, integer) RETURNS integer


AS ‘select $1 + $2;’
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
5. Ünite - Temel SQL Kavramlar› ve Komutlar› 91

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 özellik-
lerden biridir. Örne¤in, iller tablosundaki illerden biri silindi¤inde, ilogrdurum
ve dogumist2008 tablolar›ndan da silinen ille ilgili kay›tlar›n kald›r›lmas› gere-
kecektir. 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 komutla-
r›d›r. SQL komutundan önce veya sonra çal›flt›r›lmak üzere iki flekilde tan›mlana-
bilirler. Tetik fonksiyonlar, C dilinde veya PL/pgSQL dilinde yaz›labilirler. Dosya
sisteminde tutulan PL/pgSQL program›n›n, INSERT, UPDATE ve DELETE komutla-
r›n›n herhangi birinin çal›flt›r›lmas›ndan önce tetiklenmesi için yap›lmas› gerekli ta-
n›m fiekil 9’da gösterilmektedir.

fiekil 5.9

CREATE TRIGGER tetik


Tetik özelli¤inin
BEFORE INSERT OR UPDATE OR DELETE ON iller
tan›mlanmas›

FOR EACH ROW EXECUTE PROCEDURE komut();

Tetikler bilgisayarlar›n ve dolay›s›yla veritaban› yönetim sistemlerinin yavafl ol-


du¤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 giri-
len 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 tutu-
lan sat›fl rakam› art›r›l›rsa daha k›sa sürede sonuç elde edilebilir. Tetikler s›k kulla-
n›lan ifllemlerin daha h›zl› yap›lmas›n› sa¤lad›klar› için yayg›n kullan›lan özellikler-
den biridir.
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 komutunda-
ki 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› bir-
lefltirilirse iki yaklafl›m›n da en iyi taraflar› bir araya getirilmifl olur. Verilerin verita-
ban›ndan getirilmesi SQL komutlar›yla yap›l›rken, üzerinde yap›lacak karmafl›k ifl-
lemler için yordamsal özellikler kullan›l›r.
Di¤er veritaban› yönetim sistemleri gibi PostgreSQL de yordamsal dillere (pro-
cedural 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 be-
raber 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 yor-
damsal 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 oluflturul-
mas›
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 flunlar-
d›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. Veri-
nin a¤ üzerinden aktar›lmas›, sunucu sistem içinde verinin transfer edilme-
sine 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:

[ <<etiket>> ]
[ DECLARE
değişken tanımları ]
BEGIN
Komutlar;
END [ etiket ];
5. Ünite - Temel SQL Kavramlar› ve Komutlar› 93

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 ya-
z›lan ve noktal› virgüllerle biten sat›rlardan oluflur. PL/pgSQL programlar› ço¤un-
lukla 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 sa-
y› 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› isim-
de 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 komut-
lar›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çi-
lebilir. 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 “Func-
tions” 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 so-


run, 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›m-
lar›, 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›m-
lar›n›n yükünü azaltmak konusunda son derece baflar›l›d›r. Veritaban› yönetim sis-
temleri içinde kullan›lan yordamsal dillerde programlama yapmak, ancak veriler
üzerinde karmafl›k hesaplamalar gerektiren uygulamalar için yarar sa¤lar. Veritaba-
n› kullanan bir çok uygulama için, VTYS’ne a¤ üzerinden SQL komutlar› göndere-
rek ifllem yapmak yeterli olmaktad›r.

fiemalar (schemas)
PostgreSQL, birden fazla veritaban›n› kullan›c›lara sunabilmektedir. Ancak, her-
hangi 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› bu-
nun yan›na farkl› flemalar da oluflturabilir. fiemalar›n kullan›lmas›ndaki avantajlar
flöyle özetlenebilir:
5. Ünite - Temel SQL Kavramlar› ve Komutlar› 95

• Birden fazla tipteki kullan›c›n›n ayn› veritaban›na birbirlerini etkilemeden


ulaflmas›n› sa¤lamak
• Veritaban› nesnelerini (tablolar, fonksiyonlar, vb) daha kolay idare edebil-
mek için mant›ksal olarak gruplamak
• Ayn› veritaban›nda ifllem yapan farkl› programlar›n yapt›klar› ifllemlerin ka-
r›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 yapar-
ken, sat›n alma bölümü muhasebe flemas›nda tan›ml› olmayan ama kendi flemala-
r›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önetici-
lerine ve uygulama gelifltiricilerine büyük kolayl›k sa¤lar.

pgAdmin penceresinde AUDB veritaban›ndaki “Schemas” alt›nda yerSIRA


alan S‹ZDE
“public” flemas›- SIRA S‹ZDE
n›n yap›s›n› inceleyin. fiema içinde ne yer ald›¤›n› listeleyin. 1
Görüntü (View) 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 S O R U
otomatik olarak uygulamaya al›n›r ve sonuçlar döndürülür. SQL editörü pencere-
sinde “CREATE OR REPLACE VIEW” ifadesiyle afla¤›daki gibi görüntü oluflturu-
labilir: D‹KKAT D‹KKAT

CREATE OR REPLACE VIEW illeri_goster AS

N N
SIRA S‹ZDE SIRA S‹ZDE
SELECT id, iladi from iller;

SQL komutu çal›flt›r›ld›¤›nda, AUDB içindeki genel flemada AMAÇLARIMIZ


(public schema), AMAÇLARIMIZ
“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 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 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 tab-
loya eriflecek di¤er rollere eriflim yetkileri tan›yabilirler. Rol konusu, iflletim siste-
miyle 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, bilgisa-
yardaki 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 alma-
lar› 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, özel-
likle 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‹


Önceki ünitelerde, integer ve character varying gibi veri tiplerini CREA-
TE TABLE komutuyla oluflturulan tablolarda, alan tiplerini tan›mlamak için kulla-
n›l›rken görmüfltük. PostgreSQL çok say›da veri tipini daha desteklemektedir. Tab-
lo 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 gel-
mektedir. Örne¤in, de¤iflken uzunluktaki karakter dizisi character varying
bigint, de¤eri - ismiyle tan›mlanabildi¤i gibi, uzunlu¤a s›n›rland›rma getirerek character var-
9223372036854775808 ve
+9223372036854775807
ying(50) olarak da gösterilebilir.
aras›nda bulunan say›lar› Say› temelli veri tiplerinin bellekte kaplad›¤› alan bayt olarak art›nca çözünür-
tutabilirken, integer lü¤ü de artar. Örne¤in, bigint 8 baytl›k bir say›yken, integer sadece 4 baytl›k-
tipi -2147483648 ve
+2147483647 aras›ndaki
de¤erleri alabilir.
5. Ünite - Temel SQL Kavramlar› ve Komutlar› 97

t›r. Sekiz baytl›k bigint veri tipinde tutulabilen maksimum say›, integer’a gö- numeric ve decimal
re çok daha büyüktür. numeric ve decimal tipindeki de¤erlerin çözünürlü¤ü
tipindeki tan›ml› alanlara
konulabilecek en küçük ve
kullan›c› taraf›ndan belirlenebilmektedir. en büyük de¤erleri
bulunmamaktad›r. Kullan›c›
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,
istedi¤i aral›kta de¤er
tan›mlayabilmektedir.
point ve polygon tipleri kullan›larak, geometrik nesnelerin bulundu¤u harita- Ancak, bu tiplerdeki
de¤iflkenler üzerinde ifllem
lar ve co¤rafi modeller oluflturulabilir. yapmak real ve
Zaman dilimi (time zone), her ülkenin yer ald›¤› boylama göre olan saat dilimini double precision
biçimlerine göre daha
göstermektedir. Örne¤in, ayn› anda, Almanya’daki saatle Türkiye’deki saat aras›nda yavaflt›r.
1 saat fark olmaktad›r. Uluslararas› ifller yapan bir firman›n veritaban›nda, ifllem za-
man›n›n kaydedilmesi için sabit bir zaman diliminin referans al›nmas› gereklidir. ‹fl-
lem zaman›n›n tutulaca¤› alan›n tan›mlanmas›nda, Türkiye saatine göre ifllem yap›l-
d›¤›n› gösterebilmek için timestamp with time zone ifadesi kullan›lmal›d›r.

Veri tipi ismi Di¤er ismi Aç›klama Tablo 5.5


PostgreSQL’de geçerli
bigint int8 iflaretli 8 baytl›k say› 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 Tarih tutan veri tipi
double precision float8 8 bayttan oluflan gerçek say›
inet ‹nternet IP adresi
integer 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 bigserial,
isim varchar(20),
nufus int,
ekonomikkatki money,
ilcesayisi int4,
universitesayisi int2,
nufusyuzde 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›mlayabi-
leceklerini daha önceki bölümlerde görmüfltük.
Mant›ksal özellikteki AND, OR ve NOT, sorgularda en yayg›n kullan›lan iflleçler-
dendir. Örne¤in, iller tablosunda, nüfusu 500 bin ve 1 milyon aras›nda olan il-
lerin getirilmesi için kullan›labilecek sorgu flöyle kurulabilir:

SELECT * FROM iller WHERE nufus>500000 AND


nufus<1000000;

SIRA S‹ZDE Nüfusu 500 bin


SIRAveS‹ZDE
1 milyon aras›nda olan illerin say›s›n› pgAdmin program› üzerinden bu-
2 lunuz.

D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M
PostgreSQL’de tan›ml› karfl›laflt›rma iflleçleri Tablo 6’da gösterilmektedir. Bu ifl-
leçler kullan›larak karmafl›k sorgular kurulabilir. Tablo 7’de aritmetik iflleçler ve
S O R U Tablo 8’de SQL’de
S O R U s›k kullan›lan fonksiyonlar görülmektedir.
iller tablosunda yap›lan sorguda, ‹stanbul ili d›fl›ndaki, nüfuslar› bir milyon-
dan fazla olan illerin nüfuslar›n›n toplam› flöyle bulunabilir:
D‹KKAT D‹KKAT
SELECT SUM(nufus) FROM iller WHERE id<>34 AND
nufus>1000000;

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

SIRA S‹ZDE SIRA S‹ZDE


K ‹ T A P pgAdmin kullanarak,
K ‹ T A P‹stanbul ili d›fl›ndaki, nüfuslar› 500 binden fazla olan illerin nüfus-
3
lar›n›n toplam›n› bulunuz.
D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M
TELEV‹ZYON TELEV‹ZYON
S O R U S O R U

‹ NDT‹EKRKNAETT ‹ NDT‹EKRKNAETT

N N
SIRA S‹ZDE SIRA S‹ZDE

AMAÇLARIMIZ AMAÇLARIMIZ
5. Ünite - Temel SQL Kavramlar› ve Komutlar› 99

‹flleç Aç›klama Tablo 5.6


karfl›laflt›rma iflleçleri
< Küçüktür
> Büyüktür
<= Küçüktür veya eflittir
>= Büyüktür veya eflittir
= Eflittir
<> Farkl›d›r
!= Farkl›d›r

‹flleç Aç›klama örnek Sonuç Tablo 5.7


Aritmetik iflleçler
+ 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 sola kayd›rma 1 << 4 16

>> Bit olarak sa¤a kayd›rma 8 >> 2 2


100 Veritaban› Uygulamalar›

Tablo 5.8 Fonksiyon aç›klama örnek sonuç


PostgreSQL’de abs() Mutlak de¤er abs(-5.2) 5.2
tan›ml› fonksiyonlar
cbrt() Küp kök cbrt(8.0) 2
ceil() En yak›n küçük tamsay› ceil(-42.8) -42
degrees() Radyandan dereceye degrees(0.5) 28.647889
çevirme 7
div(y, x) Tamsay› bölümü y/x div(9,4) 2
exp() üstel exp(1.0) 2.7182818
floor() Argümandan büyük floor(-42.8) -43
olmayan en büyük
tamsay›
ln() Do¤al logaritma ln(2.0) 0.69314
random() Rassal bir say› random()
trunc() Tamsay›ya yuvarlatma trunc(42.8) 42
sin, cos, Trigonometric sin(0.5) 0.47945
tan, cot de¤erler
asin, acos, Ters trigonometric asin(0.47945) 0.5
atan de¤erler

Dizi (string) ifllemleri, character, text ve character varying tiplerindeki de¤iflken-


ler üzerinde gerçeklefltirilir. Tablo 9, dizi iflleçlerini ve fonksiyonlar› içermektedir.

Tablo 5.9 Fonksiyon Tan›m Örnek Sonuç


PostgreSQL’de yer dizi1 || dizi2 Dizi bitifltirme 'Postgre' || 'SQL' PostgreSQL
alan baz› dizi
komutlar› dizi1 || say› Bitifltirme 'AOF' || 1982 AOF1982
char_length() Dizi uzunlu¤u char_length('AÖF') 3
lower() Küçük harfe çevir lower('AÖF') aöf
position(dizi1 in dizi2) Alt dizinin dizideki yeri position('ö¤r' in 5
'Aç›kö¤retim')
trim(leading from dizi) Dizinin bafl›ndaki trim(leading ' AÖF ') 'AÖF '
boflluk karakterlerini
siler
trim(trailing from dizi) Dizinin sonundaki trim(trailing from ' AÖF ') 'AÖF '
boflluk karakterlerini
siler
trim(both from dizi) Dizinin bafl› ve trim(trailing from ' AÖF ') 'AÖF'
sonundaki boflluk
karakterlerini siler.
upper(dizi) Büyük harfe çevirir. trim('aöf') 'AÖF'
substring(dizi Dizinin içinden ilgili Substring('Aç›kö¤retim' 'ö¤r'
[from int] k›sm› alarak döndürür. from 5 for 3)
[for int])
5. Ünite - Temel SQL Kavramlar› ve Komutlar› 101

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. SIRA S‹ZDE SIRA S‹ZDE
4
SQL KOMUTLARI
PostgreSQL veritaban› yönetim sisteminin SQL standartlar› içindeD Ü fi Üdestekledi¤i
NEL‹M çok D Ü fi Ü N E L ‹ M
say›da SQL komutu bulunmaktad›r. Desteklenen SQL komutlar›, befl ana bafll›kta
incelenebilir: S O R U S O R U
1. ALTER komutlar›: veritaban› nesneleri üzerinde de¤ifliklik yap›lmas› için kulla-
n›l›r.
a. ALTER DATABASE : veritaban›n›n özelliklerini de¤ifltirir. D ‹ K K A T D‹KKAT
b. ALTER DEFAULT PRIVILEGES : veritaban›na varsay›lan eriflim yetkilerini de-

N N
¤ifltirir. SIRA S‹ZDE 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 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.
h. ALTER TABLE - tablonun tan›m›n› de¤ifltirir. K ‹ T A P K ‹ T A P
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 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.
b. CREATE FUNCTION - yeni bir fonksiyon oluflturur. ‹NTERNET ‹NTERNET
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.
102 Veritaban› Uygulamalar›

e. DROP OWNED - bir veritaban› rolü taraf›ndan sahiplenen veritaban› nesne-


lerini 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 gru-
buyla ilgilidir.
a. BEGIN veya START TRANSACTION - hareket blo¤una bafllar.
b. END veya COMMIT - içinde bulunulan hareketi tamamlanmas› için veritaba-
n› 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›m-
lar.
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 bitme-
si 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 tutar-
s›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› 103

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 DE-
LETE’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çek-
lefltirilebilir:

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 sem-
boldü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 (ali-
as) 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:
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 kulla-


n›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 alt-
sorgulardan da yararlan›labilir.
WHERE ifadesinde IN kelimesi, parantez içindeki küme setinin içindeki de¤er-
ler 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 (ogrd-
rmid = 9) kiflilerin say›s›n›n 1000’den yukar› oldu¤u illerin numaralar›n› döndür-
mektedir. Ana sorgudaysa, alt sorgudan gelen illerin numaralar›na karfl›l›k gelen il
adlar› yaz›lmaktad›r.
5. Ünite - Temel SQL Kavramlar› ve Komutlar› 105

SELECT iladi FROM iller


WHERE id
IN (SELECT ilid FROM ilogrdurum
WHERE ogrdrmid = 9 AND sayitoplam>1000)

Altsorguyu parantez olmadan, SQL editöründe yaz›n›z ve sonuçlar›n› görünüz.


SIRA S‹ZDE Ard›ndan, SIRA S‹ZDE
yukar›daki sorguyu yazarak çal›flt›r›n›z ve elde ettiklerinizi not ediniz. 5
D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M
BETWEEN kelimesi, iki de¤er aras›n› belirlemek için kullan›l›r. Örne¤in, nüfu-
su, Eskiflehir’deki ilkokul mezunlar›n›n say›s› (ogrdrmid = 4) ile 100000 aras›n-
da olan illerin adlar›n›n getirildi¤i sorgu flöyle kurulabilir: S O R U S O R U

SELECT iladi, nufus FROM iller


WHERE nufus BETWEEN
D‹KKAT D‹KKAT

(SELECT sayitoplam FROM ilogrdurum


WHERE ilid = 26 AND ogrdrmid=4)

N N
SIRA S‹ZDE SIRA S‹ZDE
AND 100000
AMAÇLARIMIZ AMAÇLARIMIZ
Sorgu çal›flt›r›ld›¤›nda sonuç olarak, nüfusu 83061 olan Tunceli ile 74710 nüfus-
lu Bayburt döndürülecektir.
K ‹ T A P K ‹ T A P
Sorgular›n Birlefltirilmesi
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 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-
rinin getirilmesidir. ‹NTERNET ‹NTERNET
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 erkekler-


den daha fazla oldu¤u ve/veya (SORGU 2) ilkokul mezunlar› içinde erkeklerin ka-
d›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 where ogrdrmid=4 AND


sayikadin>sayierkek
UNION
SELECT ilid from ilogrdurum where ogrdrmid=3 AND
sayikadin>sayierkek
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 where ogrdrmid=4 AND


sayikadin>sayierkek
INTERSECT
SELECT ilid from ilogrdurum where ogrdrmid=3 AND
sayikadin>sayierkek

Bu sorguda, her iki sorgunun getirdi¤i kay›tlar aras›nda ortak olan 54 numara-
l› Sakarya ili döndürülmektedir.

SIRA S‹ZDE EXCEPT kelimesini kullanarak yukar›daki sorguyu de¤ifltirin ve sonucu not edin.
SIRA S‹ZDE
6
INSERT INTO
D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M
Veritabanlar›n›n güncel kalabilmesi için her zaman yeni verilerin eklenmesi gere-
kir. SQL dilinde veri eklemek için kullan›lan komut INSERT INTO komutudur. Afla-
S O R U S O R U iller tablosuna yeni bir kay›t eklemektedir:
¤›daki SQL komutu,

INSERT INTO iller VALUES (82, 'Alanya', 102553, 51443,


51110);
D‹KKAT D‹KKAT

N N
SIRA S‹ZDE
VALUESSIRA S‹ZDE
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
AMAÇLARIMIZ k›s›t›, alanlar›n s›ras›n›n bilinmesinin gerekli olmas›d›r. Ancak, alanlar›n s›ras› bilin-
AMAÇLARIMIZ
meden de yeni kayda de¤erler yüklenebilir. Örne¤in, afla¤›daki komut s›ras› bilin-
meden de¤erlerin eklenmesini sa¤lamakt›r.

INSERT INTO iller (iladi, id) VALUES ('Bandırma', 83);


K ‹ T A P K ‹ T A P

Yukar›daki sorguda, yeni kay›t sadece iladi ve id alanlar› dolu flekilde ek-
TELEV‹ZYON TELEV‹ZYON
lenmekte ve di¤er alanlara NULL de¤eri girilmektedir. E¤er CREATE TABLE komu-
tuyla tablo tan›m› yap›ld›¤› s›rada, NULL de¤erinin girildi¤i alanlar için NULL ola-
mayaca¤› k›s›t› konulsayd›, bu sorgu hata verecekti.
‹NTERNET
Tek bir ‹INSERT
NTERNET
komutuyla birden fazla yeni kay›t tan›mlanabilmektedir. VALU-
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 komu-
tuyla 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› 107

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›y-
la gerçekleflir. Örne¤in, iller tablosundaki id kolonu birincil anahtard›r. Birin-
cil anahtar kolonunda her kay›t farkl› bir numarayla temsil edilir ve di¤erlerine ay-
n› de¤er verilmez. Birincil anahtar kolonundaki de¤erler kullan›larak, UPDATE ko-
mutuyla sadece istenen kay›t de¤ifltirilebilmektedir.
Eskiflehir ilinin nüfus bilgisi de¤ifltirilmek istenirse, id kolonunun birincil anah-
tar 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› uy-
gulamalar› gelifltirenler, genellikle verilerin silinmesini istemezler. Veriler silindik-
leri zaman geri getirilemezler ve tablonun yeniden indekslenmesi gerekir. Bunun
yerine, tabloda yer alan bir kolona verinin kullan›lmad›¤›n› belirten bir kod koyar-
lar 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 te-
mizlenmesi için yararl›d›r. INSERT INTO komutuyla eklenen yeni bir il olan Alan-
ya’y› iller tablosundan silelim:

DELETE FROM iller WHERE id = 82;


108 Veritaban› Uygulamalar›

Özet

N
A M A Ç
SQL diliyle ve C++, C# ve Java gibi yordamsal dil- N
A M A Ç
SQL programlama dilinde s›k kullan›lan komut-
1 ler aras›ndaki fark› aç›klayabileceksiniz. 5 lar› ve veritiplerini listeleyebileceksiniz.
SQL (Yap›sal Sorgu Dili), uluslararas› standartlar Veritaban›nda farkl› çözünürlükteki de¤erlerin
çerçevesinde tan›ml›, veritabanlar›nda ifllem yap- tutulabilmesi için, SQL dilinde çok say›da veriti-
mak üzere tasarlanm›fl bir programlama dilidir. pi tan›ml›d›r. Yayg›n kullan›lan veri tipleri ola-
C++, C#, Java gibi di¤er bilgisayar dillerinde ve- rak, tamsay›lar, gerçek say›lar ve karakter dizile-
rilerin nas›l oluflturulaca¤› ad›m ad›m tarif edilir- ri verilebilir. Ayr›ca, aritmetik ve karakter dizileri
ken, SQL’de veritaban› yönetim sistemine hangi üzerinde uygulanan çeflitli fonksiyonlar da veri-
verileri getirece¤i tarif edilir. Veritaban› yönetim taban› yönetim sistemiyle birlikte gelmektedir.
sistemi, SQL komutunda tarif edilen veri setini SQL programlama dilinde, en yayg›n flekilde kul-
getirir veya varolan kay›tlar üzerinde ifllemleri lan›lan komutlar, SELECT, INSERT INTO, UPDA-
gerçeklefltirir. TE ve DELETE komutlar›d›r. SELECT genel amaç-
l› sorgu komutudur. INSERT INTO, veritaban›na
N
A M A Ç
Bir anda yap›lmas› gereken SQL komutlar›ndan yeni veri eklemek için kullan›l›r. VALUES anah-
2 oluflan hareketi kurabileceksiniz. tar kelimesiyle birlikte kullan›ld›¤›nda, farkl› fle-
SQL, hareket (transaction) yöntemiyle atomik ifl- killerde veri girifline izin verir. UPDATE, verita-
lemler oluflturulabilmesini sa¤lar. Hareket, bir ban›nda var olan verilerin düzeltilmesinde kulla-
arada yap›lmas› gereken komut dizisidir. Komut- n›l›rken, DELETE var olan verilerin silinmesini
lardan biri bile yap›lamazsa hareket sonlanmaz sa¤lar.
ve yap›lan ifllemler de veritaban›na ifllenmeden
yok edilir. Bu flekilde veri tutarl›l›¤› sa¤lan›r.

N
AM A Ç Tetik fonksiyonlar›n ifllevini aç›klayabileceksiniz.
3
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. Post-
greSQL, gerek hareket, gerek tetik ve gerekse
genel amaçl› olmak üzere, kullan›c›lar›n fonksi-
yon yazmalar›na izin verir.

N
AM A Ç
PL/pgSQL dilinde yaz›lm›fl programlar› çal›flt›ra-
4 bileceksiniz.
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çek-
lefltirmek için, PostgreSQL veritaban› yönetim sis-
temi taraf›ndan kullan›c›lara sunulan programla-
ma dillerinden en yayg›n flekilde kullan›lan›d›r.
5. Ünite - Temel SQL Kavramlar› ve Komutlar› 109

Kendimizi S›nayal›m

1. Afla¤›dakilerden hangisi, hareket (transaction) kav- 5. substring(‘merhaba’ from 4 for 2) fonksiyonun getir-
ram›n› eksiksiz aç›klar? di¤i de¤er afla¤›dakilerden hangisidir?
a. Yar›da kesilmesi durumunda veri tutars›zl›¤› a. haba
oluflturacak ifllemlerin tamam›d›r. b. merh
b. S›rayla gerçeklefltirilmesi gereken komut grubu- c. ha
dur. d. ba
c. Ayn› anda çal›flt›r›lmaya bafllanarak bitirilmesi e. aba
gereken komutlard›r.
d. Alternatif olarak çal›flan komutlard›r. 6. ‹ki sorgudan gelen de¤erlerin birlefltirilmesi için kul-
e. ‹ndeksleme gerektirmeden çal›flan komut dizisidir. lan›lan anahtar kelime afla¤›dakilerden hangisidir?
a. INTERSECT
2. Yeni eklenen bir fonksiyon veritaban›nda hangi bö- b. SUBTRACT
lüme eklenir? c. INSERT
a. ‹flleçler (operators) d. EXCEPT
b. Genel fiema (Public Schema) e. UNION
c. Triggers
d. Tablolar (Tables) 7. Veritaban› rolü nedir?
e. Görüntüler (views) a. Veritaban› eriflim izinleridir.
b. Kullan›c› isimleridir.
3. Görüntü (View) nedir? c. Veritaban›nda eriflilebilecek flemalard›r.
a. Bir veritaban›n›ndaki bütün de¤erlerin olufltur- d. Birden fazla veritaban›na eriflen kullan›c›lard›r.
du¤u kümedir. e. Tablolar üzerinde sorgulama, ekleme, silme, dü-
b. Tablolarda yer alan bütün verilerdir. zeltme gibi yetkilere sahip kullan›c›lard›r.
c. Bir kullan›c›n›n eriflime yetkili oldu¤u tablolar›n
8. SELECT komutunda alanlara benzer isim (alias) ata-
isimleridir.
mak için kullan›lan anahtar kelime afla¤›dakilerden han-
d. Bir SQL sorgusunun getirdi¤i de¤erlerdir.
gisidir?
e. Bir SQL sorgusunun SQL Editöründeki görüntü-
a. BETWEEN
südür.
b. SET
SELECT iladi FROM iller c. VALUES
WHERE nufuserkek BETWEEN
d. AS

(SELECT sayierkek FROM ilogrdurum


e. FROM

WHERE ilid = 34 AND ogrdrmid=9) 9. SQL komutlar›nda mutlak de¤er hesaplamak için
AND 5000 kullan›lan iflleç afla¤›dakilerden hangisidir?
a. !
b. >>
4. Yukar›daki SQL sorgusunun ifllevi afla¤›dakiler- c. @
den hangisidir? d. %
a. Erkek nüfusu, ‹stanbul’un nüfusundan küçük il- e. ^/
lerdeki bayan nüfusunu getirir.
b. ‹stanbul’daki ilkö¤retim mezunu erkeklerin sa- 10. Tetik (trigger) nedir?
y›s›n› getirir. a. Yeni veri eklendi¤inde çal›flt›r›lan k›s›tlar› kon-
c. ‹stanbul d›fl›nda, erkek nüfusu 1000 ve 5000’den trol eden komutlard›r.
büyük olan illerin adlar›n› getirir. b. Tablolarda veya görüntülerde gerçekleflen de¤i-
d. ‹stanbul’da doktora derecesine sahip kiflilerin fliklik durumlar›nda otomatik olarak çal›flt›r›lan
say›s›ndan büyük ve 5000’den küçük erkek nü- yordamlard›r.
fusu olan illerin isimlerini getirir. c. PL/pgSQL dilinde yaz›lan program parçalar›d›r.
e. ‹stanbul’daki doktoral› kiflilerin say›s› 5000’den d. Karmafl›k ifllemleri gerçeklefltirmek için kullan›-
büyükse, ‹stanbul d›fl›ndaki bütün illerin erkek lan yordamsal bir dille yaz›lan ifllemlerdir.
nüfuslar›n› getirir. e. Yeni bir kay›t eklendi¤inde, en eski kayd› sile-
rek 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 Yan›t›n›z yanl›fl ise “SQL Kavramlar›” bafll›kl› S›ra Sizde 1
bölümü inceleyiniz. fiemalar alt›ndaki public flemas›n›n içinde, “Domains”,
2. b Yan›t›n›z yanl›fl ise “SQL Kavramlar›” bafll›kl› “FTS Configurations”, “FTS Dictionaries”, “FTS Parsers”,
bölümü inceleyiniz. “FTS Templates”, “Functions”, “Sequences”, “Tables”,
3. d Yan›t›n›z yanl›fl ise “SQL Kavramlar›” bafll›kl› “Trigger Functions”, “Views” gibi özellikler bulunmak-
bölümü inceleyiniz. tad›r.
4. d Yan›t›n›z yanl›fl ise “SELECT, INSERT INTO,
UPDATE, DELETE” bafll›kl› bölümü inceleyiniz. S›ra Sizde 2
5. c Yan›t›n›z yanl›fl ise “SQL Dilinde Fonksiyonlar “SELECT COUNT(*) FROM iller where nufus>500000
ve ‹flleçler” bafll›kl› bölümü inceleyiniz. AND nufus<1000000;” komutu istenen ifllevi gerçeklefl-
6. e Yan›t›n›z yanl›fl ise “SELECT, INSERT INTO, tirecektir.
UPDATE, DELETE” bafll›kl› bölümü inceleyiniz.
7. a Yan›t›n›z yanl›fl ise “SQL Kavramlar›” bafll›kl› S›ra Sizde 3
bölümü inceleyiniz. “SELECT SUM(nufus) FROM iller where id<>34 AND nu-
8. d Yan›t›n›z yanl›fl ise “SELECT, INSERT INTO, fus>500000;” komutu istenen ifllevi gerçeklefltirecektir.
UPDATE, DELETE” bafll›kl› bölümü inceleyiniz.
9. c Yan›t›n›z yanl›fl ise “SQL Dilinde Fonksiyonlar S›ra Sizde 4
ve ‹flleçler” bafll›kl› bölümü inceleyiniz. “SELECT SehirAdi FROM Sehirler WHERE char_length
10.b Yan›t›n›z yanl›fl ise “SQL Kavramlar›” bafll›kl› (SehirAdi)=5;” komutu ad uzunlu¤u 5 karakter olan se-
bölümü inceleyiniz. hirleri 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.post-
gresql.org/pgdocs/postgres/sql-commands.html
6
VER‹TABANI UYGULAMALARI

Amaçlar›m›z

N
Bu üniteyi tamamlad›ktan sonra;
Bir tablo içinde yer alan bir kolondaki maksimum, minimum, ortalama de-

N
¤erleri hesaplayabilmek için SQL komutlar› oluflturabileceksiniz.
‹liflkisel veritaban›nda tablolar aras›ndaki iliflkilerin birlefltirme iflleminde na-

N
s›l kullan›ld›¤›n› aç›klayabileceksiniz.

N
Sorgu içinde baz› kay›tlar› grupland›rabileceksiniz.
Sorgudan dönen kay›tlar›n baz› kriterlere göre s›ralanmas›n› sa¤layabile-
ceksiniz.

Anahtar Kavramlar

• Y›¤›n küme ifllemleri • Grupland›r›lan verilere k›s›t


• Tablo birlefltirme ifllemleri konulmas›
• Verilerin grupland›r›lmas› • S›ralama

‹çerik Haritas›

• G‹R‹fi
• YI⁄IN ‹fiLEM FONKS‹YONLARI
• TABLOLARIN B‹RLEfiT‹R‹LMES‹
(JOINING TABLES)
Veritaban› Temel SQL • TABLO B‹RLEfiT‹RMEYLE ‹LG‹L‹ B‹R
Uygulamalar› Komutlar› Ö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, In-
sert, Update, Delete, Alter ve Create komutlar› ayr›nt›l› olarak anlat›lm›flt›r. Bu ko-
mutlar, 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 yor-
damlara 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 çe-


flitli ifllemler gerçeklefltirilecektir. Önceki ünitelerde tan›mlanan iller tablosunun
yap›s› fiekil 1’de gösterilmektedir.

fiekil 6.1

iller
‹ller
Tablosunun
Yap›s› id iladi nufus nufuserkek nufuskadin

1 Adana 2062226 1029640 1032586


2 Ad›yaman 588475 294213 294262
3 Afyon 701326 348194 353132
4 A¤r› 537665 280000 257665
... ... ... ... ... ... ... ... ... ... ... ... ...
80 Osmaniye 471804 236751 235053
81 Düzce 335156 167696 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 komutu-
nu ç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 kay-
d›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› 115

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 ilifl-
kili tablolarda tutulmas›n›n temel nedenlerinden biri az say›da kolon bulunan tab-
lolarda ifllem yap›lmas›n›n, daha genifl tablolara göre daha h›zl› olmas›d›r. Tablo-
da ç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 ka-
y›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, bir-
den 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›t-
lar›n bir flekilde bütünlefltirilmesi, di¤er bir deyiflle birlefltirilmesi gereklidir. SQL di-
li, 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 çe-
flitli örnekler üzerinde çal›flal›m. Hat›rlanaca¤› gibi iller ve ilogrdurum tablo-
lar› her ile verilen eflsiz bir numara üzerinden birbirleriyle iliflkilidir. Eskiflehir’le il-
gili 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 ve-
recek flekilde tablo isimleriyle birlikte flöyle yaz›labilir:
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› önem-
lidir. Di¤er bir birlefltirme ifllemi olan CROSS JOIN, bütün tablolar› çaprazlayarak bir-
lefltirir 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 CROSS JOINSIRA


ifllemini
S‹ZDEiller ve ilogrdurum tablolar› üzerinde deneyerek, kaç kay›t döndür-
1 dü¤ünü bulunuz.

D Ü fi Ü N E L ‹ M D Ü fi Ü Nsorgu
JOIN içeren E L ‹ M komutlar› üç farkl› flekilde yaz›labilir:

SELECT T1 {[INNER]|{LEFT|RIGHT|FULL}[OUTER]} JOIN T2


ON koşul
S O R U S O R U

SELECT T1 {[INNER]|{LEFT|RIGHT|FULL}[OUTER]} JOIN T2


USING
D ‹ K K A(kolon listesi)
SELECT T1 NATURAL {[INNER]|{LEFT|RIGHT|FULL}[OUTER]}
D‹KKAT T

JOIN T2

N N
SIRA S‹ZDE SIRA S‹ZDE

AMAÇLARIMIZ AMAÇLARIMIZ

K ‹ T A P K ‹ T A P
6. Ünite - Temel SQL Komutlar› 117

Yukar›daki komut yaz›m›nda, | karakteri opsiyonel kelimeleri ay›rmak için kul-


lan›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 ön-
celik verir. Bu kelimelerin anlamlar›, ifllemin anlafl›lmas› için önemlidir. USING ke-
limesi, 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 ifl-
lemi 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 sa-
t›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 ifl-
leminin 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¤› yerler-
de 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 komut-
lar›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.

“SELECT * FROM iller FULL OUTER JOIN ilogrdurum ON id = ilid” SIRA S‹ZDE
sorgusundan kaç adet SIRA S‹ZDE
kay›t döndürülecektir? 2
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ör-
mek için bir belediyenin s›n›rlar› içinde bulunan konut bilgilerini tutabilecek bir ve-
ritaban› oluflturaca¤›z. Kent bilgi sistemlerinde veri türü ve miktar› oldukça fazla ola-
bilir. 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 tu-
tulmal›d›r. Veri türlerindeki çeflitlilik de beraberinde farkl› türlerdeki verilerin iliflki-
sel 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 ko-
mutlar›yla elde edilmesi zorlafl›r. Bu nedenle tablolar oluflturulurken birbiri ile ilifl-
kili 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 birlefl-
tirme 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 girilme-
di¤i görükmektedir. Bunun nedeni, normalizasyon kurallar› gere¤i burada yer ala-
cak bilgilerin farkl› tablolar ile iliflkisel olarak tutulmas›n›n gerekli olmas›d›r. Tab-
loda bulunan alanlardan MahalleID ve BinaTuru alanlar›n›n ba¤lant›l› olaca¤›
tablolar fiekil 5’teki gibi oluflturulabilir.

fiekil 6.4 fiekil 6.5

Binalar Mahalleler
tablosu Binalar Mahalleler tablosu

BinaID (PK): integer MahalleID (PK) : integer


SehirID : integer SehirID : integer
IlceID : integer MahalleAdi : varchar(50)
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 Binalar tablosunda yer alan Ma-


halleID de¤eri Mahalleler tablosunda-
ki MahalleID eflsiz de¤erini almakta,
BinaTurleri BinaTurleri

ayn› flekilde BinaTuru de¤eri de


tablosu
yine
BinaTurleri tablosundaki BinaTu-
BinaTuruID (PK) : integer
BinaTuru : varchar(50)
ruID de¤eri ile eflleflmektedir. Bu tür bir
veritaban› tasar›m› daha önceki bölüm-
lerde bahsedildi¤i gibi tablolar›m›z›n boyutunun büyümesini engellemekte, verile-
rin girifli s›ras›nda tekrarlama ve yaz›m hatalar›n› önlemektedir. Önemli avantajla-
r›ndan biri, verilerde yap›lacak düzeltmede, örne¤in bir caddenin ad›n›n de¤ifltiril-
mesinde, veritaban›nda yap›lacak de¤ifliklik miktar›n›n minimum seviyeye çekil-
mesi ve verilerde tutars›zl›k oluflmas›n›n engellenmesidir.
6. Ünite - Temel SQL Komutlar› 119

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 ola-
bilmektedir. Örne¤in yukar›daki veritaban›nda, Tepebafl› mahallesinde, betonarme
binalar›n bilgileri ve burada oturan kiflilerin isimlerini içeren bir listenin oluflturul-
mas› gerekti¤ini varsayal›m. Tablonun ifllevini daha iyi gösterebilmek için, Bina-
lar tablosunda yer alan örnek veriler fiekil 7’de gösterilmektedir.

fiekil 6.7
Binalar Binalar
tablosundaki
BinaID SehirID IlceID MahalleID .... KatAdedi .... BinaTuru veriler

1 26 1 1 1 1
2 26 1 1 2 2
3 26 2 2 7 2
... ... ... ... ... ...

fiekil 6.8 fiekil 6.9

BinaTurleri Mahalleler
tablosundaki BinaTurleri Mahalleler tablosundan
veriler veriler
BinaTuruID BinaTuru MahalleID SehirID MahalleAdi

1 Ahflap 1 26 Hoflnudiye
2 Betonarme 2 26 ‹stiklal
... ... ... ... 3 26 Viflnelik
4 26 Akarbafl›
... .... ... ...

‹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.10 fiekil 6.11

Mukellefler tablosu Mukellefler tablosundaki veriler

Mukellefler Mukellefler

MukellefID (PK) : integer MukellefID Adi Soyadi OturduguBinaID


Adi : varchar(50)
Soyadi : varchar(50) 1 Ahmet Sami 1
OturduguBinaID : integer 2 Perihan Ersoy 2
3 Ercan Bilgin 2
... ... ... ... ... ...

Viflnelik mahallesindeki betonarme binalar›n bilgilerinin ve burada oturan kifli-


lerin isimlerinin elde edilmek istendi¤ini düflünelim. Bu verileri, birer birer sorgu-
lama 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 Binalar


dönen de¤erler
BinaID SehirID IlceID MahalleID ....... KatAdedi ....... BinaTuru

2 26 1 3 .... ....
12 26 1 3 .... ....
.... .... .... .... .... ....

Bu sorgu sayesinde istenen özelliklere sahip binalar›n listesi elde edilebilmek-


tedir (fiekil 12). Ard›ndan Mukellefler tablosu ayr›ca sorgulanmal› ve yukar›da-
ki 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 efllen-
mesidir. 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 Mukellefler


yap›lan sorgudan
elde edilen mükellef MukellefID Adi Soyadi Oturdu¤uBinaID
bilgileri
2 Perihan Ersoy 2
3 Ercan Bilgin 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 bil-
gilere göre yeni SQL sorgular›n›n çal›flt›r›lmas› gerekmektedir. Bu da, istenen ka-
y›tlar›n elde edilmesi s›ras›nda tabloya defalarca sorgu gönderilmesine neden ol-
makta ve bilgiler birlefltirilirken hata yapma riskini art›rmaktad›r. Di¤er bir sorun
Yüzbinlerce kayd› bar›nd›ran da, birbiri arkas›na gönderilen SQL sorgular›n›n veritaban› yönetim sistemini afl›r›
ve birçok kiflinin ayn› anda yüklemesidir. ‹stenen bilgileri tek bir sorguyla elde etmek, her zaman tercih edil-
kulland›¤› sistemlerde,
sorgu say›s›n› azaltmak melidir. Sorgu say›s›n› azaltman›n yollar›ndan biri de, iliflkili tablolar›n birlefltiril-
sistem performans›n› art›r›r. mesi yöntemidir.
6. Ünite - Temel SQL Komutlar› 121

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 koflulla-
r› iki veya daha fazla tabloya uygulanabilir. Bu birden fazla tablodan verilerin el-
de edilmesini sa¤lamaktad›r. Yukar›daki SQL sorgusu incelendi¤inde, Binalar H›z aç›s›ndan, SQL
ve Mukellefler tablosundan istenen alan adlar›n›n sorgu içinde yer ald›¤› gö- sorgulamalar›
oluflturulurken sadece
rülmektedir. Tablolarda yer alan bütün alanlardaki verileri çekmek verinin büyük- gerekli tablo alanlar›n›n
lü¤ünü art›raca¤› için sisteme daha çok yük getirecek bu da performans düflüklü- istenmesine özen
gösterilmelidir.
¤ü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 sa-
dece bir tablo ismi yer almaktayd›. Verinin çekilece¤i tüm tablolar FROM kelime-
sinin arkas›ndan belirtilmelidir. SQL sorgusunun son bölümündeki WHERE eti-
ketinden sonraki bölüm, sorgulama için gerekli olan koflullar›n yaz›ld›¤› bölüm-
dür. Burada girilmesi gereken kriterler, birbiriyle iliflkilendirilecek olan tablolar›n
aras›nda yer alan ba¤lant› koflullar›d›r. Yukar›daki sorguda, Mukellefler tab-
losunda 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 so-
nucuna bak›ld›¤›nda, kay›tlar›n flehir, ilçe, mahalle ve bina türü de¤erleri ile listelen-
di¤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 olufltu-
rulabilir. 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;
122 Veritaban› Uygulamalar›

fiekil 6.14

Sorgu sonucu Sorgu Sonucu

SehirAdi IlceAdi MahalleAdi BinaTuru Adi Soyadi

Eskiflehir Odunpazar› Viflnelik Betonarme Perihan Ersoy


Eskiflehir Odunpazar› Viflnelik Betonarme Ercan 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 bilgile-
rinin tutuldu¤u Iller tablosu düflünülerek oluflturulan Ilceler tablosu fiekil
15’te gösterilmektedir.

fiekil 6.15 ‹llerin ve ilçelerin tutuldu¤u tab-


Ilceler tablosu lolar birlefltirilmek istenirse, kullan›-
Sorgu Sonucu
içindeki veriler lacak komutlardan biri INNER JO-
IN’dir. INNER JOIN komutu, iki tab-
IlceID ‹lID ‹lceAdi
lodan ba¤lant› koflulunun sa¤land›¤›
1 26 Tepebafl› verileri getirmek için kullan›l›r. Bir
2 26 Odunpazar› tabloda bulunan de¤erin karfl›l›¤› di-
3 1 Ceyhan
4 34 Fatih ¤er tabloda yer alm›yorsa sonuç ve-
... ... ... rilerinde bu de¤er yer almaz. Sistem-
de her iki tabloda da yer alan verile-
re karfl›l›k gelen kay›tlara ulaflmak is-
tersek, flöyle bir sorgu oluflturabiliriz:

SELECT Iller.ilAdi, Ilceler.ilceAdi


FROM Iller
INNER JOIN Ilceler
ON Iller.id = Ilceler.ilID

fiekil 6.16 Burada INNER JOIN koflulu iki tab-


Sorgu Sonucu lonun tam olarak eflleflen de¤erlerini
Sorgu sonucu
getirir. Elde edilen sonuç verisi fiekil
Iladi IlceAdi 16’da gösterilmektedir.
Iller tablosunda Ad›yaman ili-
yer almas›na ra¤men Ilceler
Eskiflehir Odunpazar›
Eskiflehir Tepebafl›
nin
Adana Ceyhan tablosunda Ad›yaman iline ait her-
‹stanbul Fatih hangi bir kay›t olmazsa, Ad›ya-
man’›n ilçeleri sorgu sonucunda yer
almayacakt›r.
LEFT OUTER JOIN, INNER JOIN koflulundan farkl› olarak birinci tabloda bulu-
nan kay›tlar›n tamam›yla ikinci tabloda eflleflen verileri getirmekte, iki tabloda efl-
leflmeyen kay›tlar›n yeri ise bofl (NULL) kalmaktad›r. Önemli verilerin birinci tab-
loda yer ald›¤› ve birinci tablodaki kay›tlar›n tamam›n›n sorgudan dönmesi gerek-
6. Ünite - Temel SQL Komutlar› 123

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, IN- fiekil 6.17


NER JOIN komutuyla gerçeklefltirilen Sorgu Sonucu Sorgu sonucu
sorgudan farkl› olarak, LEFT OUTER JO-
IN’le elde edilen sonuç kümesinde Ad›- Iladi IlceAdi
yaman ilinin de yer ald›¤› görülmekte- Adiyaman NULL
dir. Tablonun ikinci sütununda ise Ad›- Eskiflehir Odunpazar›
yaman ilinin IlceAdi de¤eri NULL ola- Eskiflehir Tepebafl›
rak gözükmektedir. Bunun nedeni Il-
Adana Ceyhan
‹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¤ifltiril-
di¤inde, LEFT OUTER JOIN komutunun ayn›s› oldu¤undan RIGHT OUTER JOIN
çok fazla kullan›lmamaktad›r.

ORDER BY
Sorgulamalar sonucunda elde edilen veri öbeklerindeki kay›tlar›n s›ras›n›n, verita-
ban›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 ve-
rilerde binalar›n ilçe ad›, mahalle ad›, yüz ölçümü ve kat adeti bilgilerinin buluna-
ca¤›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 2 10 123
2 1 1 5 245
4 1 1 2 110
124 Veritaban› Uygulamalar›

fiekil 18’de görülen sorgu sonucu incelendi¤inde, binalar›n ilçe kodu, mahalle ko-
du, kat adedi ve yüz ölçümü bilgilerinde herhangi bir s›ralaman›n olmad›¤› görülmek-
tedir. 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 olmak-
tad›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 <veri tabanı alanları>


FROM <tablo adı >
[WHERE <koşullar>]
ORDER BY <alan adı> [ASC | DESC]

ORDER BY komutu, SELECT komutunun kullan›ld›¤› sorgulamalarda, sorgula-


ma sonras› elde edilecek verilerin hangi alan› s›ralanm›fl flekilde getirilece¤ini be-
lirtmek 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 veri-
leri büyükten küçü¤e s›ralamak için afla¤›daki sorguyu kurabiliriz. Burada ilk s›ra-
lanacak alan kat adediyken, ard›ndan yüzölçümüne göre s›ralanacakt›r. Sorgu so-
nucu 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 1 1 1 1
2 1 1 1 1
1 2 2 2 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 an-
laml› 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 geti-
rerek 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-
6. Ünite - Temel SQL Komutlar› 125

mas› istendi¤inde, DISTINCT komutu kullan›l›r. Örnek olarak Ilceler tablosun-


da 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 <veri tabanı alanları>


FROM <tablo adı >
[WHERE <koşullar>]
GROUP BY <alan adı>

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 is-
tenirse, 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.20 fiekil 6.21

Sorgu sonucu Sorgu sonucu

Sorgu Sonucu Sorgu Sonucu

Count mahalleID mahalledekiBinaSayi mahalleID

323 1 323 1
122 2 122 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 so-
nucu, 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üme-


sindeki alanlardan birine ait en yüksek, en düflük veya ortalama de¤erlerin hesap-
lanmas›d›r. Örnek olarak mahallede bulunan en büyük ve en küçük katl› binalar-
daki 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 verilmifl-
tir. 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 1
5 2
...... ......

Mahallelere göre en büyük kat say›s›n›n bulunmas› için, yukar›daki sorgu flöy-
le 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› 127

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, Mahal-
leID 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 2 51
1 5 153
1 6 225
2 3 175
... ... ...

fiekil 22’de de görülebilece¤i gibi, sorgu sayesinde mahallede bulunan binala-


r›n kat bazl› say›lar› elde edilmifltir. Fakat, 5 kattan yüksek binalar›n say›lar›n›n bu-
lunabilmesi için, sorguya HAVING’le bafllayan koflulun eklenmesi gereklidir. HA-
VING 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;
128 Veritaban› Uygulamalar›

Özet

N
A M A Ç
Bir tablo içinde yer alan bir kolondaki maksi- N
A M A Ç
Sorgu içinde baz› kay›tlar› grupland›rabilecek
1 mum, minimum, ortalama de¤erleri hesaplaya- 3 ve y›¤›n ifllemleri bu gruplar üzerine uygulaya-
bilmek için SQL komutlar› oluflturabileceksiniz. bileceksiniz.
Y›¤›n ifllemler, tablo içinde yer alan bir kolonda- Y›¤›n ifllemlerin, sadece baz› kay›tlar üzerinde
ki bütün de¤erler üzerinde yap›lan hesaplama- uygulanmas› GROUP BY komutu sayesinde ya-
lard›r. Bir kolondaki en küçük, en büyük de¤er- p›labilir. GROUP BY, bir kolonda yer alan her
lerin hesaplanmas›, kay›t say›s›n›n bulunmas› gi- bir farkl› de¤er için y›¤›n ifllemlerin gerçekleflti-
bi ifllemlerden oluflur. Yordamsal programlama rilmesini sa¤lar. GROUP BY komutunun bir ko-
dillerinde döngülerle yap›labilen bu tür ifllemler, flula göre gruplama yapmas›, HAVING ifadesiyle
SQL dilinde bir sat›rl›k komutlarla gerçeklefltirile- gerçeklefltirilir.
bilmektedir.
N
N
Sorgudan dönen kay›tlar›n baz› kriterlere göre
AM A Ç
‹liflkisel veritaban›nda tablolar aras›ndaki iliflki- 4 s›ralanarak döndürülmesini yapabileceksiniz.
A M A Ç

2 lerin birlefltirme iflleminde nas›l kullan›ld›¤›n› ORDER BY komutu, bir sorgudan döndürülen
aç›klayabileceksiniz. kay›tlar›n s›ralanmas›n› sa¤lar. ASC ve DESC ko-
‹liflkisel veritabanlar›nda tablolar aras›ndaki ilifl- mutlar›, s›ras›yla, kay›tlar› küçükten büyü¤e ve
kiler, ortak de¤erler içeren alanlar sayesinde ku- büyükten küçü¤e s›ralar.
rulur. ‹lçelerin bilgilerinin oldu¤u bir tablodaki
bir alanda ilçenin ba¤l› bulundu¤u ilin kodu var-
sa, ilçe tablosundaki bilgiler kullan›larak ilin ismi
de bulunabilir. SQL dili, SELECT sorgusuyla bir-
den fazla tabloda arama yap›lmas›n› sa¤lar. Di-
¤er bir yöntem de JOIN ad› verilen komutun kul-
lan›lmas›d›r. Çeflitli kullan›m amaçlar›na göre, IN-
NER JOIN, OUTER JOIN, CROSS JOIN gibi türev-
leri bulunmaktad›r.
6. Ünite - Temel SQL Komutlar› 129

Kendimizi S›nayal›m
5. ORDER BY komutunun ifllevi nedir?
SELECT mahalleID, katAdedi,
count(*) as toplamBinaSayisi
a. Tablolar› birlefltirmek

FROM Binalar
b. Eflsiz kay›tlar› döndürmek

GROUP BY katAdedi;
c. Sorgunun tablodaki bir yada birden fazla alana
göre s›ralanm›fl flekilde döndürülmesini sa¤la-
mak
1. Afla¤›dakilerden hangisi yukar›daki sorguyu aç›klar? d. ‹çinde NULL de¤eri bulunmayan kay›tlar› dön-
a. Bir kat say›s›n›n kaç mahallede yer ald›¤›n› bü- dürmek
tün mahalleler için döndürür. e. Kay›tlar› grupland›rmak
b. Mahallelere göre toplam kat say›s›n› döndürür.
c. Tablodaki toplam mahalle ve kat say›lar›n› ayr› 6. ASC ve DESC komutlar› hangi komutla birlikte kulla-
kolonlarda döndürür. n›l›r?
d. Ortalama kat say›lar›n› mahallelere göre hesap- a. HAVING
lar. b. INNER JOIN
e. En büyük kat say›s›ndan en küçü¤e do¤ru ma- c. OUTER JOIN
hallelerdeki toplam kat say›s›n› döndürür. d. ORDER BY
e. WHERE
2. HAVING komutunun temel ifllevi nedir?
a. Belirli bir alan›n hangi tablo referans al›narak 7. Afla¤›dakilerden hangisi, OUTER RIGHT JOIN komu-
kullan›laca¤›n› belirtmek tuyla oluflturulan sorguya göre daha az kay›t döndürür?
b. GROUP BY ifadesine koflul eklemek a. INNER JOIN
c. NULL bulunmayan de¤erleri hesaplamak b. OUTER JOIN
d. Birlefltirilecek tablolar›n isimlerini tan›mlamak c. CROSS JOIN
e. Tablo içinde yer alan minimum ve maksimum d. OUTER LEFT JOIN
de¤erlere göre HAVING ifadesinden sonra ta- e. LEFT CROSS JOIN
n›mlanan alanlar› s›ralamak
8. Afla¤›dakilerden hangisi, tablo birlefltirirken, sa¤ ve
3. DISTINCT komutunun ifllevi nedir? sol taraftaki tablolarda birbirine eflleflen verilerin getiril-
a. Kullan›lacak tablolar›n isimlerini belirtmek di¤i ifllemi yapar?
b. Sorguda dönen kay›tlar› tek bir alana göre grup- a. RIGHT OUTER JOIN
land›rmak b. CROSS JOIN
c. Toplam kay›t say›s›n› hesaplamak c. OUTER JOIN
d. Tekrar olan kay›tlar aras›ndan sadece bir tane d. LEFT OUTER JOIN
farkl› kay›t getirmek e. INNER JOIN
e. Döndürülen kay›tlar içindeki alanlarda yer alan
de¤erler için koflul koymak 9. Afla¤›dakilerden hangisi, GROUP BY komutunun ko-
laylaflt›rd›¤› ifllemlerden biri de¤ildir?
4. Afla¤›dakilerden hangisi y›¤›n ifllem komutlar›ndan a. Bir grupta bulunan kay›t say›s›n›n bulunmas›
biri de¤ildir? b. Grupta yer alan bir alandaki de¤erlerin toplam›-
a. max n›n hesaplanmas›
b. min c. Grupta bulunan kay›tlardaki baz› alanlar›n orta-
c. count lamas›n›n bulunmas›
d. avg d. Grupta bulunan kay›tlar içinde birbirinden fark-
e. distinct l› 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? 1. a Yan›t›n›z yanl›fl ise “GROUP BY” bafll›kl› bölü-
a. S›ralaman›n büyükten küçü¤e do¤ru s›ralanma- mü tekrar inceleyiniz.
s›n› sa¤lar. 2. b Yan›t›n›z yanl›fl ise “GROUP BY” bafll›kl› bölü-
b. S›ralaman›n küçükten büyü¤e do¤ru s›ralanma- mü tekrar inceleyiniz.
s›n› sa¤lar. 3. d Yan›t›n›z yanl›fl ise “DISTINCT” bafll›kl› bölümü
c. Gruplaman›n en küçük kay›ttan büyü¤e do¤ru tekrar inceleyiniz.
yap›lmas›n› sa¤lar. 4. e Yan›t›n›z yanl›fl ise “Y›¤›n ‹fllemler” bafll›kl› bö-
d. Gruplanan veriler içinde farkl› olan kay›tlar› bul- lümü tekrar inceleyiniz.
maya yarar. 5. c Yan›t›n›z yanl›fl ise “ORDER BY” bafll›kl› bölü-
e. S›ralanan veriler içinde birbirinden farkl› de¤er- mü tekrar inceleyiniz.
lerin bulunmas›n› sa¤lar. 6. d Yan›t›n›z yanl›fl ise “ORDER BY” bafll›kl› bölü-
mü tekrar inceleyiniz.
7. a Yan›t›n›z yanl›fl ise “Tablo Birlefltirme” bafll›kl›
bölümü tekrar inceleyiniz.
8. e Yan›t›n›z yanl›fl ise “Tablo Birlefltirme” bafll›kl›
bölümü tekrar inceleyiniz.
9. d Yan›t›n›z yanl›fl ise “GROUP BY” bafll›kl› bölü-
mü tekrar inceleyiniz.
10. b Yan›t›n›z yanl›fl ise “ORDER BY” bafll›kl› bölü-
mü tekrar inceleyiniz.
6. Ünite - Temel SQL Komutlar› 131

S›ra Sizde Yan›t Anahtar›


S›ra Sizde 1
“SELECT * FROM iller CROSS JOIN ilogrdurum” sorgu-
su kurulmal›d›r. 81 ille 810 adet ö¤renim durumu çar-
p›ld›¤›nda 65610 adet kay›t elde edilmektedir. Bu ne-
denle 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/sql-
commands.html/
7
VER‹TABANI UYGULAMALARI

Amaçlar›m›z

N
Bu üniteyi tamamlad›ktan sonra;
‹ndekslemenin ifllevini aç›klayabilecek, avantajlar›n› ve dezavantajlar›n› liste-

N
leyebileceksiniz.

N
‹ndeks kullan›rken, kullanma kurallar›na uyacaks›n›z.
SQL sorgulamalar›nda k›s›tlamalar› kullanabileceksiniz.

Anahtar Kavramlar
• ‹ndeksleme • Alan k›s›tlar›
• Eflsiz indeks • NULL de¤eri

‹çerik Haritas›

• G‹R‹fi
Veritaban› ‹ndeksleme ve • VER‹TABANI ‹NDEKSLER‹
Uygulamalar› K›s›tlama • 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›n-
daki eriflimi h›zland›rmaya yönelik tasarlanm›fl bir veri yap›s›d›r. ‹ndeks bilgisi sa-
yesinde, tablolardaki kay›tlara eriflim h›zlan›r. ‹ndeksleme yöntemi do¤ru bir flekil-
de 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¤la-
mak 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 verile-
rin 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 çeki-
lebilmesini 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 veritabanla-
r›nda s›k kullan›lan alanlar üzerinde indeks oluflturuldu¤unda bu alanlar› kullana-
rak yap›lan aramalarda önemli performans art›fllar› elde edilebilir.
Veritabanlar›nda birincil anahtarlar ve elemanlar› eflsiz (unique) olarak tan›m-
lanm›fl kolonlar otomatik olarak indeksleme ifllemine tabi tutulurlar. Bu ifllemin ya-
p›lmas›n›n nedeni, tabloya yeni bir kay›t eklendi¤inde, eflsiz olarak tan›mlanan ko-
londaki 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›lma-
s› 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 kaydedilme-
si 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ün-


cellenmesini gerektirir.
• Yo¤un indeks kullan›m› hem veritaban› h›z›n› düflürür hem de kullan›lan sa-
bit 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 nu-
maralar›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 OG-
RENCILER isimli bir tablonun bulundu¤unu düflünelim. Tabloda OGRNO, KUL-
LANICIADI, SIFRE, BIRIMKODU ve ADSOYAD olmak üzere befl alan bulun-
maktad›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 gere-
kecektir:

CREATE INDEX KULLANICI_ADI_INDEKSI


ON OGRENCILER (KULLANICIADI);

Yukar›daki komut sayesinde, OGRENCILER tablosu üzerinde bulunan KULLA-


NICIADI kolonu üzerinde bir indeks oluflturulmaktad›r. Bu indekse KULLANI-
CI_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 = 'ahmet@anadolu.edu.tr';

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 135

‹ndekslerin bir baflka kullan›m› da, iki veya daha fazla tablo üzerindeki verile-
rin 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 listelenebilme-


si 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 tab-
losundaki OGRNO kolonu aras›nda bir efllefltirme yap›lm›flt›r. Bu veritaban›n› kulla-
narak gelifltirilen uygulamalarda yukar›daki sorgu s›kl›kla kullan›l›yorsa bu sorgu-
ya daha h›zl› cevap alabilmek için afla¤›daki gibi bir indeks yap›land›rmas›na ge-
rek 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 OGREN-
CILER tablosunun birincil anahtar› olarak tan›mlanm›flt›r. Veritaban› yönetim sis-
temleri, 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 eri-
flim 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› performan-
s›n› düflürür hem de gereksiz yere sabit disk alan› kullan›lmas›na sebep olur.
136 Veritaban› Uygulamalar›

• Say› içerikli kolonlarda indeks kullan›lmas›, karakter içerikli alanlarda kulla-


n›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›k-
la 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 in-
dekslerin güncellenmesi gereklidir.
• E¤er karakter içerikli alanlar›n içeri¤i çok s›kl›kla de¤iflmiyorsa bu tip alan-
larda 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 in-
deks 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 tablola-
r›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 in-
deks 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, indeksle-
rin arama ifllemlerinde s›kl›kla kullan›lan ve içeri¤i de¤iflkenlik gösteren sütunlar
SIRA S‹ZDE 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
D Ü fi Ü N E L ‹ M olarak tan›mlanm›flsa
D Ü fi Ü N E L ‹ M
bu kolanlar üzerinde de indeks oluflturmak veritaban› per-
formans›n› art›r›r. Bunlar›n d›fl›ndaki sütunlar üzerinde gerekmedikçe indeks kul-
lan›m›ndan kaç›n›lmal›d›r. Gereksiz indeks kullan›m› özellikle UPDATE, INSERT,
S O R U S O R U
DELETE ifllemlerinde veritaban› performans›n› düflürür ve disk kullan›m›n› art›r›r.

D‹KKAT Hangi tablolar›n


D ‹ K Kne
A Tkadar s›kl›kla sorguland›¤› belirlendikten sonra indekslemenin yap›l-
mas› daha baflar›l› sonuçlar almam›z› sa¤lar.

N N
SIRA S‹ZDE SIRA S‹ZDE
Eflsiz ‹ndeks (Unique Index) Kavram›
‹ndekslerin üzerinde durulmas› gereken özel bir biçimi de eflsiz (unique) indeks-
AMAÇLARIMIZ lerdir. Eflsiz indeksler yap› itibariyle normal indekslerle ayn› ifli görürler. Aralar›n-
AMAÇLARIMIZ
daki tek fark eflsiz indeks oluflturmak için kullan›lan sütunlardaki de¤erlerin birbir-
lerinden farkl› olmas› zorunlulu¤udur. Bir baflka deyiflle, e¤er bir sütun üzerinde
K ‹ T A P eflsiz indeks K ‹oluflturulmufl
T A P 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 bi-
TELEV‹ZYON rincil anahtar
T E L Eolabilirken
V‹ZYON birden fazla eflsiz indeks olabilmesidir. Eflsiz indeksler ve-
ri 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 ‹NTERNET
olarak indeksleme yap›ld›¤›n› ö¤renmifltik. Yap›lan bu indeksleme asl›nda eflsiz in-
dekslemedir. Eflsiz indeksleme sayesinde o sütun üzerinde yap›lan arama ifllemle-
rinde bir performans art›fl› görülür. Ayr›ca sütundaki de¤erlerin birbirlerinden fark-
l› (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 Cografi-
Bilgiler 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›n-
da yer alan PK ifadesi, kolonun birincil anahtar (Primary Key) oldu¤unu göster-
mektedir.

ULKEID( PK) ULKEADI Tablo 7.1


Ulkeler tablosunun
1 A.B.D. içeri¤i
20 M›s›r
32 Belçika
49 Almanya
81 Japonya
90 Türkiye
91 Hindistan
93 Afganistan
212 Fas

SEHIRID(PK) ULKEID SEHIRADI Tablo 7.2


Sehirler tablosunun
1 93 Kabil içeri¤i
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 ta-
n›mland›¤› için bu sütunundaki tüm de¤erlerin birbirinden farkl› olmas› garanti al-
t›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 kulla-
n›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› ol-
mas› garanti alt›na al›nm›flt›r. Örne¤in, içeri¤i Tablo 1’de verilen Ulkeler tablo-
suna yeni bir kayd›n INSERT komutuyla eklenmesi flöyle gerçeklefltirilebilir:

INSERT INTO ULKELER(ULKEID,ULKEADI)


VALUES (100,'Türkiye');
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 incelene-
cek olursa, bu tabloda ULKEADI kolonunda zaten “Türkiye” de¤erine sahip bir ka-
y›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 UL-
KEADI sütununda “Türkiye” de¤erine sahip bir kay›t bulundu¤u gerekçesiyle kay-
d›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 al-
t›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. An-
cak, ULKEID sütunu için ise ayn› fleyleri söylemek mümkün de¤ildir. Çünkü genel-
likle bir ülkede birden fazla flehir bulunur. Bu da ayn› ULKEID de¤erine sahip bir-
den fazla flehir bilgisinin olabilmesini gerektirir. Sehirler tablosunda ayn› ULKE-
ID 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›mlan-
mas› 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ütun-


lar›n› kullanarak eflsiz bir indeks tan›mlanmas›n› sa¤lar ve bu indekse SEHIR-
LER_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 SEHIR-
LER_INDEKSI isimli eflsiz indeks tan›mlanm›flsa, yukar›daki komut çal›flt›r›ld›¤›n-
da tabloda ULKEID de¤eri 90 ve SEHIRADI de¤eri “Ankara” olan bir kay›t bulun-
du¤undan dolay› veritaban›na bu eklemenin yap›lmas›na izin verilmez. E¤er bu
tablo üzerinde SEHIRLER_INDEKSI isimli bir eflsiz indeks tan›mlanmasayd› yu-
kar›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 dene-
tim ifllemleridir ve tablolardaki sütunlar›n alaca¤› de¤erlerin belirli koflullar› sa¤la-
mas›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›r-
ken bu sütun tan›m›na de¤erlerin minimum 0 ve 100 aras›nda de¤iflebilece¤ini an-
latan bir k›s›t ifadesi konulabilir. K›s›tlar›n befl farkl› çeflidi bulunmaktad›r:
7. Ünite - ‹ndeksleme ve K›s›tlama 139

1. Kontrol K›s›tlar› (Check Constraints)


2. “Not Null” K›s›tlar› (Not Null Constraints)
3. Eflsizlik K›s›tlar› (Unique Constraints)
4. Birincil Anahtar K›s›tlar› (Primary Key Constraints)
5. 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›da-
ki 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 (KATILIM-
CI_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¤la-
nabilmektedir. 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¤›da-
ki gibidir:
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¤er-
lerin s›f›rdan büyük olmas›n› sa¤lar.
• CHECK(BASKENTNUFUS < ULKENUFUS): BASKENTNUFUS sütununun al-
d›¤› 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 termi-
nolojisinde, 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›lma-
s›n› sa¤lar. “Not Null” k›s›tlamas›n› yapabilmek için, içeri¤inin null olmas› istenme-
yen 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 ta-
n›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 verita-
ban› dokümantasyonunda CREATE UNIQUE INDEX komutu yerine eflsiz k›s›tla-
r›n kullan›lmas› önerilmektedir. Eflsizlik k›s›t›n› gerçekleyebilmek için afla¤›daki ör-
nek göz önüne al›nabilir:
CREATE TABLE KITAPLAR (
KITAPID integer,
KITAPADI character varying(50),
YAYINEVI character varying(50),
YAZAR character varying(50),
ISBNNO integer UNIQUE,
FIYAT 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 in-
deks 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 olufl-
turmay› 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öste-
rildi¤i gibi ilk önce tablonun oluflturulmas› daha sonra da CREATE UNIQUE IN-
DEX komutuyla bir eflsiz indeks yarat›lmas› gerçeklefltirilebilir.

CREATE TABLE SEHIRLER ( CREATE TABLE SEHIRLER ( Tablo 7.3


KITAPID integer, KITAPID integer, Eflsiz K›s›t Oluflturma
SEHIRID integer, SEHIRID integer,
(Sol taraf) ve Eflsiz

SEHIRADI varchar(30),
‹ndeks Oluflturma
SEHIRADI varchar(30), (Sa¤ taraf).
UNIQUE(SEHIRID, SEHIRADI) )
) 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›n-
da “Not Null” k›s›t› ile eflsizlik k›s›t›n›n bir bileflimidir. Afla¤›daki SQL komutuyla ya-
rat›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 tab-
lodaki 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.
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 KITA-


PID sütununu yabanc› anahtar olarak tan›mlar. Tan›mlanan yabanc› anahtar KI-
TAPLAR 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 143

Özet

N
AM A Ç
‹ndekslemenin ifllevini aç›klayabilecek, avantaj- N
A M A Ç
SQL sorgulamalar›nda k›s›tlamalar› kullanabile-
1 lar›n› ve dezavantajlar›n› listeleyebileceksiniz. 3 ceksiniz
Veritaban›n›n performans›, buna ba¤l› olarak ça- Veri bütünlü¤ünün ve geçerlili¤inin sa¤lanmas›,
l›flan uygulama yaz›l›mlar›n›n da h›zlar›n› etkiler. veritaban› sistemleri için son derece önemlidir.
Kullan›c› say›s›n›n ve depolanan veri miktar›n›n Kifli bilgilerinin tutuldu¤u bir tabloda, kiflinin ya-
art›fl› veritaban›n›n ifllem yükünü art›r›r. Verita- fl›n›n negatif olmamas› istenen bir kofluldur. Di-
ban› yönetim sistemlerine gönderilen SQL sorgu- ¤er bir örnek kiflinin ad ve soyad›n›n bofl
lar›n›n en k›sa sürede yan›tlanabilmesi ancak ve- b›rak›lmamas›d›r. Veri tutarl›l›¤›n› veritaban› yö-
ritaban› içinde yer alan verilere en k›sa sürede netim sisteminin kontrol etmesi için, tablodaki
ulafl›lmas›yla gerçekleflir. Veritaban› yönetim sis- veri alanlar›na k›s›tlar konulabilir. Veritaban›na
teminin tablo içindeki verilerde gerçeklefltirdi¤i kay›t eklenirken, VTYS k›s›tlar› kontrol eder, e¤er
arama ifllemini h›zland›ran yönteme indeksleme uymayan bir durum varsa hata mesaj› döndüre-
ad› verilmektedir. ‹ndeksleme, bir kitaptaki için- rek veri kayd›n› engeller.
dekiler sayfas›na benzetilebilir.

N
AM A Ç
‹ndeks kullan›rken, kullanma kurallar›na uya-
2 caks›n›z.
‹ndekslemenin afl›r› kullan›m›, özellikle indeks-
lerin veritaban›ndaki veri miktar›n› geçmesi, ve-
ritaban› tepki süresini azaltmak yerine art›rabilir.
‹ndekslemenin sadece s›k sorgulanan kolonlar
üzerinde yap›lmas›, nümerik de¤er içeren kolon-
lar›n tercih edilmesi, s›k de¤iflen kolonlarda uy-
gulanmamas› önerilmektedir. Birincil anahtar
olan kolonlar otomatik olarak indekslendi¤in-
den, indeksleme gerekli de¤ildir.
144 Veritaban› Uygulamalar›

Kendimizi S›nayal›m
1. ‹ndeks nedir? 6. Bir kolondaki de¤erlerin eflsiz olmas› için kullan›lan
a. Veritaban› içindeki bütün veriler için içindekiler yöntem afla¤›dakilerden hangisidir?
sayfas›d›r. a. Yabanc› anahtar kullan›m›
b. Sorgular› h›zland›rmak için kullan›lan bir veri b. Eflli indeks
yap›s›d›r. c. Eflsiz indeks
c. Birincil anahtar kolonunda yer alan bilgilerdir. d. Yabanc› indeks
d. Eflsiz kolon de¤erleridir. e. Referans k›s›t› kullan›m›
e. Her kay›t için verilen özel numaralard›r.
7. Eflsiz k›s›t yöntemi yerine kullan›labilecek yöntem
2. ‹ndeksleme ifllemi yap›ld›¤›nda, afla¤›daki SQL ko- afla¤›dakilerden hangisidir?
mutlar›ndan hangisi daha h›zl› çal›flabilir? a. Eflsiz referans
a. SELECT b. ‹kincil anahtar
b. UPDATE c. Yabanc› anahtar kullan›m›
c. INSERT INTO d. Koflullu k›s›t
d. CREATE TABLE e. Eflsiz indeks
e. CREATE DATABASE
8. Afla¤›dakilerden hangisi, birincil anahtar kullan›m›-
3. NULL’›n anlam› nedir? n›n sorunlar›ndan biridir?
a. Bir de¤er atanmad›¤›n› gösterir. a. Birden fazla tabloda ayn› isimde bulunan kolon-
b. Birincil anahtarl› alanlara girilen de¤erlerdir. lar birincil anahtar olarak tan›mlanamazlar.
c. ‹ndeks veri yap›s›d›r. b. Tablodaki sadece bir kolon birincil anahtar ola-
d. Negatif de¤er anlam›na gelir. rak tan›mlanabilir.
e. Eflsiz bir say›d›r. c. Birincil anahtar kolonlar› sadece nümerik de¤er
içeren kolonlardan oluflur.
4. Hangi kolonlar›n indekslenmesi, VTYS’lerinin h›z›n› d. Birincil anahtar olarak tan›mlanan kolon yaban-
art›r›r? c› anahtar olarak tan›mlanamaz.
a. S›k de¤iflen e. Yabanc› anahtar ve birincil anahtar ayn› tabloda
b. ‹çinde karakter dizisi bulunduran olamaz.
c. S›k veri eklenen
d. S›k sorgulanan 9. KITAPLAR ve SIPARIS adl› tablolar, s›ras›yla kitap ta-
e. ‹çinde evet ve hay›r gibi iki de¤er içeren n›mlar›n› ve siparifl edilen kitaplar› içermektedirler. Bu-
na göre, olmayan bir kitab›n siparifl edilmesini engelle-
5. Referans bütünlü¤ü nedir? mek için, SIPARIS tablosunun tan›m›nda kullan›lmas›
a. ‹ki tabloda yer alan bilgilerin bir araya getirile- gereken anahtar kelime afla¤›dakilerden hangisidir?
rek tek tablo halinde bütünlefltirilmesidir. a. REFERENCES
b. Tabloya kay›t eklerken, di¤er bir tabloya veri b. SELECT
eklenmesidir. c. PRIMARY_KEY
c. Birbirlerine referans gösterilen alanlar›n bulun- d. FOREIGN_KEY
du¤u farkl› tablolardaki kay›tlar›n bütünlü¤üdür. e. CREATE TABLE
d. Kolonlardaki verilerin belli k›s›tlarla kontrol edil-
mesidir. 10. Eflsiz indeks yaratmak için kullan›lan SQL komutu
e. Birincil anahtar ve yabanc› anahtar aras›ndaki afla¤›dakilerden hangisidir?
iliflkinin kurulmas›d›r. 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 Yan›t›n›z yanl›fl ise “Girifl” bafll›kl› bölümü tekrar PostgreSQL El kitab›
ediniz. http://www.postgresql.org/docs/8.0/interactive/inde-
2. a Yan›t›n›z yanl›fl ise “Veri Taban› ‹ndeksleri” xes-unique.html
bafll›kl› bölümü tekrar ediniz. http://www.postgresql.org/docs/8.1/static/ddl-constra-
3. a Yan›t›n›z yanl›fl ise “K›s›tlar ve K›s›tlamalar ints.html
(Constraints)” bafll›kl› bölümü tekrar ediniz. S. Buxton (2009). Database design: know it all. Amster-
4. d Yan›t›n›z yanl›fl ise “K›s›tlar ve K›s›tlamalar dam; Boston: Morgan Kaufmann Publishers/Elsevier.
(Constraints)” bafll›kl› bölümü tekrar ediniz.. P. Revesz (2010). Introduction to Databases. New York:
5. c Yan›t›n›z yanl›fl ise “K›s›tlar ve K›s›tlamalar Springer.
(Constraints)” bafll›kl› bölümü tekrar ediniz.
6. c Yan›t›n›z yanl›fl ise “Veri Taban› ‹ndeksleri”
bafll›kl› bölümü tekrar ediniz.
7. e Yan›t›n›z yanl›fl ise “K›s›tlar ve K›s›tlamalar
(Constraints)” bafll›kl› bölümü tekrar ediniz.
8. b Yan›t›n›z yanl›fl ise “K›s›tlar ve K›s›tlamalar
(Constraints)” bafll›kl› bölümü tekrar ediniz.
9. a Yan›t›n›z yanl›fl ise “K›s›tlar ve K›s›tlamalar
(Constraints)” bafll›kl› bölümü tekrar ediniz.
10. d 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
Bu üniteyi tamamlad›ktan sonra;

N
Co¤rafi bilgi sistemlerindeki standartlar›n önemini aç›klayabileceksiniz.

N
XML veri biçimini kullanabileceksiniz.

N
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 • GML
• Co¤rafi Bilgi Sistemleri • OpenGIS Standartlar›
• XML veri tipi

‹çerik Haritas›

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

G‹R‹fi
Co¤rafi konumlar› bilgiyle birlefltiren sistemlere Co¤rafi Bilgi Sistemleri ad› verilmek-
tedir. ‹nternet ve web, co¤rafi bilgi sistemlerinde on sene öncesine göre ciddi de¤i-
fliklikler gerçekleflmesine neden olmufltur. Birbiriyle ba¤lant›l› bilgisayarlar›n olufltur-
du¤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, ‹n-
ternet 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. Yay-
g›nlaflmayla birlikte gelen en büyük sorunlardan biri, co¤rafi nesnelerin her sis-
temde 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 model-
leri 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›mla-
r›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 For-
ce: ‹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 flekil-
de, birbirinden farkl› donan›mlar üzerinde çal›flan, de¤iflik iflletim sistemleri bulu-
nan ve farkl› a¤ iletim yöntemleri kullanan yerel a¤lar›n birbirleriyle haberleflebil-
meleri 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 ça-
l›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 sor-
gu komutlar›, di¤er bir veritaban› yönetim sisteminde de ayn› veri seti üzerinde ha-
ta 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 olu-
flur. Ç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› ö¤e-
leri (ç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.
“<” ve “>” karakterleri aras›nda yer alan etiketlerin bir araya gelmesiyle oluflur.
XML dosyalar›, geniflleme olanaklar› nedeniyle yayg›n bir kullan›m alan›na kavufl-
mufltur. Ö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.open-
geospatial.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›mlan-
maktad›r. Gelifltirilen standartlar›n temelinde XML standard›na dayal› GML (Geog-
raphic 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 veri-
lerin, 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 ifl-
lemleri de çeflitlendirir. Bir sistemde olmayan bir özelli¤in, di¤er bir sistemde olma-
s› 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 ta-
raf›ndan denetlenmektedir. Firman›n haz›rlad›¤› yaz›l›m OpenGIS standard›nda
yer alan veri dosyalar›n› okumal› ve oluflturdu¤u veri dosyalar› OpenGIS standar-
d›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, ye-
ni özellikler eklendikçe, eski biçimin de okunabilmesidir. Etiketlerin aç›lmas› ve
kapanmas› ve aralar›na verilerin konulmas›yla oluflturulur. Örne¤in, <boy-
lam>30.52082243817922</boylam> 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)
8. Ünite - OpenGIS Standartlar› 149

fiekil 8.1
<kisi> XML veri örne¤i
<ad>Ahmet</ad>
<soyad>Ercan</soyad>
<yas>21</yas>
</kisi>

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¤er-
lendirilece¤i <boylam koorsis=”wgs84”> 30.52082243817922 </boy-
lam> olarak ifade edilebilir.
XML isim alanlar› (XML namespace) , etiketlere anlam yükleyen yap›lard›r. Ör-
ne¤in, GML isim alan›nda bir köprünün tan›mlanmas› <gml:bridge>Boğazi-
çi</gml:bridge> ifadesiyle yap›labilir. ‹sim alan› bir dosya halinde XML dos-
yas›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.

fiekil 8.2

<element name="kisi" type="ex:kisiTipi" /> Kifli veri yap›s› için


<complexType name="kisiTipi"> flema dosyas›
<sequence>
<element name="ad" type="string"/>
<element name="soyad" type="string"/>
<element name="yas" type="integer"/>
</sequence>
</complexType>

OPENGIS STANDARTLARI
Uzamsal veritaban›, co¤rafi nesnelerin özelliklerinin depolanmas› için kullan›l›r.
Geleneksel anlamda bir veritaban› olmakla birlikte, geometrik nesneler de tutul-
makta ve co¤rafi hesaplamalar konusunda yordamlar bulunmaktad›r. Sa¤lad›¤›
avantajlar flunlard›r:
• fiekillerin geometrik özellikleri depolan›r. Veritaban›nda, bir binan›n koordi-
natlar›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 flekille-
rin seçilmesini kolaylaflt›r›r. Koordinatlar düflünülmeden indekslenen verita-
banlar›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 ki-
lometreden daha yak›n olan binalar h›zl› bir flekilde sorguyla döndürülebilir.
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 ba-
r›nd›ran ticari anlamda üretilmifl çeflitli veritaban› yönetim yaz›l›mlar› bulunmakta-
d›r. Di¤er bir alternatifse, ücretsiz aç›k kaynak kodlu sistemlerdir. PostreSQL veri-
taban› 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. Standart-
larda kullan›lan kavramlar, gereklilikler ve uygulama kurallar› OGC Referans Mo-
deli (ORM) denilen bir modelde yer al›r. ORM’nin kendisi bir standart de¤il, stan-
dartlarda 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›n-
da 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 kolaylafl-
t›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 iz-
leyicisi üzerinden eriflilebilmesi, 4) farkl› bilgisayar sistemleri üzerinden bilgiye eri-
flilebilmesi, 5) veritaban›n› kullan›c›lardan soyutlamas› ve kullan›c›ya hissettirme-
den ç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 getir-
mifltir. OGC’nin gelifltirdi¤i standartlar›n bir k›sm› web üzerinden kullan›lan co¤ra-
fi bilgi sistemleriyle ilgilidir. 1990’lar›n sonundan beri gelifltirilen standartlar, co¤-
rafi uygulamalar›n yayg›nlaflmas›na neden olmaktad›r. Bu konuyla ilgili olarak ve-
rilebilecek örneklerden biri OGC standartlar› aras›nda yer alan, Web Harita Servi-
si (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 geliflti-
rilmesi 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.
8. Ünite - OpenGIS Standartlar› 151

fiekil 8.3

<?xml version="1.0" encoding="UTF-8"?>


Eskiflehir
<kml xmlns="http://www.opengis.net/kml/2.2"
merkezini 1000

xmlns:gx="http://www.google.com/kml/ext/2.2"
metre
yükseklikten
xmlns:kml="http://www.opengis.net/kml/2.2" gösterilmesini
xmlns:atom="http://www.w3.org/2005/Atom"> sa¤layan KML
<Document> dosyas›
<name>Eskisehir.kml</name>
<Placemark>
<name>Eskisehir</name>
<LookAt>
<longitude>30.52082243817922</longitude>
<latitude>39.77662108800603</latitude>
<altitude>0</altitude>
<range>100</range>
<tilt>0</tilt>
<heading>0</heading>
<altitudeMode>relativeToGround</altitudeMode>
<gx:altitudeMode>relativeToSeaFloor
</gx:altitudeMode>
</LookAt>
<Point>
<coordinates>30.51837232350782,39.77650863996553,0
</coordinates>
</Point>
</Placemark>
</Document>
</kml>

KML dosyas›, popüler ve ücretsiz bir yaz›l›m olan Google Earth içinden okuna-
bilir. Uzant›s› kml olarak herhangi bir dizine kaydedilen dosya, üzerine çift t›klan-
d›¤›nda Google Earth taraf›ndan aç›l›r ve Eskiflehir’in merkezi olan Köprübafl› mev-
kii 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 ifa-
de 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 <Feature fid="133" featureType="building"


dikdörtgen bir Description="is yeri">
<Polygon name="extent" srsName="epsg:63633">
binan›n ifade
<LineString name="extent" srsName="epsg:63633">
edilmesi

<CData>
8345.53552,309375.875432
8345.53645,309375.875432
8345.53645,309375.894323
8345.53552,309375.894323
</CData>
</LineString>
</Polygon>
</Feature>

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 nes-
nenin tan›mlanmas› gerekti¤ini belirtir. Örne¤in, MultiPolygon ve Polygon nesne-
lerini birlefltiren çizginin üzerinde “1..*” yazmaktad›r. Bu, MultiPolygon nesnesinin
birden fazla Polygon nesnesinden olufltu¤unu belirtmektedir.
fiekil 8.6

Geometrik bir Geometry SpatialReferenceSystem


nesnenin
tan›mlanabilmesi
için gerekli
kavramlar ve
birbirleriyle olan Point Curve Surface GeometryCollection
iliflkileri
1..* 2..*
Polygon
MultiSurface MultiCurve MultiPoint
LineString
1..*
1..*
MultiPolygon MultiLineString

Line LinearRing
1..*
8. Ünite - OpenGIS Standartlar› 153

Her geometrik nesnenin, koordinatlar› da standartlaflm›flt›r. GML flemalar›, ko-


ordinatlar›n nas›l tan›mlanmas› gerekti¤ini belirler. fiekil 7’de <coord> veri tipi-
nin nas›l tan›mlanmas› gerekti¤ini içeren flema dosyas›n›n bir parças› yer almakta-
d›r. Koordinat eksenleri olan x, y ve z’nin s›ras› <sequence> etiketi içinde tan›m-
lanmaktad›r. fiekil 8’de nokta (Point) nesnesi içinde yer alan koordinat bilgisinin
(coord) bir örne¤i görülmektedir.
fiekil 8.7
<element name="coord" type="gml:CoordType" />
<complexType name="CoordType">
<coord> veri yap›s›
<sequence>
içinde flema bilgisi

<element name="X" type="decimal"/>


<element name="Y" type="decimal" minOccurs="0"/>
<element name="Z" type="decimal" minOccurs="0"/>
</sequence>
</complexType>

fiekil 8.8
<Point>
<coord><X>5.0</X><Y>40.0</Y></coord>
Bir nokta (point)

</Point>
nesnesi

fiekil 8.9
<LineString>
<coord><X>0.0</X><Y>0.0</Y></coord>
Çizgi dizisi
(LineString) tan›m›
<coord><X>20.0</X><Y>35.0</Y></coord>
<coord><X>100.0</X><Y>100.0</Y></coord>
</LineString>

fiekil 8.10
s s s e s e çizgi dizisi
(LineString)
örnekleri

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 di-
zisinin birlefliminden oluflmaktad›r. fiekil 11, bu veri yap›s›n›n biçimini göster-
mektedir.
154 Veritaban› Uygulamalar›

fiekil 8.11

‹ki çizgi <MultiLineString>


dizisininden <lineStringMember>
oluflan çoklu çizgi <LineString>
dizisi <coord><X>56.1</X><Y>0.45</Y></coord>
<coord><X>67.23</X><Y>0.98</Y></coord>
</LineString>
</lineStringMember>
<lineStringMember>
<LineString>
<coord><X>46.71</X><Y>9.25</Y></coord>
<coord><X>56.88</X><Y>10.44</Y></coord>
</LineString>
</lineStringMember>
</MultiLineString>

Ö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 özellik-
lerdendir. 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 bulun-
du¤u gibi bilgiler de tan›ma eklenebilir. Model fiekil 12’de ifade edilmektedir.
fiekil 8.12

Town (flehir) Geometry


modeli 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 bi-
nalar›n da tan›mlanmas› için gerekli deste¤i sa¤lamaktad›r. fiekil 13’de Eskiflehir’in
modeli yer almaktad›r. <CityModel> ve </CityModel> etiketleri aras›nda, Es-
kiflehir’le ilgili parametreler XML etiketleri halinde yer almaktad›r. Örne¤in, Eskifle-
hir’i kapsayan alan <gml:boundedBy> ve </gml:boundedBy> etiketleri ara-
s›nda dikdörtgen bir alan olarak tan›mlanmaktad›r. fiehirde yer alan co¤rafi ö¤eler,
<cityMember> etiketiyle kapsanan alanda yer al›r. Eskiflehir içinden geçen Por-
suk çay› <River> ve </River> etiketleri aras›nda tan›mlanm›flt›r.
8. Ünite - OpenGIS Standartlar› 155

fiekil 8.13
<?xml version="1.0" encoding="UTF-8"?> Eskiflehir’in flehir
<CityModel> modeli
<gml:name>Eskisehir</gml:name>
<gml:boundedBy>
<gml:Box>
<gml:coord>
<gml:X>0.0</gml:X><gml:Y>0.0</gml:Y>
</gml:coord>
<gml:coord>
<gml:X>100.0</gml:X><gml:Y>100.0</gml:Y>
</gml:coord>
</gml:Box>
</gml:boundedBy>
<cityMember>
<River>
<gml:description>Eskisehir
icinden gecer</gml:description>
<gml:name>Porsuk</gml:name>
<gml:centerLineOf>
<gml:LineString>
<gml:coord>
<gml:X>0</gml:X><gml:Y>50</gml:Y>
</gml:coord>
<gml:coord>
<gml:X>70</gml:X><gml:Y>60</gml:Y>
</gml:coord>
<gml:coord>
<gml:X>100</gml:X><gml:Y>50</gml:Y>
</gml:coord>
</gml:LineString>
</gml:centerLineOf>
</River>
</cityMember>
</CityModel>

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¤lana-
rak, 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 ve-
rifli yapmas›n› kolaylaflt›rmaktad›r.
Belirli bir anda gerek duyuldu¤unda, belirli bir co¤rafi bölgedeki istenen özel-
likleri gösteren haritalar›n oluflturulmas› gerekebilir. Haritan›n oluflturulmas› ifllemi
dinamik bir süreçtir. ‹stenen nitelikler veri kayna¤›nda sorgulanarak bir araya ge-
tirilir 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). Harita-
lar›n WMS hizmeti veren sunucuda dinamik olarak oluflturulmas›n› ve talepte bu-
156 Veritaban› Uygulamalar›

lunan yaz›l›ma aktar›lmas›n› sa¤lar. Hizmet, servis seviyesindeki metaverinin su-


nulmas›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 üze-
rinden ‹nternet URL adresleri (URL: Universal Resource Locator) kullan›larak ger-
çeklefltirilebilmektedir.
fiekil 8.14

WMS hizmeti
sunan sunucunun
dinamik olarak Web
haritalar› Internet Sunucusu
oluflturmas›

Veritaban›
Sorgu
Harita

‹stemci

WFS (Web Feature Service), veritaban›nda yer alan co¤rafi nesnelere ve bunla-
r›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 özel-
likleri talep edildi¤inde (fiekil 15), WFS flehrin nüfusunu, merkezinin koordinatla-
r›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 gelmek-
tedir. 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 <?xml version="1.0" ?>


gönderilen flehir <DescribeFeatureType version="1.1.0" service="WFS"
outputFormat="text/xml; subtype=gml/3.1.1"
nesnesinin
<TypeName>myns:City</TypeName>
özelliklerinin

</DescribeFeatureType>
al›nmas›n›
sa¤layan XML
komut

Web kapsama servisi (WCS: Web Coverage Service) bir sunucu taraf›ndan su-
nulan bilgilere, yaz›l›mlar›n eriflimini sa¤layan bir standartt›r. Sunucu taraf›ndan
imge veya vektörel olarak harita döndürüldü¤ü WMS’in aksine, WCS GML tipinde
veri döndürür (fiekil 16). Bu veriler istemci taraf›nda haritaya dönüfltürülerek kul-
lan›c›ya gösterilebildi¤i gibi, veri ifllendikten sonra baflka amaçlar için de kullan›-
labilir. Co¤rafi nesnelerin baz› özellikleri sorgulamaya yarayan WFS standard›n›n
aksine, WCS bir kapsama alan›ndaki bilgileri bir bütün halinde elde etmeye yarar.
8. Ünite - OpenGIS Standartlar› 157

fiekil 8.16
WCS özelli¤iyle
istemci taraf›nan
Web yap›lan sorguya
Internet Sunucusu karfl›l›k HTTP
sunucusunun GML
olarak veriyi
sa¤lamas›
Veritaban›
Sorgu
GML
veri

‹stemci

Sensör Standartlar›
Belirli bir co¤rafya üzerinde baz› de¤erleri (örne¤in ›s›, bas›nç, rüzgar fliddeti, günefl
›fl›¤›n›n fliddeti gibi) okumaya yarayan sensörlerin modellenmesi ve co¤rafi nesneler-
le iliflkilendirmesi için oluflturulan standartlardan biri, GML standard›n›n bir eki olan
Sensor Model Dilidir (Sensor Model Language: SensorML). Co¤rafi modelin güncel-
lenmesi ve çeflitli amaçlarla kullan›labilmesi için sensörlerden al›nan veriler gereklidir.
Örne¤in, bir bölgenin rüzgardan ne kadar enerji üretebilece¤inin belirlenmesi, ancak
bölgede kurulu rüzgar ölçerlerden (anemometre) al›nan veriler kullan›larak yap›labi-
lir. Kullan›lan sensörlerin uzamsal koordinatlar›n›n yan›nda, ölçüm s›kl›¤›, çözünürlük
ve hassasiyet gibi özelliklerinin kodlanmas›n› sa¤lar. Verilerin co¤rafi modellere göre
ifllenmesi için di¤er yaz›l›mlara destek sa¤lar.
Dönüfltürücü ‹flaret Dili (TML: Transducer Markup Language), yaz›l›mlar›n dönüfl-
türücülerle ilgili ifllemler yapmas›n› sa¤layan GML’e dayal› bir dildir. Dönüfltürücüle-
rin elektronik ve mekanik özellikleri, hassasiyetleri, hata oranlar› bu dil içinde flema-
larla tan›mlanm›flt›r. Dönüfltürücüler, bir fiziksel özelli¤i bir di¤erine çeviren araçlard›r.
Örne¤in, sensörleri s›cakl›k de¤erini elektrik sinyaline çevirirler. Motorlar elektri¤i
mekanik enerjiye çevirmekte kullan›lan dönüfltürücülerdir.
Di¤er bir standart olan O&M standard›, gözlem ve ölçümlerin standardizasyonu-
nu (O&M standard›) sa¤lamaktad›r. Gözlem, bir zaman aral›¤›nda veya belirli bir
anda gerçekleflen bir olaya atanan bir say›, de¤er veya semboldür. Sensör verileri,
ölçülen co¤rafi nesnelerin nitelikleri, toplam olarak gözlemi oluflturur. Örne¤in, bir
selin gözlemi, belirli bir nehirdeki su seviyelerinin ölçümleri, nehir yata¤›n›n taflma
miktar› ve ekili alanlardaki kay›p miktar› toplam olarak bir gözlem olarak tan›mla-
nabilir. Gözlemler, co¤rafi olarak önemli olaylard›r ve OGC’nin gelifltirdi¤i O&M
standard›, gözlemlerin standart bir flekilde tan›mlanmas›n› sa¤lamaktad›r.
Sensörlerin tan›mlanmas› ve özelliklerinin kodlanmas› d›fl›nda, bu sensörlere
veya dönüfltürücülere olan eriflimin de web servisleri üzerinden sa¤lanmas› için
çeflitli standartlar OGC taraf›ndan tan›mlanm›flt›r. OpenGIS SOS (Sensör Gözlem
Servisi: Sensor Observation Service), gözlemlerin sorgulanmas›, getirilmesi ve çe-
flitli özelliklerin süzülmesi için gelifltirilmifltir. SOS kullan›larak, su seviye sensörle-
ri, dünya gözlem uydular› gibi dinamik sensörlerin verileri belirli bir co¤rafi bölge
için al›nabilmektedir.
158 Veritaban› Uygulamalar›

SPS (Sensör Planlama Servisi: Sensor Planning Service), yine web servisleri
üzerinden, sensörlerin çeflitli özelliklerinin de¤ifltirilmesi ve kalibrasyonlar›n›n ya-
p›lmas›n› sa¤lar. Sensörlerden yeni bir veri al›nd›¤›nda, istemcide çal›flan yaz›l›-
m›n haberinin olabilmesi için SAS (Sensör Uyar› Servisi: Sensor Alert Servisi) stan-
dard› gelifltirilmifltir. Örne¤in, bir sel bask›n› tehlikesi oldu¤unda, su seviye sen-
sörlerindeki anormal bir art›fl, bu flekilde istemci sistemine bir uyar› olarak gön-
derilebilmektedir.

OpenGIS Standartlar›n›n Yararlar›


Co¤rafi verilerin elde edilmesi yorucu bir süreçtir. Kartografi, fotogrametri, uzak-
tan alg›lama, görüntü iflleme ve uzamsal istatistikler co¤rafi verilerin elde edilmesi
için gerekli teknik araçlard›r. Özellikle yerin alt›ndaki bilgilerin elde edilmesi için,
sondaj çal›flmalar› ve yer alt› görüntüleme sistemlerinin kullan›lmas›na gerek var-
d›r. Bütün bilgilerin bir anda elde edilmesine imkan olmad›¤› için, veriler elde edil-
dikçe farkl› veri kaynaklar›na kaydedilir. Veri kaynaklar› birbirinden uzakta sunu-
cu sistemler üzerinde yer alabilir.
OpenGIS standartlar›n›n temel amaçlar›ndan biri, da¤›t›k veri kaynaklar›n› web
teknolojileri üzerinden bir araya getirmektir. Gelifltirilen standartlar, web’in farkl›
bilgi kaynaklar›n› bir araya getirme düflüncesiyle uyum içindedir. Zira, co¤rafi ve-
rileri tek bir yerde toplamak ve güncel flekilde bir arada tutmak imkans›zd›r. Co¤-
rafi verileri güncelleyen ve dinamik sensör verileriyle bütünlefltiren her zaman
farkl› kurulufllar olmufltur. OpenGIS standartlar› sayesinde, farkl› sunucularda bu-
lunan ama Internet üzerinden birbirine ba¤l› sistemler birbirlerinden veri aktarabil-
mekte ve paylafl›ld›kça bilgi birikimi büyümektedir.
OGC ilk kuruldu¤u dönemlerde, veri yap›lar› konusundaki standartlar üzerin-
de çal›fl›rken, 2000’li y›llar web teknolojileri üzerinden verinin aktar›lmas› üzerine
çal›flmalar yürütmüfltür. Günümüzde, OGC’nin üzerinde çal›flt›¤› konu sistemlerin
bütünlefltirilmesi üzerine olmaktad›r.
8. Ünite - OpenGIS Standartlar› 159

Özet

N
AM A Ç
Co¤rafi bilgi sistemlerindeki standartlar›n öne- N
AM A Ç
Bafll›ca OpenGIS standartlar›n›n nas›l uygulan-
1 mini kavrayacaks›n›z. 3 d›¤›n› göreceksiniz.
Bilgi teknolojilerindeki standartlar, farkl› ifllem Co¤rafi nesneler ve veriler, sabit harita bilgilerin-
sistemlerine ve donan›m birimlerine sahip bilgi- den ve üzerinde yer alan co¤rafi nesnelerden
sayarlar›n birbirleriyle iletiflim kurabilmesine ve oluflmaz. Bazen, canl› bilgilerin harita üzerine ifl-
veri de¤iflimi yapabilmesini sa¤lar. Örne¤in, web lenmesi ve gerekti¤inde bu bilgilerin kullan›la-
ve ‹nternet standartlar› sayesinde milyarlarca bil- rak baz› ifllemler yap›lmas› gerekebilir. Bu amaç-
gisayar bir arada çal›flabilmektedir. Benzer flekil- la, OGC sensörler ve dönüfltürücülerle ilgili, Sen-
de, co¤rafi verilerin modellenmesi ve standart- sorML, SML ve O&M gibi çeflitli standartlar gelifl-
laflmas› için, OGC (Open Geospatial Consorti- tirmifltir.

N
um) konsorsiyumu, yüzlerce kuruluflun katk›la-
r›yla çal›flmaktad›r. Web üzerinden sa¤lanan haritalar›n nas›l olufl-

N
AM A Ç

4 turuldu¤unu anlayacaks›n›z.
A M A Ç XML veri biçimini kullanabileceksiniz. Belirli bir anda gerek duyuldu¤unda, belirli bir
2
Gelifltirilen standartlar içinde, co¤rafi nesneleren co¤rafi bölgedeki istenen özellikleri gösteren ha-
XML dosya biçiminde tutulmas›n› yarayan GML ritalar›n oluflturulmas› için, Web Harita Hizmeti
biçimi önemli yer tutar. Sistemler aras›nda veri (Web Map Service) standard› gelifltirilmifltir. Ha-
aktar›m› için OGC taraf›ndan gelifltirilen standart- ritalar›n WMS hizmeti veren sunucuda dinamik
lar›n büyük k›sm› GML’ye dayan›r. Web üzerin- olarak oluflturulmas›n› ve talepte bulunan yaz›l›-
den bilgi aktar›m› için, web servisi standartlar› ma aktar›lmas›n› sa¤lar. Hizmet, servis seviyesin-
gelifltirilmifltir. Örne¤in, web harita hizmeti, ‹n- deki metaverinin sunulmas›n›, co¤rafi ve uzam-
ternet izleyicisi üzerinden kullan›c›n›n haritalara sal özellikleri iyi belirlenmifl haritan›n oluflturul-
eriflmesini ve ekran›nda göstermesini sa¤lamak- mas›n› kolaylaflt›r›r. Web harita ifllemlerine, stan-
tad›r. dart bir ‹nternet izleyicisi üzerinden ‹nternet URL
adresleri (URL: Universal Resource Locator) kul-
lan›larak ulafl›labilir.
160 Veritaban› Uygulamalar›

Kendimizi S›nayal›m
1. OpenGIS nedir? 5. Web kapsama servisi ve Web Harita Servislerinin
a. Co¤rafi Bilgi sistemlerinin altyap›s› için gelifltiri- aras›nda döndürdü¤ü veri aç›s›ndan fark› afla¤›dakiler-
len standartlar›n genel ad›d›r. den hangisidir?
b. Aç›k kaynak kodlu co¤rafi bilgi sistemi yaz›l›m- a. Web harita servisi GML veri döndürürken, Web
lar›d›r. Harita Sistemi CityML türünde dosya getirir.
c. Uzamsal verilerin, biçimi XML türevi biçimde tu- b. Web kapsama servisi imge döndürürken, Web
tulmas›n› tarif eden bir standartt›r. harita sistemi GML türünde veri döndürür.
d. Co¤rafi bilgi sistemleri için standartlar gelifltiren c. Web kapsama sistemi, arka planda yer alan im-
bir vak›f kurulufludur. ge ve üst katman olarak sensör verilerini döndü-
e. Web üzerinden harita uygulamalar› gelifltirmek rürken, Web Harita Servisi sadece vektörel veri
için kurulmufl ticari bir flirkettir. döndürür.
d. Web kapsama servisi bilgi döndürürken, Web
2. GML dilinin türetildi¤i dosya biçimi nedir? Harita Servisi imge ve vektörel dosya getirir.
a. SHP e. Web harita servisi JPG imge dosyas› türünde bil-
b. HTML gi döndürürken Web kapsama servisi SVG for-
c. Adobe Flash mat›nda dosya döndürür.
d. DOC
e. XML 6. SensorML dilinin temel ifllevi afla¤›dakilerden hangi-
sidir?
3. Web harita hizmeti (Web Map Service) nedir? a. Sensörlerin parametrelerinin de¤ifltirilmesini
a. Web üzerinden haritalara bakmak için kullan›- sa¤lamak
lan yaz›l›md›r. b. Sensörlerin de¤erlerinin ö¤renilmesini sa¤lamak
b. ‹stemci taraf›ndan belirlenen kriterleri sa¤layan c. Haritalar›n üzerinde bir katman olarak, sensör-
haritalar› sunucuda oluflturmak için kullan›lan lerden gelen gerçek zamanl› verinin kul-
hizmettir. lan›lmas›n› sa¤lamak
c. Belirli bir koflula uyan co¤rafi bir bölgedeki d. Yeni sensör eklemek
uzamsal nesnelerin niteliklerini istemciye akta- e. Çal›flmayan veya yanl›fl veri veren sensörlerin
ran servistir. belirlenmesini sa¤lamak
d. Web üzerinden uzamsal veritaban› tasarlamak
için kullan›lan bir araçt›r. 7. Web Kapsama Servisi (WCS) ve Web Özellik Servisi
e. Veritaban› yönetim sistemlerinin co¤rafi nesne- standartlar› aras›ndaki temel fark afla¤›dakilerden han-
leri depolayabilmesini sa¤layan standartt›r. gisidir?
a. WFS GML türünde dosyalar döndürürken, WCS
4. Web kapsama servisinin (WCS: Web Coverage Ser- üzerine özelliklerin ve verilerin ifllendi¤i imge
vice), bir istemcinin talebi do¤rultusunda oluflturarak dosyalar›n› getirir.
döndürdü¤ü verinin biçimi nedir? b. WFS, co¤rafi nesnelerin baz› özellikleri sorgula-
a. GML maya yararken, WCS bir kapsama alan›ndaki bil-
b. HTML gileri bir bütün halinde elde etmek için kullan›-
c. SHP l›r.
d. Tablo c. WFS çeflitli koflullara göre co¤rafi nesnelerin
e. CityML özelliklerini harita olarak getirirken, WCS verita-
ban›ndaki bütün bilgileri döndürür.
d. WCS, veritaban› kullanarak ifllevini gerçekleflti-
rirken, WFS bütün verileri XML biçiminde dos-
yalarda tutar.
e. WCS web servisi olarak çal›fl›rken, WFS SQL ko-
mutlar› üzerinden çal›flt›r›labilir.
8. Ünite - OpenGIS Standartlar› 161

Kendimizi S›nayal›m Yan›t Anahtar›


8. Sensör verilerinin sorgulanmas›, getirilmesi ve çeflit- 1. a Yan›t›n›z yanl›fl ise “Girifl” bafll›kl› bölümü tek-
li özelliklerinin süzülmesi amac›yla gelifltirilen Open- rar inceleyiniz.
GIS standard› afla¤›dakilerden hangisidir? 2. e Yan›t›n›z yanl›fl ise “OpenGIS Referans Modeli
a. SKS ve Örnekler” bafll›kl› bölümü tekrar inceleyiniz.
b. SPS 3. b Yan›t›n›z yanl›fl ise “OpenGIS Referans Modeli
c. SAS ve Örnekler” bafll›kl› bölümü tekrar inceleyiniz.
d. SOS 4. a Yan›t›n›z yanl›fl ise “OpenGIS Referans Modeli
e. SML ve Örnekler” bafll›kl› bölümü tekrar inceleyiniz.
5. d Yan›t›n›z yanl›fl ise “OpenGIS Referans Modeli
9. KML biçimi, afla¤›daki yaz›l›mlar›n hangisi taraf›n- ve Örnekler” bafll›kl› bölümü tekrar inceleyiniz.
dan kullan›ld›ktan sonra standartlaflm›flt›r? 6. c Yan›t›n›z yanl›fl ise “OpenGIS Referans Modeli
a. Microsoft Office ve Örnekler” bafll›kl› bölümü tekrar inceleyiniz.
b. Internet Explorer 7. b Yan›t›n›z yanl›fl ise “OpenGIS Referans Modeli
c. Google Earth ve Örnekler” bafll›kl› bölümü tekrar inceleyiniz.
d. Google Maps 8. d Yan›t›n›z yanl›fl ise “OpenGIS Referans Modeli
e. Google Docs ve Örnekler” bafll›kl› bölümü tekrar inceleyiniz.
9. c Yan›t›n›z yanl›fl ise “OpenGIS Referans Modeli
10. Co¤rafi PostgreSQL veritaban› yönetim sistemine ve Örnekler” bafll›kl› bölümü tekrar inceleyiniz.
co¤rafi nesneleri depolamas›n› sa¤layan yaz›l›m kütüp- 10. e Yan›t›n›z yanl›fl ise “OpenGIS Referans Modeli
hanesi afla¤›dakilerden hangisidir? ve Örnekler” bafll›kl› bölümü tekrar inceleyiniz.
a. PhpBB
b. OpenGIS
c. pgAdmin
d. Drupal
e. PostGIS
162 Veritaban› Uygulamalar›

Yararlan›lan ve Baflvurulabilecek
Kaynaklar
Sherman, G. E. (2008). Desktop GIS Mapping the Pla-
net with Open Source Tools, The Pragmatic Books-
helf.
Consortium, O. G. (2005). The Importance of Going
Open. An Open Geospatial Consortium White Pa-
per
Consortium, O. G. (2007). Data Models and Interopera-
bility. An Open GIS Consortium (OGC) White Pa-
per
Buehler, K. (2007) Data Models and Interoperability.
An Open GIS Consortium (OGC) White Paper
Consortium, O. G. (2002). OpenGIS Geography Mar-
kup Language (GML) Implementation Specification,
version 2.1.2.
OpenGIS’le ilgili dokümanlar için
http://portal.opengeospatial.org/
9
VER‹TABANI UYGULAMALARI

Amaçlar›m›z

N
Bu üniteyi tamamlad›ktan sonra;

N
PostGIS yaz›l›m›n› herhangi bir bilgisayar üzerine kurabileceksiniz.

N
PostGIS Veritaban› flablonundan yeni bir veritaban› yaratabileceksiniz.
Yeni bir tablo yaratabilecek ve geometrik özellikli yeni bir kolon ekleyebile-

N
ceksiniz.
Uzamsal referans sistemlerinin neden yararl› oldu¤unu aç›klayabileceksiniz.

Anahtar Kavramlar
• PostGIS • Co¤rafi ‹ndeksleme
• Geometry Veri Tipi • Uzamsal Referans Sistemi

‹çerik Haritas›

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

G‹R‹fi
Bir yaz›l›m sisteminin kurulmas› s›ras›nda karfl›lafl›lan en önemli sorunlardan biri,
yaz›l›m taraf›ndan oluflturulacak verilerin veritaban›nda hangi biçimde saklanaca¤›
konusudur. Veri modeli, gerçek hayattaki nesnelerin, veritaban›nda nas›l depola-
naca¤›n› aç›klar. Yaz›l›m gelifltirilirken, yeni ç›kan gereksinimlere göre veri mode-
linin de¤ifltirilmesi s›k karfl›lafl›lan bir durumdur. Ancak, veri modelinde yap›lan
de¤ifliklikler yaz›l›m kodlar› üzerinde çok büyük de¤iflikliklere neden olabilir. Bu
nedenle, veri modelinin yaz›l›m gelifltirilmeden önce bilinmesi, yaz›l›m›n gelifltir-
me süresini azaltt›¤›ndan yaz›l›m firmalar› için çok önemlidir.
PostGIS, PostreSQL veritaban› yönetim yaz›l›m›na co¤rafi nesnelerin depolana-
bilmesi ve çeflitli co¤rafi sorgulamalar›n yap›lmas›n› sa¤layan aç›k kaynak kodlu
bir yaz›l›md›r. PostGIS, SQL için Basit Nitelikler (Simple Features for SQL) standar-
d›n› desteklemektedir. PostGIS’in özellikleri flöyle özetlenebilir:
• Noktalar, çizgi dizileri, poligonlar, çoklu noktalar, çoklu çizgi dizileri ve
geometrik derlemelerin, geometrik veri yap›lar› olarak veritaban›nda tan›m-
lanmas›n› sa¤lar.
• Geometrik nesnelerin birbirleriyle etkileflimini belirleyen yüklemler (predi-
cate) tan›mlar.
• Co¤rafi nesneler üzerinde uzamsal ölçümler yapmak için, alan, çevre hesap-
lamalar› gibi yordamlar sa¤lar.
• Co¤rafi anlamda kesiflim, birleflim ve fark gibi küme ifllemleri yapan yor-
damlar tan›mlar.
• Uzamsal sorgulamalar için uzamsal indeksleme sa¤lar.
• Uzamsal ve uzamsal olmayan sorgulamalar›n ayn› anda yap›labilmesini
kolaylaflt›r›r.
Bu ünitede, PostGIS’in nas›l kurulaca¤› ifllenecek ve sa¤lad›¤› temel yordamlar
anlat›lacakt›r. Ünitenin ilk bölümünde PostgreSQL veritaban›na PostGIS kütüpha-
nesinin nas›l yüklenece¤i gösterilecektir. Geometrik nesnelerin depolanabilece¤i,
uzamsal_db isimli bir veritaban› kurulacak ve üzerine co¤rafi nesnelerin eklene-
ce¤i tablolar oluflturulacakt›r. Tablolar›n oluflturulmas›yla ilgili konular, indeksle-
me ifllemi, veritaban› flablonlar›ndan veritaban› oluflturulmas› ve PostgreSQL’in yö-
netici program› üzerinden basit sorgulamalar yap›lmas› yine bu Ünitenin kapsam›
içindedir. Bu ünitede, PostGIS’in 1.5.1 sürümü kullan›lmakla birlikte, verilen ör-
nekler gelecekte ç›kacak sürümlerde de çal›flacakt›r.
166 Veritaban› Uygulamalar›

POSTGIS KURULUMU
PostGIS uzant›s›, PostgreSQL veritaban› yönetim yaz›l›m› kurulduktan sonra kurul-
maktad›r. PostGIS 1.5.1, http://postgis.refractions.net/downloads/windows adre-
sinden temin edilebilir. PostGIS paketi içinde, kendisi için gerekli çerçeve kütüp-
haneleri olan PROJ ve GEOS paketleri de oldu¤undan PostgreSQL yaz›l›m› için
olan PostGIS paketinin indirildi¤inden emin olunmal›d›r.
PostGIS kurulum dosyas› üzerine t›kland›¤› zaman, ilk pencerede (fiekil 1) ya-
z›l›m›n kullan›m lisans› koflullar› gösterilmekte ve kurulumun devam› için lisans
koflullar›n›n kabul edildi¤ine iflaret eden “I Agree” (kabul ediyorum) butonuna ba-
s›lmas› beklenmektedir. Yaz›l›m›n lisans› olan “GNU General Public License”, aç›k
kaynak kodu esas›na dayal› kullan›m politikas›d›r.
fiekil 9.1

Lisans koflullar›n›n
kabul edilmesi
ekran›

Bir sonraki aflamada, PostGIS paketi içinde yer alan alt birimler seçilmelidir.
PostGIS’le birlikte, uzamsal veritaban›n›n kurulumu (Create Spatial database) da
talep edilmelidir (fiekil 2). Bu flekilde, PostGIS kurulurken, postgis isminde
uzamsal özellikli bir veritaban› kurulurken, yeni veritaban› türetmek için de bir
flablon, template_postgis oluflturulmaktad›r.
fiekil 9.2

PostGIS ve uzamsal
veritaban›n›n
kurulumunun
istenmesi
9. Ünite - PostGIS Kurulumu ve Uygulamalar› 167

fiekil 9.3
PostgreSQL
kurulum dizinin
seçilmesi

fiekil 9.4
PostgreSQL
kurulumu
s›ras›nda verilen
postgres
kullan›c›s›n›n
flifresinin girilmesi

fiekil 9.5
Kurulacak uzamsal
veritaban›n›n
isminin verilmesi
168 Veritaban› Uygulamalar›

fiekil 9.6

Kurulumun
tamamlanmas›

Kurulum aflamalar› boyunca, daha önce kurulmufl olan PostgreSQL yaz›l›m›n›n


kurulum dizinin girilmesi (fiekil 3), yönetici ad›n›n, ba¤lant› portunun ve flifrenin
girilmesi (fiekil 4), örnek veritaban›n›n ve flablonun kurulmas› (fiekil 5) gereklidir.
Kurulum tamamland›ktan sonra (fiekil 6), PostGIS, PostgreSQL veritaban› yönetim
sistemine bütünleflik flekilde çal›flmaya bafllayacakt›r.

UZAMSAL VER‹TABANININ KURULMASI


PostGIS kurulduktan sonra, veritaban› oluflturmak için pgAdmin program› çal›flt›-
r›lmal›d›r. pgAdmin program›n›n ekran›nda, “Databases” alan› alt›nda, postgis,
PostgreSQL ve template_postgis veritabanlar›n›n kurulu oldu¤u görülebi-
lir. Bunlar›n aras›ndaki template_postgis, uzamsal veritaban› yaratmak için
kullan›lan bir flablondur. Bu ünitede yapaca¤›m›z uygulamalar için kullan›lacak
veritaban› bu flablondan türetilecektir. Bunun için, pgadmin yaz›l›m› içinde, “Data-
base” bölümüne t›kland›ktan sonra menüden “Edit”, “New Object” ve “Create Da-
tabase” seçilmelidir (fiekil 7). Ard›ndan gelen pencerede, fiekil 8’de görüldü¤ü gi-
bi parametreler girilerek, template_postgis flablonundan uzamsal_db isim-
li bir veritaban› oluflturulmal›d›r. E¤er, yap›lan ifllem hata verirse, veritaban› durdu-
rulup tekrar bafllat›ld›ktan sonra, ifllem yenilenebilir.
fiekil 9.7

Varsay›lan flekilde
PostgreSQL ve
PostGIS’le birlikte
gelen
veritabanlar›
9. Ünite - PostG‹S Kurulumu ve Uygulamalar› 169

fiekil 9.8
template_postgis
flablonundan
uzamsal_db isimli
veritaban›n›n
türetilmesi

TABLOLARIN OLUfiTURULMASI
Veritaban› oluflturulduktan sonra, tablolar›n oluflturulmas› gereklidir. Geometrik
özellikli bir tablo oluflturmak için ilk önce standart bir tablo oluflturmakla bafllan-
mal›d›r. Örne¤in, içinde yol_no (tamsay›) ve yol_isim (karakter dizisi: string)
kolonlar› bulunan yollar isimli bir tablo olufltural›m. Tablonun oluflturulmas›,
uzamsal_db seçili olarak SQL penceresi aç›larak, afla¤›daki komutla sa¤lanabilir:

CREATE TABLE yollar (yol_no INTEGER, yol_isim VARCHAR);

Ancak, geometrik özellikli bir kolonun tabloya eklenmesi gerekecektir. Bu da, tab-
lo oluflturulduktan sonra, afla¤›daki komut verilerek uzamsal bilgilerin konulaca¤›
yol_geom kolonu eklenerek gerçeklefltirilebilir (fiekil 9). AddGeometryCo-
lumn() yordam›nda, co¤rafi referans sisteminin tan›ms›z, di¤er bir deyiflle -1 ola-
ca¤› ve geometrinin üç boyutlu olmas› gerekti¤i belirtilmektedir:
SELECT AddGeometryColumn( 'yollar', 'yol_geom', -1,
'GEOMETRY', 3 );
fiekil 9.9
yollar tablosunun
ve geometrik
bilgilerin
konulaca¤›
yol_geom
kolonunun
eklenmesi
170 Veritaban› Uygulamalar›

fiekil 9.10

yollar tablosu
eklendikten sonra
uzamsal_db
veritaban›.

Veritaban›nda yollar tablosunun üzerine t›kland›¤›nda, sa¤ tarafta yer alan


SQL panosunda (SQL pane), tabloyu yarat›rken kullan›lan SQL deyimi görülmek-
tedir (fiekil 10). Burada yol_geom isimli kolonun geometry türünde oldu¤u gö-
rülmektedir. “Geometry” PostGIS’le birlikte kullan›labilen bir veri tipidir. Tablo
yarat›l›rken, do¤ru verilerin girimesi için gerekli koflutlar da CONSTRAINT’le bafl-
layan sat›rlarda tan›mlanmaktad›r. Afla¤›daki ifadelerle, binan›n geometrisinin üç
boyutlu olmas› ve referans sisteminin tan›ms›z olmas› zorlanmaktad›r. Koflullar›n
AddGeometryColum() yordam› ça¤r›ld›¤› zaman kontrol edilece¤i görülebilir.

CONSTRAINT enforce_dims_bina_geom
CHECK (st_ndims(bina_geom) = 3)
CONSTRAINT enforce_srid_bina_geom
CHECK (st_srid(bina_geom) = (-1))

Benzer bir flekilde, binalar tablosunu olufltural›m. Tabloyu, bina_no, bi-


na_isim, bina_adres ve bina_geom kolonlar›ndan oluflacak flekilde afla¤›-
daki SQL komutu yard›m›yla yaratal›m.

CREATE TABLE binalar (bina_no INTEGER,


bina_isim VARCHAR);
SELECT AddGeometryColumn( 'binalar', 'bina_geom',
-1, 'GEOMETRY', 3 );

TABLOYA VER‹LER‹N YÜKLENMES‹


Geometrik özellikleri olan, yollar isimli tabloya, verilerin yüklenmesi, “INSERT
INTO” komutuyla gerçeklefltirilir. Ancak, yolun geometrik özelliklerinin yüklen-
mesi s›ras›nda, OpenGIS standartlar›nda tan›ml› geometrik nesnelerden yararlan›-
l›r. Önceki ünitelerde görüldü¤ü gibi, bu nesneler, POINT, LINE, LINESTRING,
POLYGON gibi nesnelerdir. “Cengiz Topel Caddesi” yolunun bilgileri, SQL pane-
line yaz›lacak flu komutla eklenebilir:

INSERT INTO yollar (yol_no, yol_geom, yol_isim)


VALUES (1, ST_GeomFromText('LINESTRING(10 20 3, 30 50
4, 60 33 6)',-1), 'Cengiz Topel Caddesi');
9. Ünite - PostG‹S Kurulumu ve Uygulamalar› 171

ST_GeomFromText() yordam›, çizgi dizisinin geometrik parametrelerinin


“LINESTRING(191232 243118,191108 243242)” metninden ayr›larak,
yol_geom kolonuna yüklenmesini sa¤lar.

SIRA için,
yol_geom kolonunda geometrik bilgilerin nas›l kaydedildi¤ini görmek S‹ZDESQL panelin- SIRA S‹ZDE
de “select * from yollar” komutunu vererek, yol_geom kolonunda tutulan veri- 1
leri listeleyiniz.
D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M

Afla¤›daki SQL komutunu kullanarak binalar tablosuna geometrisi POLY-


GON tipinde olan farkl› binalar ekleyelim: S O R U S O R U

INSERT INTO binalar (bina_no, bina_geom, bina_isim)


D‹KKAT D‹KKAT
VALUES (1, ST_GeomFromText('POLYGON((0 0 0,4 0 0,4 4
0,0 4 0,0 0 0),(1 1 0, 2 1 0, 2 2 0, 1 2 0,1 1 0))',-
1), 'Kasimoglu Apt');

N N
SIRA S‹ZDE SIRA S‹ZDE

Veriler girilmeden önce, geometrik özelliklerinin geçerliAMAÇLARIMIZ


olup olmad›klar›n›n AMAÇLARIMIZ
denetimi, yaz›l›mlar›n veritaban›na geçersiz veri depolamaya çal›flarak zaman kay-
betmesini engelleyebilir. Veriler kaydedilmeden önce, geometrik niteliklerinin ge-
çerlili¤i ST_isValid() yordam›yla denetlenebilir. Örne¤in, K ‹ ‘LINESTRING(0
T A P K ‹ T A P
1,1 1)’ nesnesinin geçerlili¤i, afla¤›daki SQL komutuyla do¤rulanabilmektedir:

SELECT ST_IsValid(ST_GeomFromText('LINESTRING(0
T E L E V ‹ Z Y O N 1, 1 TELEV‹ZYON
1)'))

Di¤er yandan, geçersiz bir nesne olan “LINESTRING(1 1, 1 1)” SQL ko-
‹NTERNET ‹NTERNET
mutuyla denetlenirse, sonuç yanl›fl olarak gelecektir. Ancak, denetimin tabloya her
yeni kay›t eklendi¤inde otomatik olarak gerçeklefltirilmesi istenirse, yeni bir k›s›t
(CONSTRAINT) tablo tan›m›na eklenmelidir. Bu durum, her veri giriflinde geo-
metrik özelliklerin denetlenerek bilgisayar zaman›n› harcamas›na neden olacakt›r.
Geometrik geçerlili¤in kontrolünün her yeni kay›t eklenmesi s›ras›nda otomatik
olarak yap›lmas› için afla¤›daki SQL komutu çal›flt›r›labilir:

ALTER TABLE binalar


ADD CONSTRAINT geometri_kontrolu
CHECK (ST_IsValid(bina_geom));

UZAMSAL REFERANS S‹STEMLER‹ VE DÖNÜfiÜMLER


Tablolarda kullan›lan geometry veri tipi, bir referans noktas›na gerek duyar. Di¤er
deyiflle, bir çizgiyi tan›mlarken kullan›lan x,y,z de¤erleri bir orjine göre tan›mlanmal›d›r.
Yukar›daki örnekler, basit olmalar› için, herhangi bir referans sistemi kullan›lmadan,
referans sistemi olarak -1 de¤eri verilerek oluflturulmufltur. Ancak, verilerin kullan›lma-
lar› s›ras›nda, tablodaki verilerin bir anlam› olabilmesi için bir referans sistemine uygun
flekilde oluflturulmas› gereklidir.
Co¤rafi anlamda kullan›lan çeflitli referans sistemleri bulunmaktad›r. Referans
sistemleri, örne¤in WGS84, elipsoid olarak modellenebilen ve ideal bir küre olma-
yan dünyadaki koordinatlar› düz bir sat›ha aktarmak için kullan›lmaktad›r. Post-
GIS’de s›k kullan›lan referans sistemlerinin her birine bir numara verilmifltir. Örne-
¤in, WGS84 sisteminin numaras› 4326’d›r. Referans numaralar›yla ilgili yordamlarda,
172 Veritaban› Uygulamalar›

SRID k›saltmas›, uzamsal referans numaras› anlam›na gelmektedir. Desteklenen uzam-


sal referans sistemlerinin numaralar› ve isimleri, yukar›da oluflturdu¤umuz uzam-
sal_db isimli veritaban›ndaki tablolar aras›nda yer alan spatial_ref_sys tablo-
sunda yer almaktad›r. Tan›ml› bütün referans sistemleri tablodan flöyle sorgulanabilir:

SELECT srid, srtext, proj4text FROM spatial_ref_sys


WHERE srtext ilike '%UTM zone 36N’

SQL komutu verildi¤inde, Türkiye’yi de kapsayan 36. UTM bölgesi için kullan›-
labilen referans sistemleri görülmektedir. Türkiye için kullan›lan referans sistemle-
rinden birinin, numaras› 32636’d›r. Referans sistemiyle ilgili bilgi srtext kolo-
nunda belirtilmekte ve proj4text kolonunda da referans sistemiyle ilgili teknik
ayr›nt›lar yer almaktad›r (fiekil 11).
fiekil 9.11

36. boylam için


kullan›lan referans
sistemleri

Belirli bir referans sistemine göre tan›ml› bir tablonun geometrik kolonlar›n›n
referans sistemi ST_SetSRID() yordam›yla de¤ifltirilebilir. Bu yordam, koordi-
natlar› yeni referans sistemine göre de¤ifltirmez. Örne¤in, yukar›daki örnekler ara-
s›nda Referans sistemi, tan›ms›zdan “WGS84 /UTM 36. Bölge” sistemine flöyle ak-
tar›labilir. ST_SetSRID() yordam›, yanl›fll›kla konulan referans sistemlerini dü-
zeltmek için kullan›lmaktad›r.

SELECT ST_SetSRID(yollar.yol_geom, 32636) from yollar

Bir referans sisteminde tan›ml› verilerin di¤er bir referans sistemindeki karfl›l›k-
lar›n›n bulunmas› için, ST_Transform() yordam› kullan›labilir. Co¤rafi bilgi sis-
temlerinde farkl› bilgi kaynaklar›ndan elde edilen farkl› referans sistemine göre ta-
n›mlanm›fl verilerin bir araya getirilmesi, bütün verilerin tek bir referans sistemine
dönüfltürülmesiyle gerçeklefltirilebilir. PostGIS’in dönüflüm özelli¤inin veritaban›
düzeyinde yap›labilmesi, co¤rafi bilgi sistemlerinde istemci taraf›nda yer alan yaz›-
l›mlar›n yükünü önemli ölçüde azaltmaktad›r.
Referans sistemindeki de¤iflikli¤i gözleyebilmek için, di¤er bir yordam›n kullan›-
m›n›n ö¤renilmesi gereklidir. Geometrik verinin metin haline getirilmesi için
ST_AsEWKT() yordam› kullan›labilir. Bu yordam›n özelliklerinden biri, metin hali-
ne getirilen verinin geçerli oldu¤u referans sistemini de göstermesidir. Örne¤in, afla-
¤›daki SQL cümleci¤inde geometrik verinin dönüfltürülmesi flu flekilde yap›labilir:
9. Ünite - PostG‹S Kurulumu ve Uygulamalar› 173

SELECT
ST_AsEWKT('0103000020E610000001000000050000000000000000
00000000000000000000000000000000000000000000000000F03F0
00000000000F03F000000000000F03F000000000000F03F00000000
0000000000000000000000000000000000000000'::geometry);

Yukar›daki SQL komutu, “SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0


0))” sonucunu verecektir. SRID olarak verilen 4326, verinin tan›ml› oldu¤u uzam-
sal referans sisteminin numaras›d›r.
GPS cihazlar›ndan al›nan enlem ve boylam bilgileriyle (WGS84 enlem/boylam sis-
temi) Eskiflehir’in merkezinin enlem ve boylam koordinatlar›n›, ölçümler için kolay-
l›k sa¤layan metre olarak ifade edilen UTM 36. Bölge sistemine flöyle çevirebiliriz:

SELECT ST_AsEWKT(
ST_Transform(
ST_GeomFromEWKT('SRID=4326;POINT(39.462 30.300)'),
32636))

SQL komutu çal›flt›r›ld›¤›nda, “SRID=32636;POINT(1122012.91219052


3369772.87360948)” sonucunu vermektedir. Enlem ve boylam bilgileri al›na-
rak, UTM 36. Bölge koordinatlar›na çevrilmifltir. Bu örnekte yap›lan ifllem, jeode-
zik bir referans sisteminden (WGS84 enlem/boylam) düzlemsel bir sisteme (UTM
36›nc› bölge) geçifltir. Jeodezik sistemler, dünyan›n elipsoid oldu¤unu kabul ede-
rek, herhangi bir konumu belirli bir boylamdan (Örne¤in ‹ngiltere’deki Green-
wich’ten rasathanesinden geçti¤i varsay›lan boylam) ve ekvator çizgisini bafllang›ç
noktas› alarak dereceler cinsinden tan›mlarlar. Düzlemsel sistemlerde, mesafeler
metre, santimetre ve benzeri ölçülerde tan›mlan›r ve elipsoid olan dünya bir düzle-
me aktar›l›r. Co¤rafi bilgi sistemlerinde, hesaplamalar›n ve ölçümlerin daha kolay
yap›lmas›ndan ötürü düzlemsel referans sistemleri daha yayg›n olarak kullan›l›r.

Uzamsal Hesaplamalar ve Ölçümler


OpenGIS standartlar› aras›nda yer alan çeflitli yordamlar, tabloda yer alan yollar
üzerinde ifllem yap›lmas›n› veya yollar aras›ndaki iliflkilerin bulunmas›n› sa¤lamak-
tad›r. Örne¤in, (20,20,5) noktas›na 100 birimden daha yak›n olan yollar›n ismi-
ni bulmak için afla¤›daki sorgu kurulabilir. Sorgu sonucunda, Cengiz Topel Cadde-
sinin ad› dönecektir.
SELECT yollar.yol_isim FROM yollar
WHERE ST_Distance(yollar.yol_geom,
ST_GeomFromText('POINT(20 20 5)', -1)) < 100
Tabloda tan›ml› bütün yollar›n uzunluklar›n›n bulunmas› için, ST_Length()
yordam› kullan›labilir. Afla¤›daki sorgu cümleci¤i girildi¤inde, bütün yollar›n kilo-
metre olarak uzunlu¤u hesaplanarak, km_yol de¤iflkeninde gösterilir.

SELECT sum(ST_Length(yollar.yol_geom))/1000 AS km_yol


FROM yollar;

fiimdi, otoyollar isimli bir tablonun oluflturuldu¤unu ve Türkiye’deki otoyolla-


r›n LINESTRING olarak bu tabloya eklendi¤ini varsayal›m. Hangi yollar›n hangi
otoyollarla kesiflti¤ini bulmak için, afla¤›daki SQL cümleci¤inde yer alan ST_Cros-
ses() yordam› kullan›labilir.
174 Veritaban› Uygulamalar›

OpenGIS standartlar›nda alan hesaplamalar›yla ilgili çeflitli yordamlar


bulunmaktad›r. Örne¤in, binalar tablosunda yer alan binalar›n kaplad›klar› alan› he-
saplayabilmek için, ST_Area() yordam› kullan›labilir. Afla¤›daki SQL cümleci¤i, bi-
nalar tablosunda yer alan bütün binalar›n alanlar›n› hesaplayarak döndürmektedir.

SELECT yollar.yol_isim
FROM yollar, otoyollar
WHERE ST_Crosses(yollar.yol_geom,
otoyollar.otoyol_geom);

SIRA S‹ZDE binalar tablosunda


SIRA S‹ZDE yüzölçümü 50 metre kareden küçük olan binalar›n adreslerini dön-
2 düren SQL komutunu yaz›n›z.

SELECT ST_Area(binalar.bina_geom) as bina_metrekare


D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M

FROM binalar
S O R U S O R U
ST_Area() yordam›, kullanarak bir tablo içindeki en büyük yüzölçümüne sa-
hip binan›n ismini ve yüzölçümünü alttaki SQL cümleci¤inde oldu¤u gibi döndü-
D‹KKAT D‹KKAT
rebiliriz. “ORDER BY” komutu, yüzölçümü hesaplanarak metrekare de¤iflkenine
konulan binalar› s›ralar. “LIMIT 1” deyimiyle sadece en üstte bulunan ve en büyük

N N
SIRA S‹ZDE yüzölçümüne SIRAsahip
S‹ZDEbina gösterilir.

SELECT
AMAÇLARIMIZ
binalar.bina_isim,
AMAÇLARIMIZ
ST_Area(binalar.bina_geom) AS metrekare
FROM
K ‹ T A P binalar
K ‹ T A P
ORDER BY metrekare DESC
LIMIT 1;
TELEV‹ZYON TELEV‹ZYON

‹NDEKSLEME
‹ndeksleme, sorgulama baflar›m›n› art›ran önemli ifllemlerden biridir. Geleneksel
‹NTERNET veritaban› ‹tablolar›nda
NTERNET indeksleme genellikle sorgulanan kolonlar üzerinde ger-
çeklefltirilir. Örne¤in, ö¤renci bilgi sistemi veritaban›nda ö¤renci tablosunda arama
ifllemi daha çok ad ve soyad›na göre gerçeklefltiriliyorsa, ad ve soyad kolonlar›
üzerinde indeksleme gerçeklefltirilerek, baflar›m art›r›labilir. Yeni kay›tlar tablolara
eklendikçe, tablonun s›k aralarla indekslenmesi gerekebilir.
Uzamsal özellikli tablolarda, geometrik ve konumsal bilgi bir karakter dizgisi
fleklinde saklanmaktad›r. Tabloda, koordinatlar› belirli bir bölge içinde yer alan ba-
z› kay›tlar üzerinde geometrik bir ifllem gerçeklefltirilecekse, uzamsal anlamda ya-
p›lacak bir indeksleme, arama süresini en aza indirebilir. Bu flekilde, tablo içinde
yer alan bütün kay›tlar›n incelenmesi yerine, sadece istenen bölgede yer alan ka-
y›tlara ifllem uygulanabilecektir. Uzamsal anlamda indeksleme ifllemi için, indeks
olarak geometrik nesneleri çevreleyen kutunun koordinatlar›n› indeks olarak kul-
lanan gist yöntemi kullan›lmaktad›r. Örne¤in, yollar tablosunun indekslenmesi
flöyle gerçeklefltirilebilir:

CREATE INDEX idx_yollar_the_geom


ON yollar
USING gist(yol_geom);
9. Ünite - PostG‹S Kurulumu ve Uygulamalar› 175

Oluflturulan, idx_yollar_the_geom isimli indeks, tablolar›n alt›nda “Inde-


xes” bölümünde fiekil 12’de görülebilir.

fiekil 9.12
yollar tablosu
üzerinde indeks
oluflturma ifllemiyle
oluflturulan
idx_yollar_geom
indeksi

Uzamsal alanlar›n d›fl›nda da indekslemeye gerek duyulabilir. Özellikle nesne


adlar› konusunda da indeksleme yap›lmal›d›r. Örne¤in, binalar tablosunda,
e¤er bina isimleri üzerinde sorgulama yap›lacaksa, isimler üzerinde farkl› bir in-
deksleme yöntemi olan btree kullan›lmal›d›r:

CREATE INDEX idx_bina_isim


ON binalar
USING btree(bina_isim);

Sorgulama h›z›n› art›rmakla birlikte, indeksleme her zaman do¤ru flekilde kul-
lan›lmayabilir. Göz önünde bulundurulmas› gereken baz› konular ve indeksleme-
nin yarataca¤› sorunlar flöyle özetlenebilir:
• Kay›tlarda indekslenen alanlar›n UPDATE ifllemiyle güncellenmesi zaman
al›r.
• ‹ndeksleme veritaban›n›n kulland›¤› belle¤i art›r›r ve veritaban›n›n yer kap-
lad›¤› disk alan›n› geniflletir.
• Tabloda yer alan sorgulama yap›ls›n veya yap›lmas›n bütün alanlar›n in-
dekslenmesi, sorunlu bir yaklafl›md›r.
• S›k de¤ifltirilen ve güncellenen alanlar üzerinde indeks yarat›lmas›, yarardan
çok zarar getirebilir. Her güncellenen kay›t, indeksleri zay›flat›r ve veri gün-
celleme süresini art›r›r.
• Uzamsal indekslemede kullan›lan gist yöntemi, karmafl›k nesneler bar›nd›ran
tablolarda çok verimli çal›flmayabilir. Çünkü gist yöntemi nesneleri kapsayan
çerçevenin koordinatlar›n› kullanarak indeksleri oluflturdu¤undan, karmafl›k
ve birden çok ba¤lant›s›z nesneden oluflan yap›larda sorun ç›karabilir.
176 Veritaban› Uygulamalar›

Özet

N
A M A Ç
PostGIS, PostgreSQL veritaban› yönetim sistemi- N
A M A Ç
Uzamsal referans sistemlerinin neden yararl› ol-
1 nin OpenGIS standartlar›na uygun flekilde co¤ra- 4 du¤unu aç›klayabileceksiniz.
fi veriler üzerinde ifllem yapabilmesi için geliflti- Uzamsal referans sistemleri, dünya üzerindeki
rilmifl ek bir kütüphanedir. Kurulum yaz›l›m› is- herhangi bir konumun, bir model üzerinden co¤-
tenen iflletim sistemi platformu için, http://post- rafi koordinatlar›n›n belirlenmesi amac›yla kulla-
gis.refractions.net/ sitesinden indirilebilmekte- n›lan flemalard›r. PostGIS’te, bir referans sistemi-
dir. PostGIS, PostgreSQL veritaban› yönetim ya- ne göre elde edilmifl koordinatlar› bir di¤erine
z›l›m›na baz› özellikler ekledi¤i gibi, kullan›c›la- çevirmek için çeflitli yordamlar bulunmaktad›r.
r›n co¤rafi özellikte veritabanlar› ve tablolar olufl- Önceki ünitelerde, indeksleme kavram› üzerinde
turabilmesi için flablonlar da tan›mlar. ayr›nt›l› flekilde durulmufltur. Ancak, co¤rafi nes-

N
nelerin indekslenmesi koordinatlara göre ger-
PostGIS Veritaban› flablonundan yeni bir verita- çekleflmektedir. ‹ndekslemekteki amaç, belirle-
AM A Ç

2 ban› yaratabileceksiniz. nen bir koordinata en yak›n nesneleri bulacak


Kullan›c›, oluflturmak istedi¤i co¤rafi özellikler flekilde indeks verilerini oluflturmakt›r. PostGIS,
bar›nd›ran veritaban›n› template_postgis flab- geometrik nesneleri kapsayan en küçük dikdört-
lonundan türetilebilmektedir. Bu flekilde olufltu- genin koordinatlar›n› kullanarak, kay›tlar› indeks-
rulan veritaban› içinde, OpenGIS standartlar›n›n leyen gist yöntemini kullanmaktad›r.
tan›mlad›¤› veri tipleri ve yordamlar bulunur ve
kullan›c›n›n ek ifllemler yapmas›na gerek kalmaz.

NA M A Ç
Yeni bir tablo yaratabilecek ve geometrik özellik-
3 li yeni bir kolon ekleyebileceksiniz.
Tabloya, AddGeometryColumn() yordam›yla
eklenen geometry tipindeki alana, OpenGIS
standartlar›nda tan›ml›, çizgi, nokta, çoklu çizgi,
poligon ve benzeri nesneler depolanabilir. Geo-
metry veri tipi, karmafl›k ve nümerik karakter-
lerden oluflur. Tabloya veri eklenmesini kolay-
laflt›rabilmek için, metin olarak yaz›lan nesnele-
ri geometry nesnesine çevirmek için ST_Geom-
FromText() yordam› kullan›lmaktad›r. Benzer
flekilde, PostGIS kütüphanesi, kullan›c›lar›n ve-
ri giriflini sa¤l›kl› yapabilmeleri için çeflitli yor-
damlar sunar.
9. Ünite - Postgis Kurulumu ve Uygulamalar› 177

Kendimizi S›nayal›m
1. PostGIS kurulumu gerçeklefltirildikten sonra, verita- 5. ‹ndekslenen alan› bulunan tablolar›n UPDATE iflle-
ban› içinde görülen template_postgis ile ilgili afla¤›daki miyle güncellenmesinin, indekslenmemifl tablolarda ya-
ifadelerden hangisi do¤rudur? p›lan iflleme göre daha yavafl olmas›n›n nedeni afla¤›da-
a. PostGIS’in kurulum parametrelerinin ilk orijinal kilerden hangisidir?
de¤erlerine döndürülmesi için kullan›lan SQL a. Güncellemeden sonra indeksin s›f›rlan›p yeni-
komutudur. den yap›land›r›lmas›n›n gerekmesi
b. Örnek bir veritaban›d›r. b. ‹ndekslenen tablolarda güncelleme iflleminde
c. Co¤rafi nesneler üzerinde uzamsal ifllemler yap- hem kayd›n hem de indeksin güncellenmesi
mak için gerekli fonksiyonlar›n örneklerinin ve- c. ‹ndekslenen tablolar›n sabit diskte tutulurken,
rildi¤i yard›m dosyas›d›r. indekslenen tablo kay›tlar›n›n ana bellekte de-
d. Uzamsal veritaban› yaratmak için kullan›lan bir polanmas›
flablondur. d. Tablodan sorgulama süresini art›rmas›
e. PostGIS’in veritaban›ndan kald›r›lmas› için kul- e. ‹ndekslenmeyen tablolardaki kay›tlar›n yerleri-
lan›lan komuttur. nin daha düzenli olmas›

2. Afla¤›dakilerden hangisi uzamsal indekslemede kul- 6. ST_GeomFromText() yordam›n›n ifllevi nedir?


lan›lan gist yönteminin performans sorunu yaflad›¤› nes- a. Harf dizisinde yer alan harfleri co¤rafi nesnelere
ne ad verilir? dönüfltürme
a. ‹çiçe girmifl ve bir nesnenin di¤erini kapsad›¤› b. Geometrik nesnelerin insanlar›n okuyabilece¤i
nesneler biçime dönüfltürme
b. Birbiriyle kesiflen poligon nesneler c. Metin olarak girilen co¤rafi nesneyi farkl› bir
c. Birbirinden ba¤›ms›z nesnelerden oluflan kar- nesneye çevirme
mafl›k nesneler d. Nesnelerin bileflenlerini ay›rma
d. Dairesel nesneler e. Metin olarak verilen co¤rafi nesneyi, geometry
e. Çizgisel nesneler türüne dönüfltürme

3. ST_Length() co¤rafi nesnelerin hangi özelli¤ini 7. Uzamsal özellik verilecek bir tabloya eklenecek bir
hesaplar? alan›n veri tipi afla¤›dakilerden hangisi olabilir?
a. Uzunlu¤unu a. 3D
b. Boyunu b. character varying
c. Geniflli¤ini c. integer
d. En genifl bölümünün uzunlu¤unu d. geometry
e. Çevre uzunlu¤unu e. XY

4. ST_Crosses() yordam›n›n ifllevi nedir? 8. Metin olarak yaz›lan bir co¤rafi nesnenin do¤ru ya-
a. ‹ki co¤rafi nesne kesifliyorsa do¤ru döndürmek z›ld›¤›ndan emin olmak için afla¤›daki yorgamlardan
b. ‹ki co¤rafi nesnenin kesiflim kümesinin uzunlu- hangisi kullan›labilir?
¤unu getirmek a. ST_isInteger()
c. ‹ki co¤rafi nesnenin üst üste geldi¤i alan› co¤ra- b. ST_doesCross()
fi bir nesne olarak getirmek c. ST_isValid()
d. Birden fazla co¤rafi nesnenin kefliflim kümesini d. ST_isGeometry()
hesaplamak e. ST_isTrue()
e. MultiPolygon olarak tan›mlanan nesneleri biribi-
rine ba¤lan çizgiyi döndürmek
178 Veritaban› Uygulamalar›

Kendimizi S›nayal›m Yan›t Anahtar›


9. Afla¤›dakilerden hangisi, co¤rafi anlamda kullan›lan 1. d Yan›t›n›z yanl›fl ise “PostGIS Kurulumu” bafll›kl›
referans sistemlerinden biridir? bölümü inceleyiniz.
a. Kartezyen koordinat sistemi 2. c Yan›t›n›z yanl›fl ise “Uzamsal Referans Sistemle-
b. WGS84 ri ve Dönüflümler” bafll›kl› bölümü inceleyiniz.
c. SRID 3. a Yan›t›n›z yanl›fl ise “Tabloya Verilerin Yüklen-
d. Enlem-Aç› mesi” bafll›kl› bölümü inceleyiniz.
e. X-Derece, Y-Derece 4. a Yan›t›n›z yanl›fl ise “Tabloya Verilerin Yüklen-
mesi” bafll›kl› bölümü inceleyiniz.
10. PostGIS’te geometrik verinin metin haline dönüfltü- 5. b Yan›t›n›z yanl›fl ise “Uzamsal Referans Sistemle-
rülmesi için afla¤›daki yordamlardan hangisi kullan›la- ri ve Dönüflümler” bafll›kl› bölümü inceleyiniz.
bilir? 6. e Yan›t›n›z yanl›fl ise “Tabloya Verilerin Yüklen-
a. ST_isValid() mesi” bafll›kl› bölümü inceleyiniz.
b. ST_GeomFromText() 7. d Yan›t›n›z yanl›fl ise “Tablolar›n Oluflturulmas›”
e. ST_Geometry() bafll›kl› bölümü inceleyiniz.
d. ST_ReadCoordinate() 8. c Yan›t›n›z yanl›fl ise “Tabloya Verilerin Yüklen-
e. ST_AsEWKT() mesi” bafll›kl› bölümü inceleyiniz.
9. b Yan›t›n›z yanl›fl ise “Tabloya Verilerin Yüklen-
mesi” bafll›kl› bölümü inceleyiniz.
10. e Yan›t›n›z yanl›fl ise “Tabloya Verilerin Yüklen-
mesi” bafll›kl› bölümü inceleyiniz.
9. Ünite - Postgis Kurulumu ve Uygulamalar› 179

S›ra Sizde Yan›t Anahtar› Yararlan›lan ve Baflvurulabilecek


Kaynaklar
S›ra Sizde 1 Consortium, O. G. (2006). OpenGIS ® >Implementation
Geometry kolonunun oldu¤u yerdeki veriler metin ha- Specification for Geographic information - Simple
linde kodlanm›fl de¤erlerdir. Örne¤in, geometry tipin- feature access - Part 1: Common architecture, rapor.
deki kolonda, “0103000020E6100000010000000500000 Consortium, O. G. (2006). OpenGIS Implementation
00000000000000000000000000000000000000000000000 Specification for Geographic information - Simple
00000000000000F03F000000000000F03F000000000000F feature access - Part 2: SQL option, rapor.
03F000000000000F03F0000000000000000000000000000 PostGIS kullan›m k›lavuzu ve örnekler için
00000000000000000000” gibi bir de¤er yer alabilir. http://postgis.refractions.net/
“PostGIS in Action”, Regina O. Obe and Leo S. Hsu,
S›ra Sizde 2 Manning yay›nlar›, 2010.
“SELECT * FROM binalar WHERE ST_Area(binalar.bi- OpenGIS standartlar› için,
na_geom)>50.0” komutu, yüzölçümü 50 metre kareden http://www.opengeospatial.org/standards/is
büyük binalar›n kay›tlar›n› getirecektir. PostgreSQL kullan›m k›lavuzlar›,
http://www.postgresql.org/docs/
Sherman, G. E. (2008). Desktop GIS Mapping the Pla-
net with Open Source Tools, The Pragmatic Books-
helf.
Vikipedi web sitesi
http://en.wikipedia.org/wiki/Postgis
10
VER‹TABANI UYGULAMALARI

Amaçlar›m›z

N
Bu üniteyi tamamlad›ktan sonra;
Co¤rafi bilgi sisteminde oluflturulmufl flekil dosyalar›n› veritaban›na aktarabi-

N
leceksiniz.
Co¤rafi bilgi sistemine veritaban›nda yer alan tablolar› katman olarak ekle-

N
yebileceksiniz.
PostGIS yordamlar›n› kullanarak, istenen sorgu kriterlerine göre SQL ko-

N
mutlar› oluflturabileceksiniz.
Birden fazla tablodaki verileri iliflkilendiren SQL komutlar› oluflturabilecek-
siniz.

Anahtar Kavramlar
• Uzamsal sorgulamalar • PostGIS
• Co¤rafi bilgi sistemleri • OpenGIS standartlar›
• Koordinat referans sistemleri

‹çerik Haritas›

• G‹R‹fi
• CO⁄RAF‹ B‹LG‹ S‹STEMLER‹
Co¤rafi Veritaban› YAZILIMI: QUANTUM GIS
Veritaban›
Üzerinde • ÖRNEK VER‹ SET‹N‹N VER‹
Uygulamalar› Sorgulamalar TABANINA YÜKLENMES‹
• GERÇEK VER‹ SET‹ ÜZER‹NDE
CO⁄RAF‹ SORGULAMALAR
Co¤rafi Veritaban› Üzerinde
Sorgulamalar

G‹R‹fi
Co¤rafi bilgi sistemi (CBS) yaz›l›mlar› temel olarak co¤rafi nesnelerin gösterimi, in-
celenmesi ve sorgulanmas› amac›yla gelifltirilen sistemlerdir. Bu ünitede, ücretsiz
olarak sunulan Co¤rafi Bilgi Sistemlerinden biri olan QuantumGIS yaz›l›m›n›n,
PostGIS’e dayal› bir veritaban›na ba¤lant› kurmas› sa¤lanacakt›r. Örneklerde, Qu-
antum GIS yaz›l›m›yla birlikte sunulan Amerika Birleflik Devletlerindeki Alaska
eyaletiyle ilgili co¤rafi veri kümesi kullan›lacakt›r.
Ünitenin ilk bölümünde, Quantum GIS k›saca tan›t›lacakt›r. Bu yaz›l›m, benzer
ticari yaz›l›mlara göre daha basit olmas› ve ücretsiz olarak temin edilebilmesi ne-
deniyle tercih edilmifltir. Ancak, ünitenin ana amac›n›n veritaban› üzerinde yap›lan
co¤rafi sorgulamalar olmas› nedeniyle, Quantum GIS’in tüm özellikleri anlat›lma-
yacakt›r.
Alaska veri kümesi, Quantum GIS yaz›l›m›n› gelifltiren ekip taraf›ndan, e¤itim
amac›yla kullan›ma aç›lan verilerden oluflur. Bu veri kümesinde yer alan göller,
yerleflim alanlar›, nehirler, çay›rl›k alanlar ve benzeri co¤rafi nesneleri içeren flekil
dosyalar›, PostgreSQL veritaban› yönetim sistemine tablolar halinde yüklenecektir.
Veritaban›nda yer alan her tablo, co¤rafi bilgi sistemleri için bir katmana karfl›l›k
gelir. Quantum GIS yaz›l›m›nda bu verileri görsellefltirebilmek için, veritaban› ba¤-
lant›s› kurulacak ve her bir tablo bir katman halinde projeye eklenecektir.
Ünitenin devam›nda, Co¤rafi nitelikte sorgulamalar için PostgreSQL’in pgAdmin
yaz›l›m›n›n nas›l kullan›labilece¤i gösterilecektir. ‹lk aflamada, Alaska’daki tren yol-
lar›n›n toplam uzunlu¤u, yüzölçümü en büyük gölün ad› gibi tek bir tablo veya di-
¤er bir deyiflle tek bir katman üzerinde sorgulamalar yap›lacakt›r. Ard›ndan birden
fazla tabloyu ilgilendiren, bir gölün etraf›nda yer alan yerleflim merkezlerinin isim-
lerinin bulunmas› gibi karmafl›k sorgulamalar›n nas›l kurulaca¤› anlat›lacakt›r.

CO⁄RAF‹ B‹LG‹ S‹STEM‹ YAZILIMI: QUANTUM GIS


Quantum GIS, Gary Sherman taraf›ndan 2002’de gelifltirilmeye bafllanm›flt›r. Yaz›-
l›m planlanan özellikleriyle sürüm 1.0 olarak Ocak 2009’da kullan›c›lara sunulmufl-
tur. Program›n yaz›ld›¤› dil C++’d›r ve kullan›c› arayüzü Qt adl› çerçeve kütüpha-
nesi yard›m›yla oluflturulmufltur. Co¤rafi uygulamalarda verimlili¤i sa¤layan nite-
likleri d›fl›nda Quantum GIS’in en büyük özelliklerinden biri, Microsoft Windows,
Mac OS X, Unix, Linux iflletim sistemlerini desteklemesidir. OpenGIS’in gerektirdi-
182 Veritaban› Uygulamalar›

¤i GML uzant›l› dosya biçimleriyle birlikte SHP (shape: flekil dosyas›), DBF ve ER-
DAS flirketinin gelifltirdi¤i IMG dosyalar›n› okuyabilmektedir. Kullan›c› arayüzü,
30’dan fazla dili destekleyecek flekilde gelifltirilmifltir. Bir bilgisayara kurulurken,
iflletim sisteminin diline göre kullan›c› arayüzü uyarlanmaktad›r. Bu ünitedeki bü-
tün uygulamalar Quantum GIS’in Türkçe arayazü kullan›larak gerçeklefltirilecektir.

Kurulum ‹fllemi
Quantum GIS yaz›l›m›, resmi web sitesindeki (http://www.qgis.org/) “download”
bölümünden elde edilebilmektedir. Yaz›l›m›n en son sürümü “Current Version”
bölümüne t›klayarak, http://qgis.org/en/download/current-software.html sitesin-
den indirilmelidir. Ayr›ca, “download” bölümünde, “Sample Data” bölümüne t›kla-
yarak, Amerika’n›n Alaska eyaletiyle ilgili örnek veriler de s›k›flt›r›lm› zip dosyas›
olarak http://www.qgis.org/en/download/sample-data.html/ sitesinden indirilme-
li ve bir dizine aç›lmal›d›r. Bu ünitede, co¤rafi bilgi sistemi ve veritaban› aras›nda
kurulacak iliflkide, Alaska veri seti kullan›lacakt›r.
Kurulum yaz›l›m›n› çal›flt›rmadan önce, bilgisayar›n ‹nternet’e ba¤l› oldu¤un-
dan emin olunmal›d›r. Kurulum program› çal›flt›r›l›nca, “Express Setup” ve “Advan-
ced Setup” seçeneklerini kullan›c›ya sunar (fiekil 1). “Express Setup” opsiyonu, ya-
z›l›m›n s›k kullan›lan özelliklerle birlikte bilgisayara kurulmas›n› sa¤lad›¤›ndan ter-
cih edilmelidir. Bir sonraki aflamada hangi alt paketlerin kurulaca¤› sorulacakt›r.
“Quantum GIS” ve “Grass GIS” opsiyonlar› seçili olarak ileri butonuna bas›lmas›,
kurulum ifllemine devam etmemizi sa¤layacakt›r (fiekil 2). Gerekli paketler ‹nter-
net’den indirilerek bilgisayara kurulacakt›r.

fiekil 10.1
Quantum GIS
kurulum program›
(ilk aflama)
10. Ünite - Co¤rafi Veritaban› Üzerinde Sorgulamalar 183

fiekil 10.2
Quantum GIS
kurulum program›,
seçilmesi gereken
paketler

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

Quantum GIS yaz›l›m›n›n kurulum sistemi, ‹nternet’ten dosyalar› indirecek


D ‹ K K A T flekilde ta- D‹KKAT
sarlanm›flt›r. Bu nedenle, kuruluma bafllamadan önce Internet’e ba¤l› oldu¤unuza emin
olunuz.

N N
SIRA S‹ZDE SIRA S‹ZDE

ÖRNEK VER‹ SET‹N‹N VER‹TABANINA YÜKLENMES‹


Program kurulduktan sonra, Programlar alt›nda Quantum GIS yaz›l›m› çal›flt›rabi-
AMAÇLARIMIZ AMAÇLARIMIZ
lir. Bu arada, Quantum GIS sitesinden indirilen ve örnek verileri içeren zip dosya-
s›n›n, bir dizine Winzip veya Winrar yaz›l›mlar› yard›m›yla aç›lm›fl oldu¤una emin
olunuz. Örnek veri setinde yer alan dizinlerin isimleri ve ifllevleri
K ‹ Tflöyledir:
A P K ‹ T A P
• climate: ‹klimle ilgili veriler bulunmaktad›r.
• csv: Excel dosyas› olarak yükseklik bilgileri bulunur.
• gml: OpenGIS standartlar›nda gml türünde tan›mlanm›fl T E Lbölgedeki
E V ‹ Z Y O N göllerle TELEV‹ZYON
ilgili veri dosyas› bulunmaktad›r.
• gps: an›tlar›n GPS koordinatlar›n›n yer ald›¤› gpx dosyas›n› içerir.
• Grassdata: Di¤er bir ücretsiz CBS yaz›l›m› olan GRASS yaz›l›m›n›n verileri
‹NTERNET ‹NTERNET
bulunmaktad›r.
• raster: ERDAS IMG türünde, bölgenin imge hali yer almaktad›r.
• vmap0_shapefiles: Hava alanlar›, göller, nehirler, demiryollar› gibi nesnele-
rin tan›ml› oldu¤u SHP türü dosyalar bulunmaktad›r.
vmap0_shapefiles dizininde yer alan flekil dosyalar›n›n her biri bir katmana kar-
fl›l›k gelmektedir. Dosya isimleri ve içerdikleri geometrik özellikler flöyledir:
• alaska.shp: eyaletin siyasi s›n›rlar›d›r. Poligon olarak tan›mlanm›flt›r.
• Trees.shp: 10 kilometrekareyi geçen orman alanlar›n› içerir. Poligon olarak
tan›mlanm›flt›r.
• Swamp.shp: 10 kilometrekareyi geçen batakl›k ve sazl›k alanlar (poligon)
• Tundra.shp: 10 kilometrekareyi geçen tundra alanlar (poligon)
• Landice.shp: 10 kilometrekareyi geçen buzlu alanlar (poligon)
• Grassland.shp: 10 kilometrekareyi geçen çay›rlar (poligon)
184 Veritaban› Uygulamalar›

• Builtups.shp: flehirler (poligon)


• Railroads.shp: demiryollar› (çizgi)
• Trails.shp: patikalar ve yollar (çizgi)
• Pipelines.shp: boru hatlar› (çizgi)
• Rivers.shp: nehirler ve su yollar› (çizgi)
• Majrivers.shp: büyük nehirler (çizgi)
• Airports.shp: hava alanlar› (nokta)
• Popp.shp: yerleflim alanlar› (nokta)
Örnek veriler aras›nda, vmap0_shapefiles adl› klasörde yer alan baz› flekil
dosyalar› veritaban›na tablo olarak yüklenebilmektedir. Bunun için, PostgreSQL
yönetici paneli (pdAdmin III) program› çal›flt›r›larak, bir önceki Ünite’de yarat›lan
uzamsal_db fareyle seçilmeli ve alttaki “Tables” bölümüne t›klanmal›d›r. Prog-
ram menüsünde, eklentiler anlam›na gelen “Plugins” bölümünde bulunan “Post-
GIS Shapefile and DBF loader” seçene¤i t›klanarak çal›flt›r›lmal›d›r (fiekil 3). Pen-
cerede, veritaban› isminin ve kullan›c› bilgilerinin do¤ru oldu¤una emin olduktan
sonra, “Shape File” bölümünün alt›na t›klayarak (fiekil 4), vmap0_shapefiles
dizini alt›ndaki lakes.shp dosyas›n› seçiniz. Pencerede, SRID bölümündeki -1
de¤erini 2964 olarak de¤ifltiriniz. Bu ifllem, uzamsal referans sistemini, tan›ms›zdan
‹ngiliz mesafe ölçüleri (feet, mil) kullan›lan EPSG 2964 sistemine çevirir. Ard›ndan
gelen pencerede, “import” seçene¤ine t›klay›n›z. ‹fllem bittikten sonra, “cancel”
opsiyonunu seçerek ç›kabilirsiniz.

fiekil 10.3

SHP dosyalar›n›n
PostgreSQL
yönetici panelinde
veritaban›na
yüklenmesi
10. Ünite - Co¤rafi Veritaban› Üzerinde Sorgulamalar 185

fiekil 10.4
lakes.shp
dosyas›n›n
seçilmesi

fiekil 10.5
SHP dosyas›n›n
tablo olarak
yüklenmesi
(import)
SIRA S‹ZDE SIRA S‹ZDE

D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M

186 Veritaban› Uygulamalar›


S O R U S O R U

D‹KKAT Alaska veri kümesi,


D ‹ K K A T fit ve mile dayal› uzamsal referans sistemi olan EPSG 2964’ye göre
oluflturulmufltur. Veri setinin EPSG 2964 sistemine göre okunmas› gereklidir. Aksi taktir-
de, bu örneklerde yap›lacak ölçümlerin hiç biri gerçek de¤er sa¤lamayacakt›r.

N N
SIRA S‹ZDE SIRA S‹ZDE

SHP dosyas›n›n veritaban›na yüklenmesiyle birlikte, lakes isimli bir tablonun


AMAÇLARIMIZ oluflturuldu¤u görülecektir. Tablolar›n içinde ilk aflamada görünmüyor olabilir, an-
AMAÇLARIMIZ
cak pgAdmin program›nda uzamsal_db veritaban› seçilerek, yukar›daki “refresh”
butonuna bas›ld›¤›nda tablolar aras›nda lakes tablosu görülecektir.
K ‹ T A P K ‹ T A P
SIRA S‹ZDE vmap0_shapefiles dizininde yer alan bütün flekil dosyalar›n›, az önce lakes.shp dosyas›n›
SIRA S‹ZDE
1 veritaban›na eklerken yapt›¤›m›z gibi veritaban›na yükleyiniz. SRID de¤erini 2964 olarak
TELEV‹ZYON de¤ifltirmeyi
T E unutmay›n›z.
LEV‹ZYON
D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M

Co¤rafi Bilgi Sistemi ve Veritaban› Ba¤lant›s›n›n


S O R U
‹NTERNET
Kurulmas›S O R U
‹NTERNET
Bütün flekil dosyalar› veritaban›na yüklendikten sonra, her flekil dosyas›n›n isminin
D‹KKAT tabloya isim Dolarak
‹ K K A T verildi¤i görülecektir (fiekil 6). Her tablo, co¤rafi bilgi sistemle-
rinde bir katmana karfl›l›k gelmektedir. fiimdi Quantum GIS yaz›l›m›n› çal›flt›ral›m
ve veritaban›na az önce yükledi¤imiz tablolar› Quantum GIS’e katman olarak ekle-

N N
SIRA S‹ZDE SIRA S‹ZDE
yelim. Bunun için, Quantum GIS program›n›n menüsündeki “Katman” seçene¤ine
t›klarak, “PostGIS katman› ekle”yi seçmemiz gereklidir. Ç›kan pencerenin üst k›s-
AMAÇLARIMIZ m›nda (fiekilAMAÇLARIMIZ
7), “PostgreSQL ba¤lant›s›” bölümünün içinde yer alan “Ba¤lan” buto-
nuna bas›ld›¤›nda, veritaban›nda yer alan geometrik özellikli tablolar görülecektir.
Tablolar içinde, az önce Alaska veri kümesinden yüklenen tablolar seçilerek “Ekle”
K ‹ T A P K ‹ T A P
butonuna bas›lmal›d›r. Tablolar›n katmanlar olarak projeye eklenmesi zaman alabi-
lir. Quantum GIS penceresinde, sol tarafta katmanlar ve sa¤ tarafta ise Amerika bir-
TELEV‹ZYON
leflik Devletlerinin
TELEV‹ZYON
Alaska eyaletinin co¤rafi modeli görülecektir (fiekil 8). Art›k, Qu-
antum GIS’le veriler üzerinde yap›lan de¤ifliklikler, veritaban›na yans›t›lmaktad›r.
fiekil 8’de, ekran›n sol taraf›nda bulunan lejand isimli bölüm, katmanlar›n ek-
randa gösterim s›ras›n› da belirlemektedir. En altta kalan katman, airports kat-
man› olarak görülmektedir. Ancak, bütün katmanlar›n alaska isimli tabloya kar-
‹NTERNET ‹NTERNET

fl›l›k gelen siyasi harita üzerinde yer almas› gerekti¤inden, airports katman›n›n
bir üste ç›kar›lmas› gereklidir. Bu amaçla, lejand bölümünde airports katman›
üzerine fare imlecini getirerek sol fare butonuna bas›lmal› ve bas›l› tutarak fare im-
leci alaska katman›n›n üstüne getirilmelidir. Bu flekilde, alaska katman› en alta
inecek ve airports bir üst seviyeye yerleflecektir.
10. Ünite - Co¤rafi Veritaban› Üzerinde Sorgulamalar 187

fiekil 10.6
Bütün flekil
dosyalar›
yüklendikten sonra
veritaban›nda
oluflan tablolar

fiekil 10.7
Quantum GIS
yaz›l›m›nda,
PostGIS
katman›n›n
eklenmesi
188 Veritaban› Uygulamalar›

fiekil 10.8
Alaska eyaletinin
katmanl› modeli

GERÇEK VER‹ SET‹ ÜZER‹NDE CO⁄RAF‹


SORGULAMALAR
Quantum GIS yaz›l›m›, ticari co¤rafi bilgi sistemleri yaz›l›mlar›na göre, verilerin
güncellenmesi ve de¤ifltirilmesi konusunda daha az say›da özellik içerir. Ancak,
Quantum GIS kullan›larak yap›lan bütün örnekler, ticari sistemlerde de uygulana-
bilir. Bu aflamadan sonra, gerçek veri seti üzerinde PostGIS’te tan›ml› yordamlar›
kullanarak çeflitli sorgulamalar yapaca¤›z.

Ölçüme Dayal› Basit Sorgulamalar


Veritaban›nda yer alan alaska tablosu, Alaska eyaletinin siyasi haritas›n› poligon-
lar olarak tan›mlamaktad›r. Tabloda yer alan poligonlar›n say›s›n›, PostgreSQL yö-
netim yaz›l›m› üzerinden flöyle sorgulayabiliriz:

SELECT COUNT(*) FROM alaska

Sorgulama sonucu, tabloda 653 adet poligonun tan›ml› oldu¤u görülmektedir.


fiimdi, her poligonun alan›n› ST_Area() yordam›yla hesaplayal›m ve bütün poli-
gonlar›n alanlar›n› toplayal›m. Elde edilen sonuç, uzamsal referans sistemi nede-
niyle fit kare (ft2) cinsinden olacakt›r. Kilometrekareye çevirmek için, sonucun
10763850,24’e bölünmesi gereklidir. Afla¤›daki SQL komutunun çal›flt›r›lmas›yla el-
de edilen sonuç, yaklafl›k 1.5 milyon kilometrekaredir.

SELECT SUM(ST_Area(the_geom))/10763850.24 FROM alaska

Alaska’da yer alan demiryolu hatlar›, çizgiler olarak railroads isimli tabloda
tan›ml›d›r. Bütün çizgilerin toplam uzunlu¤unu mil cinsinden bulmak için afla¤›da-
ki SQL komutu yaz›labilir:
10. Ünite - Co¤rafi Veritaban› Üzerinde Sorgulamalar 189

SELECT sum(ST_Length(the_geom))/5280 from railroads

Her çizgi fit (feet) cinsinden tan›mland›¤›ndan ve her mil içinde 5280 fit bulun-
du¤undan, elde edilen sonucu mile çevirmek için 5280’e bölmek gerekmektedir.
Demiryollar›n›n toplam uzunlu¤u, yaklafl›k 524 mil olarak bulunmaktad›r.
Yüzölçümü en büyük gölün sorgulanmas› için lakes tablosunda afla¤›daki
SQL komutu yaz›labilir:

SELECT names, ST_Area(the_geom)/27878400 AS alan


FROM lakes
ORDER BY alan DESC
LIMIT 1

Sorgulama sonucu, en büyük göl olan Iliamna gölünün yüzölçümünün 1018


milkare oldu¤u anlafl›labilir.
Koordinatlar› belirli bir noktaya, POINT(733000 4164000), en yak›n 10 ha-
vaalan›n› bulabilmek için kullan›lmas› gereken SQL komutu flöyle yaz›labilir:

SELECT airports.name,
ST_Distance('SRID=2964;POINT(733000 4164000)'::geometry,
the_geom)/5280 AS mesafe
FROM airports
ORDER BY mesafe ASC LIMIT 10

ST_Distance() yordam›, iki geometrik nesne aras›ndaki uzakl›¤› ölçmekte-


dir. Bu sorguda, SRID=2964 denilerek, mesafenin ölçülece¤i ba¤lang›ç noktas›-
n›n referans sistemi tan›mlanmaktad›r. Bafllang›ç noktas›n›n koordinatlar›
'SRID=2964;POINT(733000 4164000)'::geometry komutuyla verilmek-
tedir. Ç›kan sonuç 5280’e bölünerek, mile çevrilmekte ve en küçükten büyü¤e s›-
ralanarak ilk on havaalan› gösterilmektedir. Bu koordinatlara en yak›n havaalan›
“ELMENDORF AFB”dir.

Quantum GIS yaz›l›m›yla, katmanlar› sol taraf›nda bulunan x iflaretinden


SIRAkapatarak
S‹ZDE yaln›zca SIRA S‹ZDE
alaska siyasi haritas› ve airports katmanlar›n› aç›n›z. Belirledi¤iniz herhangi bir yerin ko- 2
ordinatlar›n›, pencerenin sa¤ alt köflesinden alarak kaydediniz. Belirledi¤iniz bu koordi-
D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M
natlara en yak›n havaalanlar›n› belirleyiniz (fiekil 9).

S O R U S O R U

D‹KKAT D‹KKAT

N N
SIRA S‹ZDE SIRA S‹ZDE

AMAÇLARIMIZ AMAÇLARIMIZ

K ‹ T A P K ‹ T A P

TELEV‹ZYON TELEV‹ZYON
190 Veritaban› Uygulamalar›

fiekil 10.9
Sadece airports ve
alaska
katmanlar›n›n aç›k
oldu¤u, 733000
4164000
koordinatlar›n›n
merkezde
bulundu¤u harita

Yukar›daki sorguyu biraz de¤ifltirerek, bafllang›ç noktas›na 10 mil yak›nl›kta


olan bütün havaalanlar›n› bulacak SQL komutunu olufltural›m. Bütün veri küme-
mizdeki bütün ölçüler fit cinsinden oldu¤undan ve 10 mil 52800 fit’e karfl›l›k gel-
di¤inden sorguyu flöyle oluflturmal›y›z:

SELECT airports.name
FROM airports
WHERE
ST_DFullyWithin('SRID=2964;POINT(733000
4164000)'::geometry,
the_geom, 52800)

ST_DFullyWithin() yordam›, iki nesnenin birbirine belirli bir mesafeden


yak›n olmas› durumunda do¤ru cevab›n› vermektedir. Sorgu, sonuç olarak üç ha-
vaalan›n› (“BRYANT AHP”, “ELMENDORF AFB”, “MERRILL FLD”) getirmektedir.

Birden Çok Tabloyu ‹lgilendiren Sorgulamalar›


‹ki tablodaki veriler kullan›larak, baz› bilgiler SQL komutlar›yla türetilebilir. Örne-
¤in, çay›rl›k alanlar içinde kurulmufl olan havaalanlar›n›n listesini almak için flöyle
bir SQL komutu oluflturulabilir.

SELECT airports.name
FROM airports, grassland
WHERE ST_Within(airports.the_geom,
grassland.the_geom)

ST_Within(), iki geometrik nesnenin birbirinin içinde olmas› durumunda


do¤ru yan›t›n› döndüren bir yordamd›r. Burada, airports tablosu noktalardan
ve grassland tablosu da poligonlardan oluflmaktad›r. Havaalanlar›ndan birinin
koordinat› e¤er çay›rl›k alanlar› tan›mlamak için kullan›lan poligonlardan içinde
10. Ünite - Co¤rafi Veritaban› Üzerinde Sorgulamalar 191

yer al›rsa, SQL sorgusu havaalan›n›n ismini döndürmektedir. SQL komutu e¤er ça-
l›flt›r›l›rsa, 13 adet havaalan›n›n çay›rl›k alanlar üzerinde kuruldu¤u görülecektir.

Hangi havaalanlar›n›n tundra alanlar üzerinde kuruldu¤unu bulunuz.


SIRA S‹ZDE SIRA S‹ZDE
3
Do¤algaz veya ham petrol boru hatlar›n›n yollar› üzerindeki nehirlerden geçi-
D Ü fi Ü N E L ‹ M D Ü fi Ü N E L ‹ M
rilmesi gerekmektedir. Boru hatlar›n›n kaç kere nehirden geçti¤ini bulmak için,
pipelines ve rivers isimli tablolarda arama yap›lmas› gerekmektedir.
ST_Crosses() yordam›, iki nesnenin birbirini kesti¤i noktalarda S O R do¤ru
U yan›t›n› S O R U
vermektedir. Afla¤›daki SQL komutu çal›flt›r›larak, boru hatlar›n›n 15 farkl› noktada
nehir içinden geçti¤i bulunabilmektedir. D‹KKAT
D‹KKAT

SELECT rivers.name FROM rivers, pipelines


WHERE ST_Crosses(pipelines.the_geom, SIRA S‹ZDE

N N
SIRA S‹ZDE
rivers.the_geom)
AMAÇLARIMIZ AMAÇLARIMIZ
Alaska’daki nehirlerin kaç milinin çay›rl›k alanlardan geçti¤ini bulmaya çal›fla-
l›m. Bunun için, birbiriyle kesiflen iki geometrik nesne verildi¤inde do¤ru yan›t›n›
veren ST_Intersects() yordam› kullan›lacakt›r. Afla¤›daki K ‹ T ASQL
P komutu, K ‹ T A P
grassland ve rivers tablolar›n› kullanarak, sonucu yaklafl›k 2414 mil olarak
vermektedir:
TELEV‹ZYON TELEV‹ZYON
SELECT sum(ST_length(rivers.the_geom))/5280
FROM grassland, rivers
WHERE ST_Intersects(rivers.the_geom,
grassland.the_geom)
‹NTERNET ‹NTERNET

“TOGIAK RIVER” olarak rivers tablosunda görülen Togiak nehrinin kaçS‹ZDE


SIRA milinin çay›rl›k SIRA S‹ZDE
alanlardan geçti¤ini bulan SQL komutunu yaz›n›z ve çal›flt›r›n›z. 4

Veritaban›nda yer alan popp tablosu, insanlar›n yaflad›¤› yerleflim


D Ü fi Ü N E L ‹ M
yerlerini ve D Ü fi Ü N E L ‹ M

binalar› içermektedir. Tablonun kolonlar›ndan biri olan f_codedesc içinde yer-


leflim merkezleri için “Settlement”, binalar için “Building” tan›m›
S O R yap›lmaktad›r.
U S O R U
E¤er herhangi bir kay›t yerleflim yeriyse, type kolonunda flehir ismi, e¤er binay-
sa türü (CABIN, BUILDING) görülmektedir. Iliamna gölünün Detraf›nda ‹KKAT
yer alan D‹KKAT
yerleflim merkezlerini bulmak için flöyle bir sorgu oluflturulabilir:

N N
SELECT popp.type,
SIRA S‹ZDE SIRA S‹ZDE

ST_Distance(lakes.the_geom, popp.the_geom)/5280
AS mesafe
FROM lakes, popp
AMAÇLARIMIZ AMAÇLARIMIZ

WHERE lakes.names='Iliamna Lake' and


popp.f_codedesc='Settlement'
ORDER BY mesafe ASC K ‹ T A P K ‹ T A P

TELEV‹ZYON TELEV‹ZYON

‹NTERNET ‹NTERNET
192 Veritaban› Uygulamalar›

Sorgu, gölün isminin ‘Iliamna Lake’ olmas› koflulunu kontrol etmekte ve popp
tablosundaki yerleflim yerlerini kullanmaktad›r. Sorgudan geri dönen yerler, mesa-
feye göre ço¤alan s›rada s›raland›¤›nda (fiekil 10), gölün etraf›nda yer alan yerle-
flim merkezlerinin göle olan uzakl›¤›n›n bir milden az oldu¤u görülmektedir.

fiekil 10.10

Iliamna gölünün
etraf›ndaki
yerleflim
merkezlerinin
bulunmas›
10. Ünite - Co¤rafi Veritaban› Üzerinde Sorgulamalar 193

Özet

N
A M A Ç
Co¤rafi bilgi sisteminde oluflturulmufl flekil dosya- N
A M A Ç
PostGIS yordamlar›n› kullanarak, istenen sorgu
1 lar›n› veritaban›na aktarabileceksiniz. 3 kriterlerine göre SQL komutlar› oluflturabilecek-
PostGIS/PostgreSQL yaz›l›m› ve dayand›¤› Open- siniz.
GIS standartlar›, veritaban›nda uzamsal sorgula- PostGIS, sa¤lad›¤› çeflitli komutlarla co¤rafi ifl-
malar yap›lmas› için kullan›c›lara ve programc›- lemlerin yap›labilmesini sa¤lamaktad›r. ST_Area
lara büyük kolayl›k sa¤lamaktad›r. pgAdmin komutu, bir geometrik nesnenin kaplad›¤› alan›
program›nda, “Plugins” bölümünde yer alan, bulabilmektedir. ST_Length fonksiyonu da, çiz-
“PostGIS Shapefile and DBF loader” ö¤esi, shp gi fleklindeki co¤rafi nesnenin uzunlu¤unu he-
uzant›l› flekil dosyalar›n›n veritaban›na tablo ola- saplayabilmektedir. Bunlar gibi çok say›da fonk-
rak eklenmesini sa¤lar. siyon, SQL komutlar› içinde uzamsal hesaplama-
lar yap›lmas›n› kolaylaflt›rmaktad›r.
N Co¤rafi bilgi sistemine veritaban›nda yer alan
N
A M A Ç

2 tablolar› katman olarak ekleyebileceksiniz. Birden fazla tablodaki verileri iliflkilendiren SQL
A M A Ç
PostGIS eklentisi, PostgreSQL veritaban›nda co¤- 4 komutlar› oluflturabileceksiniz.
rafi veriler üzerinde sorgulama yap›lmas›n› sa¤- Birden fazla tabloda yer alan kay›tlar, PostGIS ta-
lamaktad›r. Co¤rafi Bilgi Sistemleri, veri kayna¤› raf›ndan sa¤lanan yordamlar›n kullan›lmas›yla
olarak dosyalar› kullanabildikleri gibi, veritaba- ifllenebilmekte ve yeni bilgiler oluflturulabilmek-
n›nda yer alan co¤rafi özellikli tablolar› da kat- tedir. PostGIS kütüphanesi ve OpenGIS standart-
man olarak ekleyebilmektedir. Ücretsiz bir yaz›- lar› talepler do¤rultusunda her geçen gün yeni
l›m olan Quantum GIS yaz›l›m› www.qgis.org si- özelliklerle güncellenmekte ve yeni yordamlar
tesinden indirildikten sonra, kurulumu gerçek- komut listesine kat›lmaktad›r.
lefltirilmifltir. Ayn› sitede, e¤itim ve deneme amaç-
l› olarak Amerika Birleflik Devletlerinin Alaska
eyaletiyle ilgili bir veri seti bulunmaktad›r. Veri
setinde yer alan çeflitli co¤rafi nesnelere iliflkin
veri dosyalar›, PostgreSQL veritaban›na PostGIS
kullanarak yüklenebilmektedir. Veritaban›nda
yer alan co¤rafi nesnelerin bulundu¤u tablolar,
Quantum GIS taraf›ndan, katman olarak de¤er-
lendirerek görsellefltirilebilmektedir.
194 Veritaban› Uygulamalar›

Kendimizi S›nayal›m
1. SHP uzant›l› dosyalar› pgAdmin’de okumak için kul- 4.
lan›lan özellik afla¤›dakilerden hangisidir? SELECT
a. Open Database sum(ST_length(railroads.the_ge -
b. Import om))/5280
FROM grassland, railroads
WHERE ST_Intersects(rivers.the_ge-
c. Export

om, railroads.the_geom)
d. PostGIS Shapefile and DBF loader
e. pl/pgSQL Komut Sat›r›
Yukar›daki SQL komutunun ifllevi nedir?
2. a. Çay›rl›k alanlar›n, demiryollar›n›n geçti¤i alana
SELECT oran›n› hesaplamak
names, ST_Area(the_geom)/27878400 AS
alan
b. Çay›rl›k alandan geçen ve demiryolunu olufltu-

FROM lakes
ran çizgileri döndürmek

ORDER BY alan DESC


c. Demiryolunun kesti¤i çay›rl›k alanlar›n toplam
LIMIT 1 yüzölçümünü hesaplamak
d. Çay›rl›k alandan geçen demiryollar›n›n uzunlu-
En küçük gölün yüzölçümünü bulmak için yukar›daki ¤unu hesaplamak
SQL komutunda yap›lmas› gereken de¤ifliklik nedir? e. Çay›rl›k alandan geçmeyen demiryolu parçalar›-
a. DESC yerine ASC yaz›lmal›d›r. n›n toplam uzunlu¤unu hesaplamak
b. “LIMIT 1” kald›r›lmal›d›r.
c. “LIMIT 1” ifadesi, “LIMIT -1” olarak de¤ifltirilme- 5. ST_Distance() yordam›n›n ifllevi nedir?
lidir. a. ‹ki nesne aras›ndaki en yak›n uzakl›¤› vermek
d. “SELECT names, ST_Area(“ olarak bafllayan ifa- b. ‹ki nesnenin birbirine en uzak noktalar› aras›n-
de, “SELECT ST_Area(“ olarak de¤ifltirilmelidir. daki uzakl›¤› vermek
e. DESC yerine SORT yaz›lmal›d›r. c. ‹ki nesnenin birbirine en yak›n oldu¤u noktalar
aras›ndaki çizgiyi döndürmek
3. ST_DFullyWithin() yordam›n›n ifllevi nedir? d. Bir nesneye en yak›n duran nesneleri döndürmek
a. Bir nesnenin di¤erini tamamen kapsamas› duru- e. Üç nesne aras›nda birbirine en yak›n olan ikisi-
munda do¤ru de¤erini döndürmek ni getirmek
b. Belirli bir mesafeden daha yak›n olan nesneler
için do¤ru de¤erini döndürmek 6.
c. ‹ki nesnenin kesiflim kümesini döndürmek SELECT popp.type,
d. Poligon bir nesnenin üzerinde tamamen kapsa- ST_Distance(lakes.the_geom,
nacak flekilde duran çizgi nesnelerinin en uzun popp.the_geom)/5280
olan›n› döndürmek AS mesafe
FROM lakes, popp
WHERE lakes.names='Iliamna Lake' and
e. ‹ki çizgiyi kapsayan en küçük poligonu döndür-
popp.f_codedesc='Settlement'
mek
ORDER BY mesafe ASC

‹liamna gölüne en yak›n binalar› bulmak için, yukar›da-


ki sorguda yap›lmas› gereken de¤ifliklik nedir?
a. ORDER BY ile bafllayan sat›r kald›r›lmal›d›r.
b. Popp ifadesi lakes olarak de¤ifltirilmelidir.
c. ‘Settlement’ ifadesi ‘Building’ olarak de¤ifltiril-
melidir.
d. ST_Distance() yordam› yerine ST_Dfull-
yWithin() yordam› kullan›lmal›d›r.
e. FROM lakes, popp ifadesi FROM popp, la-
kes olarak de¤ifltirilmelidir.
10. Ünite - Co¤rafi Veritaban› Üzerinde Sorgulamalar 195

Kendimizi S›nayal›m Yan›t Anahtar›


7. 1. d Yan›t›n›z yanl›fl ise “Örnek Veri Setinin
SELECT names,
Veritaban›na Yüklenmesi” bafll›kl› bölümü
ST_Area(the_geom)/27878400 AS alan tekrar ediniz.
FROM lakes 2. a Yan›t›n›z yanl›fl ise “Gerçek Veri Seti Üzerinde
WHERE alan > 10 Co¤rafi Sorgulamalar” bafll›kl› bölümü tekrar
ediniz.
Yukar›daki SQL komutunun ifllevi nedir? 3. b Yan›t›n›z yanl›fl ise “Gerçek Veri Seti Üzerinde
a. En küçük yüzölçümüne sahip 10 gölün adlar›n› Co¤rafi Sorgulamalar” bafll›kl› bölümü tekrar
ve yüzölçümlerini getirmek ediniz.
b. 10 tane gölün yüzölçümünü hesaplay›p isimle- 4. d Yan›t›n›z yanl›fl ise “Gerçek Veri Seti Üzerinde
riyle beraber döndürmek Co¤rafi Sorgulamalar” bafll›kl› bölümü tekrar
c. En büyük yüzölçümüne sahip 10 gölün adlar›n› ediniz.
ve yüzölçümlerini getirmek 5. c Yan›t›n›z yanl›fl ise “Gerçek Veri Seti Üzerinde
d. 10 mil karelik yüzölçümüne en yak›n gölün bil- Co¤rafi Sorgulamalar” bafll›kl› bölümü tekrar
gilerini getirmek ediniz.
e. 10 mil kareden büyük göllerin isimlerini ve yü- 6. c Yan›t›n›z yanl›fl ise “Gerçek Veri Seti Üzerinde
zölçümlerini döndürmek Co¤rafi Sorgulamalar” bafll›kl› bölümü tekrar
ediniz.
8. Batakl›klar› poligon olarak gösteren veritaban› kat- 7. e Yan›t›n›z yanl›fl ise “Örnek Veri Setinin
man›na ne ad verilir? Veritaban›na Yüklenmesi” bafll›kl› bölümü
a. swamp tekrar ediniz.
b. grassland 8. a Yan›t›n›z yanl›fl ise “Örnek Veri Setinin
c. railroads Veritaban›na Yüklenmesi” bafll›kl› bölümü
d. tundra tekrar ediniz.
e. alaska 9. b Yan›t›n›z yanl›fl ise “Gerçek Veri Seti Üzerinde
Co¤rafi Sorgulamalar” bafll›kl› bölümü tekrar
9. Buzlu alanlar›n (landice) tan›mlanmas› için kullan›- ediniz.
lan geometrik afla¤›dakilerden hangisidir? 10. e Yan›t›n›z yanl›fl ise “Gerçek Veri Seti Üzerinde
a. polygon Co¤rafi Sorgulamalar” bafll›kl› bölümü tekrar
b. line ediniz.
c. multiline
d. multipolygon
e. circle

10. Alaska’da kaç tane havalan›n›n bulundu¤unu sor-


gulamak için kullan›labilecek SQL komutu afla¤›daki-
lerden hangisidir?
a. SELECT ST_Area(the_geom) FROM alaska;
b. SELECT ST_Within(airports.the_geom, alas-
ka.the_geom) FROM airports, alaska;
c. SELECT ST_Area(alaska.the_geom) FROM alaska;
d. SELECT the_geom FROM alaska;
e. SELECT COUNT(*) from airports;
196 Veritaban› Uygulamalar›

S›ra Sizde Yan›t Anahtar› Yararlan›lan ve Baflvurulabilecek


Kaynaklar
S›ra Sizde 1 Consortium, O. G. (2006). OpenGIS ® Implementation
alaska.shp, Trees.shp, Swamp.shp, Tundra.shp, Landi- Specification for Geographic information - Simple
ce.shp, Grassland.shp, Builtups.shp, Railroads.shp, Tra- feature access - Part 1: Common architecture, rapor.
ils.shp, Pipelines.shp, Rivers.shp, Majrivers.shp, Consortium, O. G. (2006). OpenGIS Implementation
Airports.shp, Popp.shp dosyalar›n›, pgAdmin pencere- Specification for Geographic information - Simple
sindeki “Plugins” bölümündeki “PostGIS Shapefile and feature access - Part 2: SQL option, rapor.
DBF loader” eklentisiyle veritaban›na yükleyiniz. Her PostGIS kullan›m k›lavuzu ve örnekler için
flekil dosyas›, ayr› bir tablo haline gelecektir. http://postgis.refractions.net/ sitesine bak›labilir.
“PostGIS in Action”, Regina O. Obe and Leo S. Hsu,
S›ra Sizde 2 Manning yay›nlar›, 2010.
Bu koordinatlara en yak›n havalalan›, “BRYANT OpenGIS standartlar› için, http://www.opengeospatial
AHP”dir. .org/standards/is
PostgreSQL kullan›m k›lavuzlar›, http://www.postgres
S›ra Sizde 3 ql.org/docs/
Sherman, G. E. (2008). Desktop GIS Mapping the Planet
SELECT airports.name
FROM airports
with Open Source Tools, The Pragmatic Bookshelf.

WHERE ST_Within
Wikipedia, http://en.wikipedia.org/wiki/Postgis
(airports.the_geom, http://www.bostongis.org/PrinterFriendly.aspx?content
tundra.the_geom) _name=postgis_tut01

sorgusuyla tundra üzerinde yer alan havalalanlar› bulu-


nabilir. Sorgu, “NOATAK”, “SELAWIK”, “TIN CITY
LRRS”, “GRANITE MOUNTAIN AFS”, “NOME”, “GAM-
BELL”, “SAVOONGA”, “VALDEZ”, “NIKOLSKI AS”, “AT-
KA”, “HAINES” havalaanlar›n› döndürecektir.

S›ra Sizde 4

SELECT
sum(ST_length(rivers.the_geom))/5280
FROM grassland, rivers
WHERE nam = ‘TOGIAK RIVER’ AND
ST_Intersects(rivers.the_geom,
grassland.the_geom)

komutu, söz konusu nehrin kaç kilometresinin çay›rl›k


alandan geçti¤ini bulmaktad›r. Sorgu, 26.99 kmlik ala-
n›n çay›rl›k alandan geçti¤ini göstermektedir.

You might also like