241
VERİ TABANI YÖNETİMİ Dr. Öğr. Üyesi Tuba KURBAN

VERİ TABANI YÖNETİMİ - AVESİS

  • Upload
    others

  • View
    28

  • Download
    0

Embed Size (px)

Citation preview

Page 1: VERİ TABANI YÖNETİMİ - AVESİS

VERİ TABANI YÖNETİMİ

Dr. Öğr. Üyesi Tuba KURBAN

Page 2: VERİ TABANI YÖNETİMİ - AVESİS

Ders Kazanımları

• Bir veritabanını mantıksal ve fiziksel olarak tasarlabilme

• Farklı veritabanı yönetim sistemleri (VTYS) üzerinde veritabanı oluşturma, güncelleme, sorgulama işlemlerini yapabilme,

• Yapısal sorgulama dili (SQL) komutlarını kullanabilme,s

• Coğrafi bilgi sistemi yazılımları (ArcGIS, PostGIS, Qgis vb.) ve VTYS yazılımlarını birlikte kullanabilme.

Page 3: VERİ TABANI YÖNETİMİ - AVESİS

Veri ve Bilgi

• Veri çeşitli şekillerde işlenmeye hazır durumda olan fakat ilk bakışta faydasız ve anlamsız gibi görünen kayıtlardır.

• Bilgi ise işlenmiş ve kullanıcı için yararlı ve kullanışlı olan verilere denmektedir.

• Örneğin öğrenci bilgilerinin tutulduğu bir veritabanı düşünelim. Bu veritabanından “Harita Mühendisliği” bölümü öğrencileri içinden “Veritabanı Yönetimi” dersini alan öğrencilerin listesi önemli bir bilgidir.

Page 4: VERİ TABANI YÖNETİMİ - AVESİS

Varlık, Varlık Sınıfı, Öznitelik

• Varlık(Entity), veritabanımızda bilgilerini tutmakistediğimiz nesneler, yerler, olaylar veya kişilerdir.Varlık bir ürün, bir müşteri gibi somut bir nesneolabileceği gibi banka hesapları, öğrenci notları gibisoyut bilgilerde olabilir.

• Varlık Sınıfı, benzer karakteristiklere sahip varlıklarınbir araya gelerek oluşturduğu bir kümedir. Bukümelere örnek olarak Müşteriler, Öğrencilerverilebilir.

• Öznitelik, varlıklara ait özelliklerdir.

Page 5: VERİ TABANI YÖNETİMİ - AVESİS

Örnek

• Bir varlık sınıfındaki her bir varlık, kendisini sınıftakidiğer varlıklardan ayıran en az bir özniteliğe sahipolmalıdır. Bu o varlığa ait tek olan bir kimlik bilgisiveya numarasıdır.

Page 6: VERİ TABANI YÖNETİMİ - AVESİS

Veri Tabanı

• Birbiriyle ilişkisi olan verilerin tutulduğu,

• Kullanım amacına uygun olarak düzenlenmiş veriler topluluğunun,

• Mantıksal ve fiziksel olarak tanımlarının bulunduğu

• Bilgi depolarıdır.

Page 7: VERİ TABANI YÖNETİMİ - AVESİS

Veri tabanı

• Veri tabanı kavramı ilk olarak 1980’li yıllar

• Basit bir web uygulamasından

• uluslararası kuruluşların büyük ve karışık verilerine kadar

• pek çok alanda veri tabanı uygulamalarına ihtiyaç durulmaktadır.

Page 8: VERİ TABANI YÖNETİMİ - AVESİS

• Veritabanı yönetim sistemleri, fiziksel hafızada bilgileri çeşitli özelliklere göre gruplandırıp şekillendirdikten sonra saklayan programlardır. Kısaca VTYS diye adlandırılır.

• VTYS, – saklanan bu veriyi, SQL komutları ile insanların isteklerine göre işler,

yeniden şekillendirir.

– Veritabanı Yönetim Sistemi’nin bir ucunda, bilgisayar disk(ler)inde saklanan düzenlenmiş veriler, diğer ucunda ise bir kullanıcı (genellikle insan) vardır.

Page 9: VERİ TABANI YÖNETİMİ - AVESİS

Şekil 1.1: VTYS Kalıbı

⚫Veritabanı Yönetim Sistemleri, her zaman bir

kullanıcıya, yönetim ekranlarından bilgi vermek için

kullanılmaz. Bazen kullanıcı konumunda doğrudan

bir insan yerine bir programda olabilir.

Page 10: VERİ TABANI YÖNETİMİ - AVESİS

• Veritabanı yönetim sistemlerinde – yanlış verinin depolanmasına

– verinin istenmeyen kişilerin kullanımına sunulmasının engelleyen birtakım imkânlar bulunur.

• Çeşitli konularda birçok bilgi saklanması gerektiği zaman bu işlemler klasik dosya sistemi ve veritabanı sistemi ile yürütülebilir.

Page 11: VERİ TABANI YÖNETİMİ - AVESİS

Klasik Dosya (File) Sistemi

• Burada n tane ayrı dosya n tane ayrı program tarafından işlenmektedir. Her program rapor üretme esnasında ayrı ayrı işletim sistemi ile yüz yüze gelmektedir.

İstenen Bilgiler

1.Kullanıcı

İstenen Bilgiler

2.Kullanıcı Programlama

dili C++İşletim

Sistemi

Dosya 2 İlgili

Alanlar

Programlama

dili BASICİşletim

Sistemi

Dosya 1 İlgili

Alanlar

3.Kullanıcı

Şekil : Klasik Dosya Sistemi

Page 12: VERİ TABANI YÖNETİMİ - AVESİS

Veritabanı Sistemi

• N tane ayrı program tarafından ihtiyaç duyulan tüm veriler tek bir mantıksal dosya içerisine yerleştirilmiştir. Böylece klasik dosya sisteminden farklı olarak her uygulama programı için ayrı bir dosya tutulması yerine bir veri tabanı dosyası kullanılmaktadır.

1.Kullanıcı

İstenen Bilgiler

2.Kullanıcı

3.Kullanıcı

Sorgu

Dili

Veri

İşleme

Dili

VTYS

İşletim

Sistemi

Veri Tabanı

İstenen Bilgiler

İstenen Bilgiler

Şekil : Veri Tabanı Sistemi

Page 13: VERİ TABANI YÖNETİMİ - AVESİS

• Veritabanı ile ilgili bazı tanımlamalar aşağıda sıralanmıştır. Bunlar:

• Veritabanı; birbirleriyle ilişkisi olan verilerin tutulduğu, kullanım amacınauygun olarak düzenlenmiş veriler topluluğunun mantıksal ve fiziksel olaraktanımlarının olduğu bilgi depolarıdır. Veritabanları gerçekte var olan vebirbirleriyle ilişkileri olan nesneleri ve ilişkilerini modeller.

• Veritabanı yönetim sistemi; veritabanlarını kurmayı, oluşturmayı,tanımlamayı, işletmeyi ve kullanmayı sağlayan programlar topluluğudur. VTYSveya database management system (DBMS) ismi ile de kullanılabilir. Veritabanıyönetim sistemi, kullanıcı ile veritabanı arasında arabirim oluşturur veveritabanına her türlü erişimi sağlar.

Page 14: VERİ TABANI YÖNETİMİ - AVESİS

• Veri tabanı yöneticisi (Database Administrator); Bir veri tabanı üzerinde her türlü yetkiye sahip olan kişidir. Veri tabanının tasarımı, üzerinde değişiklikler yapma, kullanıcılara izinler verme gibi fonksiyonlara sahiptir. Veri tabanı yöneticisi, gerçek bir kişi olabileceği gibi, bir gruba da yetki verilmiş olabilir.

• Veritabanının tanımlanması; veritabanını oluşturan verilerin tip ve uzunluklarının belirlenmesidir.

• Veritabanını oluşturulması; veri için yer belirlemesi ve saklama ortamına verilerin yüklenmesini ifade eder.

• Veritabanı üzerinde işlem yapmak; belirli bir veri üzerinde sorgulama yapmak, meydana gelen değişiklikleri yansıtmak için veritabanının güncellenmesi ve rapor üretilmesi gibi işleri teslim eder.

Page 15: VERİ TABANI YÖNETİMİ - AVESİS

• Verinin bakım ve sürekliği; veritabanına yeni kayıt eklemek, eskileri çağırmak ve gerekli düzenleme, düzeltme ve silme işlemlerini yapmak gibi işlemlerin gerçekleştirilmesini ifade eder. Veritabanı yönetim sistemi aynı zamanda verinin geri çağrılabilmesini de sağlar.

• Veritabanını genişletme; kayıtlara yeni veri eklemek ve yeni kayıtlar oluşturmak gibi işlemleri ifade eder.

• Veritabanı yönetim sistemi programları; fiziksel hafızaya ve veri tiplerini kullanıcılar adına şekillendirip denetleyen ve kullanıcılarına standart bir SQL ara yüzü sağlayarak onların dosya yapıları, veri yapısı, fiziksel hafıza gibi sorunlarla ilgilenmek yerine veri giriş – çıkışı için uygun ara yüzler geliştirmelerine olanak sağlayan yazılımlardır.

Page 16: VERİ TABANI YÖNETİMİ - AVESİS

Metadata

• Metadata, bir veritabanı içerisindeki verilerin kendisiolmayıp bu veriler hakkındaki bilgilerdir. Örneğin,tablolardaki alanlara ait özellikler veya indeksler gibibilgiler.

Page 17: VERİ TABANI YÖNETİMİ - AVESİS

VTYS’nin Temel Bileşenleri (1)

Veri

Tabanı

Yöneticisi Sorgu İşleyicisi

(SQL)

Tablo yaratma

Form yaratma

Sorgu yaratma

Rapor yaratma

Kayıt ekleme

Kayıt silme

Kayıt güncelleme

Veri Tabanı

Genişletilmiş

Programlama

Dili (DML +

taşıyıcı dil)

Derleyicisi

Uygulama

Programı

VT

Sorgusu

VT

Tanımları

Derlenmiş

Uygulama

Programı

Derlenmiş

VT

Tanımları

Kullanıcı verileri

Metadata

Dizinler

Uygulama Metadatası

Veri Tabanını

Oluşturma

Veri Tabanını

Kullanma

Veri Tanımlama

Dili (DDL)

Derleyicisi

Page 18: VERİ TABANI YÖNETİMİ - AVESİS

Veri Tabanı Örnekleri

• Üniversite- Öğrenci İşleri Bilgi Sistemi

• Hastane-Hasta, doktor, tedavi, araç-gereç, mali bilgiler

• Ticari bir şirket- Müsteri, Ürün, Satış, Ödeme, Teslimat bilgileri

• Banka-Müşteri, mevduat, kredi kartı, kredi bilgileri

Page 19: VERİ TABANI YÖNETİMİ - AVESİS

Veri Tabanı Yaklaşımının Avantajları

• Ortak verilerin tekrarını önIenmesi ;

• Verilerin merkezi denetiminin ve tutarlılığının sağlanması

• Veri payIaşımının sağlanması

• Fiziksel yapı ve erişim yöntemi karmaşıklıklarının, çok katmanlı mimarilerle kullanıcıdan gizlenmesi,

• Her kullanıcıya yalnız ilgilendiği verilerin, alışık olduğu kolay, anlaşılır yapılarda sunulması

Page 20: VERİ TABANI YÖNETİMİ - AVESİS

Veri Tabanı Yaklaşımının Avantajları

• Sunulan çözümleme, tasarım ve geliştirme araçları ile uygulama yazılımı geliştirmenin kolaylaşması.

• Güvenlik ve gizliliğin istenilen düzeyde sağlanması

• Yedekleme, yeniden başlatma, onarma gibi işletim sorunlarına çözüm getirilmesi

Page 21: VERİ TABANI YÖNETİMİ - AVESİS

Veri Tabanı Yönetim Sistemi

• Yeni bir veritabanı oluşturmak,

• Veri tabanını düzenlemek

• Kullanmak,

• Geliştirmek

• Bakımını yapmak için

• Çeşitli karmaşık işlemlerin gerçekleştirildiği bir yazılım sistemidir.

Page 22: VERİ TABANI YÖNETİMİ - AVESİS

Veri Tabanı Yönetim Sistemleri

Oracle database IBM DB/2 Adaptive Server Enterprise Informix Microsoft Access Microsoft SQL Server Microsoft Visual FoxPro MySQL PostgreSQL Progress SQLite Teradata CSQL OpenLink Virtuoso

Page 23: VERİ TABANI YÖNETİMİ - AVESİS

Veri Modeli

• Günümüzde en çok kullanılan veri modeli ilişkisel

veri modelidir.

Page 24: VERİ TABANI YÖNETİMİ - AVESİS

Veri Tabanı Yönetim Sistemlerinin Sınıflandırılması

• Veri Modeline Göre

– Hiyerarşik

– Ağ

– İlişkisel

– Nesneye Yönelik

• Kullanıcı Sayısına Göre

– Tek kullanıcılı

– Çok kullanıcılı

Page 25: VERİ TABANI YÖNETİMİ - AVESİS

Hiyerarşik veritabanları

• Veri tabanları için kullanılan ilk modeldir

• Hiyerarşik veritabanları bilgileri bir ağaç yağısında saklarlar.

Page 26: VERİ TABANI YÖNETİMİ - AVESİS

Ağ veritabanları

• Hiyerarşik veritabanları yetersiz kalınca 1960’ların sonunda verilerin ağaçların daha gelişmiş hali olan graflar şeklinde saklandığı yapı ortaya çıkmıştır.

Page 27: VERİ TABANI YÖNETİMİ - AVESİS

İlişkisel veritabanları

• 1970’lerin başında geliştirilmiştir.

• Bu sistemde veriler tablo şeklinde saklanır.

• Tablolar arasındaki bağlantılar matematiksel ilişkilerle gösterilir.

• Günümüzdeki hemen hemen tüm veri tabanı programları bu yapıdadır.

Page 28: VERİ TABANI YÖNETİMİ - AVESİS

İlişkisel veritabanları

Page 29: VERİ TABANI YÖNETİMİ - AVESİS

Nesneye Yönelik veritabanları

• Günümüzdeki pek çok kelime işlemci ve hesap tablosu programında kullanılan nesneler artık veritabanlarında da kullanılmaktadır.

• Nesneye yönelik veritabanı C++ gibi nesneye yönelik bir dille oluşturulan ve yine bu tarz bir dille kulanılan veri tabanı anlamına gelir.

Page 30: VERİ TABANI YÖNETİMİ - AVESİS

İlişkisel Veri Tabanı Yapısı

Veri tabanı

Tablo Tablo Tablo Tablo Tablo

Alan 1 Alan 2 Alan3 Alan4

1

2

3

Page 31: VERİ TABANI YÖNETİMİ - AVESİS

Tablo

• Bir veritabanı tablolarda saklanan verilerden oluşur.

• Tablolar verilerin satırlar ve sütunlar halinde düzenlenmesiyle oluşan veri grubudur.

• Örneğin ders içeriği ve öğrenci bilgilerini veritabanında saklamak için 2 tablo oluşturulur:– Ogrenci_bilgileri

– icerik

Page 32: VERİ TABANI YÖNETİMİ - AVESİS

Tablo

• Tablo içindeki her bir bilgi kayıt,

• Sütunlar ise alan olarak isimlendirilir.

• Örneğin öğrenci bilgileri tablosunda– öğrenci numarası,

– adı soyadı,

– doğum tarihi,

– doğum yeri,

– e-mail adresi

bilgileri yer alacaksa

Page 33: VERİ TABANI YÖNETİMİ - AVESİS

Tablo

Alan

Ogr_no Ad_soyad d_tarih d_yeri e-mail

1 Ayşe Öztürk 01.11.1979 Konya [email protected]

2 Sema Özdemir 24.05.1975 Ankara [email protected]

3 Serdar Gülpınar 06.06.1983 Adana [email protected]

4 Mehmet Efe 11.02.1978 Niğde [email protected]

5 Zerrin Polat 22.08.1980 Antalya [email protected]

6 Ulviye Kubalı 12.12.1984 İstanbul [email protected]

Alan

Kayıt

Page 34: VERİ TABANI YÖNETİMİ - AVESİS

Veri Türleri

• Veri tabanında tutulan kayıtların yapısı hakkında bilgi sahibi olmak için

• Alanların bazı özelliklerinin önceden tanımlanması gerekir.

• Örneğin personel sicil numarası mutlaka tam sayı, ad soyad harflerden oluşması gibi

Page 35: VERİ TABANI YÖNETİMİ - AVESİS

Anahtar (Key)

• Anahtar bir veya birden fazla alanın(özniteliğin) bir satır için niteleyici olarak girilmesi için zorlanan bir çeşit zorlayıcıdır.

• 2 çeşit anahtar vardır:

– Birincil Anahtar (Primary Key)

– Yabancı Anahtar (Foreign Key)

Page 36: VERİ TABANI YÖNETİMİ - AVESİS

Birincil anahtar

• Bir kayıta ulaşmayı sağlayacak anahtar veridir.

• Örneği öğrenciler arasında iki Ahmet var. Arama yaparken istediğimiz Ahmet’i bulmak için her bir öğrenciye özel bir numara olmalıdır.

• Örneğin öğrenci numarası

• Birden fazla alanda birlikte birincil anahtar olabilir

Page 37: VERİ TABANI YÖNETİMİ - AVESİS

Yabancı anahtar

• Bir tabloya girilebilecek kayıtları başka bir tablonun belli alanındaki verilerle – sınırlandırmaya ve

– ilişkilendirmeye yarar.

• Örneğin öğrencilerin not verilerinin girildikleri tablodaki her satıra öğrenci bilgileri tablosundaki öğrenci no ile eşleşen bir değer girilmesi gibi.

Page 38: VERİ TABANI YÖNETİMİ - AVESİS

Proje ve VTYS Arasındaki İlişki

• Herhangi bir veritabanı yönetim sistemi üzerince çalışmaya başlamadan önce, yapılacak işe uygun veritabanı tasarımı yapılmalıdır. Bu, işin en önemli aşamasıdır.

• Başlangıçta iyi tasarlanamayan bir veritabanı, ilerde geriye dönüşü olmayan verimsiz bir bilgi yığınına dönüşebilir.

• En basit hali ile veritabanı tasarımında; hangi tabloların olacağı, bu tablolarda hangi alanların olacağı, tablolar arasındaki alan ilişkilerinin neler olacağı ve alanlara ait özelliklerin tanımlanması yapılır.

• Alan özelliklerinde alan adı, alan tipi, alanın uzunluğu, alanın varsayılan değeri, bu alana yazılacak verilerin geçerlilik koşullarının başlangıçta tasarlanması gerekir.

Page 39: VERİ TABANI YÖNETİMİ - AVESİS

• Bir projede hangi veritabanı yönetim sisteminin seçileceği, projenin büyüklüğü ile ilgili bir karardır. Aşağıdaki sorulara verilecek cevaplar projenin büyüklüğü konusunda karar vermede yardımcı olurlar.

• Projede kaç tablonun kullanılacağı,• Her bir tabloda en fazla kaç satırın yer alabileceği (tablodaki bilgi

sayısıdır),• Projeye aynı anda en fazla kaç kullanıcının bağlanacağı,• Projede günlük kaç transaction (insert-update-delete)

gerçekleştirileceği,• Proje en fazla ne kadar yer kaplayacak, ne kadar bir veritabanı

dosyasına ihtiyaç duyulacağı, • Proje için güvenliğin ne derece önemli olduğu.

Page 40: VERİ TABANI YÖNETİMİ - AVESİS

Veri tabanı Tasarlama

1. Nesneler ( varlıklar) tanımlanır

Kütüphane bilgi sistemi: kitap, üyeler, türler, ödünç hareketleri

Page 41: VERİ TABANI YÖNETİMİ - AVESİS

Veri tabanı Tasarlama

2. Her nesne için bir tablo oluşturulur.

kitap,

uyeler,

turler,

odunc_hareketleri

Page 42: VERİ TABANI YÖNETİMİ - AVESİS

Veri tabanı Tasarlama

3. Her tablo için bir anahtar alan seçilir

Kitap tablosu: kitapno

Üyeler tablosu: uyeno

Page 43: VERİ TABANI YÖNETİMİ - AVESİS

Veri tabanı Tasarlama

4. Nesnelerin her bir özelliği için tabloya sütun eklenir

Kitap tablosu: kitapno, yılı, yazarı, adı, ilgili olduğu alan

Page 44: VERİ TABANI YÖNETİMİ - AVESİS

Veri tabanı Tasarlama

5. Tekrarlayan nesne özellikleri için ek tablolar oluşturulur.

İstek tablosuuyeno İstek _tarihi Kitap_adi Kitap_yili Kitap_yazari ilgili _alan

Page 45: VERİ TABANI YÖNETİMİ - AVESİS

Veri tabanı Tasarlama

6. Tablo ile doğrudan ilişkili olmayan alanlar belirlenir.

Ödünç hareketleri tablosunda kitabı ödünç alan üyenin adresi doğrudan bu tablo ile ilişkili değildir.

Bu veri üye bilgilerinin tutulduğu uyeler tablosunda yer almalıdır.

Page 46: VERİ TABANI YÖNETİMİ - AVESİS

Veri tabanı Tasarlama

7. Tablolar arasındaki ilişkiler tanımlanmalıdır.

Tanımlanan tablodaki alanların birbiri ile ilişkisi tanımlanır.

Örneğin uyeler tablosundaki uyeno ile odunç_tablosundaki uyeno alanı ilişkilendirilmelidir.

Page 47: VERİ TABANI YÖNETİMİ - AVESİS
Page 48: VERİ TABANI YÖNETİMİ - AVESİS

Kaynaklar

• Köseoğlu, K. (2005). Veri Tabanı Mantığı. Şefik Matbaası. İstanbul

• Alokoç Burma, Z. (2005). Veritabanı Yönetim Sistemleri ve SQL / PL - SQL / T – SQL. Seçkin Yayıncılık. Ankara

Page 49: VERİ TABANI YÖNETİMİ - AVESİS

Veritabanı YönetimiVarlık İlişki Diyagramları

Yrd. Doç. Dr. Tuba KURBAN

Page 50: VERİ TABANI YÖNETİMİ - AVESİS

Veritabanı Tasarımı

- Projenin tasarım aşamasında veritabanı tasarımı çok iyi yapılmalıdır. Daha sonra yapılacak değişiklikler sorunlar çıkartabilir veya çok zahmetli olabilir.

- Veritabanı tasarımı yapılırken izlenecek adımları şu şekilde sıralayabiliriz :

Veritabanı Tasarımı

Page 51: VERİ TABANI YÖNETİMİ - AVESİS
Page 52: VERİ TABANI YÖNETİMİ - AVESİS

Varlık-İlişki Modeli

Varlık-İlişki Modeli (Entity-Relationship Model)

- Kavramsal tasarım, veritabanında tutulacak verilerin gösterimi için kullanılır.

- Kavramsal tasarım için en çok kullanılan modelER (Entity-Relationship Model) <-> (Varlık-İlişki Modeli)

Varlık İlişki Modeli

Page 53: VERİ TABANI YÖNETİMİ - AVESİS

Varlık-İlişki Modeli

- Varlık : Modelin en temel üyesidir. Var olan ve benzerlerinden ayırt

edilebilen her şey varlıktır. Örneğin; kitap, öğrenci, araba birer varlıktır. Veritabanı olarak düşünülürse her bir tablo bir varlık kümesidir.

- Nitelik : Varlıkların her bir özelliği bir nitelik olarak ifade edilir.

Örneğin, öğrenci adı ve numarası öğrenci varlığının nitelikleridir. Modelin içerisinde nitelikler oval ile gösterilir ve içerisine niteliğin ismi yazılır. Veritabanı olarak düşünülürse tablonun her bir sütunu bir niteliği gösterir.

Varlık İlişki Modeli

Page 54: VERİ TABANI YÖNETİMİ - AVESİS

Varlık-İlişki Diyagramı

Varlık Kümesi Nitelik

İlişki KümesiZayıf Varlık

KümesiAnahtar Nitelik

Türetilen NitelikBağımlı Varlık Kümesi

Page 55: VERİ TABANI YÖNETİMİ - AVESİS

Varlık-İlişki Modeli

Bir niteliğin değeri her bir varlık için farklıysa bu nitelik anahtar nitelik

olarak belirlenir.

Anahtar nitelik şema içerisinde

niteliğin altı çizilerek gösterilir.

Örneğin; öğrenci no gibi.

(Yandaki tabloda id sütunu)

Varlık İlişki Modeli

Page 56: VERİ TABANI YÖNETİMİ - AVESİS

Varlık-İlişki Modeli

- İlişki : Farklı varlıklar arasındaki ilişkileri ifade eder.

- Örneğin; öğrenci ve dersler

- Öğrenciler ders almak zorunda olduğu için iki varlık arasında ders alma ilişkisi vardır.

- Model içerisinde ilişkiler baklava dilimi ile gösterilir ve içerisine ilişkinin adı yazılır.

- Tablolar arasında kullanılan ilişkiler 1-1, 1-n, n-1, n-m ile gösterilir.

Varlık İlişki Modeli

Page 57: VERİ TABANI YÖNETİMİ - AVESİS

Varlık-İlişki ModeliVarlık İlişki Modeli

Page 58: VERİ TABANI YÖNETİMİ - AVESİS

İlişki Tipleriİlişki Türleri

Page 59: VERİ TABANI YÖNETİMİ - AVESİS

İlişki Tipleriİlişki Türleri

Page 60: VERİ TABANI YÖNETİMİ - AVESİS

Bire-Çok İlişki (1-n)

• En çok kullanılan ilişki şeklidir.

• Bu ilişkide A tablosundaki bir kayıt B tablosundaki birden çok eşleşen kayda sahiptir. Fakat, bunun tersi doğru değildir.

• Örneğin, müşteri-sipariş tabloları arasındaki ilişki

İlişki Türleri

Page 61: VERİ TABANI YÖNETİMİ - AVESİS

İlişki Tipleriİlişki Türleri

Page 62: VERİ TABANI YÖNETİMİ - AVESİS

Çoka-Çok İlişki (n-m)

• Bu ilişkide A tablosundaki bir satırın B tablosunda çok sayıda eşi vardır ve tam tersi de geçerlidir.

• Bu tür ilişkileri, birincil anahtarları A ve B tablolarının yabancı anahtarlarından oluşan bağlantı tablosu diye adlandırılan üçüncü bir tablo tanımlayarak oluşturabilirsiniz.

İlişki Türleri

Page 63: VERİ TABANI YÖNETİMİ - AVESİS

Varlık-İlişki Modeli Örneği

• Bir elektronik firması ürettiği ürünler, kullandığı bileşenler ve her ürün için hangi bileşenlerin hangi miktarlarda kullanıldığını gösteren bir Ürün-Bileşen Veri Tabanı oluşturmak istiyor:1. Veri tabanında her bileşenin kodu, adı, tanıtıcı açıklaması, stok miktarı

ile hangi satıcıdan satın alındığı verilerinin bulunması isteniyor. 2. Her satıcının numarası, adı, adresi ve telefon numarasının veri

tabanında yer alması isteniyor.3. Her bileşen tek bir satıcıdan satın alınıyor; ancak aynı satıcıdan birden

çok bileşen alınabiliyor.4. Her ürünün kodu, adı, birim fiyatı ve stok miktarı gerekiyor. 5. Bu ürünün üretilmesi için hangi bileşenlerden kaçar adet gerekli

olduğu önem taşıyor.6. Her ürün bileşenlere varolma bağımlıdır.

Page 64: VERİ TABANI YÖNETİMİ - AVESİS

Çözüm 1

• Veri tabanında her bileşenin kodu, adı, tanıtıcı açıklaması, stok miktarı ile hangi satıcıdan satın alındığı verilerinin bulunması isteniyor.

BİLEŞEN

Miktar

Adı

Kodu

Açıklama

Satıcı_Kodu

Satıcı varlığından elde edileceği için yazılmayabilirdi.

Page 65: VERİ TABANI YÖNETİMİ - AVESİS

Çözüm 2

• Her satıcının numarası, adı, adresi ve telefon numarasının veri tabanında yer alması isteniyor.

SATICI

Adresi

Kodu

Telefon_No

Adı

Page 66: VERİ TABANI YÖNETİMİ - AVESİS

Çözüm 3

• Her bileşen tek bir satıcıdan satın alınıyor; ancak aynı satıcıdan birden çok bileşen alınabiliyor.

SATICI

Adresi

Kodu

Telefon_No

Adı

BİLEŞEN

Miktar

Adı

Kodu

Açıklama

Satın Alma

n 1

Page 67: VERİ TABANI YÖNETİMİ - AVESİS

Çözüm 4

• Her ürünün kodu, adı, birim fiyatı ve stok miktarı gerekiyor.

ÜRÜN

Stok_Miktarı

Kodu

Birim_Fiyat

Adı

Page 68: VERİ TABANI YÖNETİMİ - AVESİS

Çözüm 5

• Bu ürünün üretilmesi için hangi bileşenlerden kaçar adet gerekli olduğu önem taşıyor.

Üretim

Ürün_Kod

Adet

Bil_Kod

BİLEŞEN ÜRÜNn m

Page 69: VERİ TABANI YÖNETİMİ - AVESİS

Çözüm 6

• Her ürün bileşenlere varolma bağımlıdır.

– Bu durumda BİLEŞEN üstün varlık, ÜRÜN ise bağımlı varlıktır.

ÜRÜN

Stok_Miktarı

Kodu

Birim_Fiyat

Adı

Üretimn m

Adet

BİLEŞEN

Miktar

Adı

Kodu

Açıklama

Page 70: VERİ TABANI YÖNETİMİ - AVESİS

Çözümün Tamamı

ÜRÜN

Stok_Miktarı

Kodu

Birim_Fiyat

Adı

BİLEŞEN

Miktar

Adı

KoduAçıklama

Üretimn m

Adet

SATICI Adresi

Kodu

Telefon_No

Adı

Satın Alma

n

1AdetTarih

Page 71: VERİ TABANI YÖNETİMİ - AVESİS

Varlık – İlişki Diyagramı (Örnek)

Page 72: VERİ TABANI YÖNETİMİ - AVESİS
Page 73: VERİ TABANI YÖNETİMİ - AVESİS

Varlık-İlişki Modelinin Tablolara Dönüştürülmesi

- Oluşturulan model tabloya dönüştürülürken;

varlık kümeleri tablolara dönüştürülür.

varlık kümesinin nitelikleri de tablonun sütunlarına dönüştürülür.

- Tabloya dönüştürme işleminde modelde oluşturulan ilişkilerin durumuna göre tabloların ilişkileri ve doğal olarak da anahtar sütunları belirlenir.

- İlişkide bir varlık kümesinin birincil anahtarı diğer varlık kümesinin yabancı anahtarı olarak belirlenir. Hangisinin birincil hangisinin yabancı anahtar olacağına tablonun içereceği bilgilere göre karar verilir.

Varlık İlişki Modelinin Tablolara Dönüştürülmesi (1-1 ilişki)

Page 74: VERİ TABANI YÖNETİMİ - AVESİS

Bire-Bir (1-1) İlişkilerin Tablolara Dönüştürülmesi

Personel (personelID, adsoyad, adres, maas, bolumID)

Bolum (bolumID, ad)

Varlık İlişki Modelinin Tablolara Dönüştürülmesi (1-1 İlişki)

Page 75: VERİ TABANI YÖNETİMİ - AVESİS

Bire-Çok (1-n) İlişkilerin Tablolara Dönüştürülmesi

- Varlık kümeleri tablolara dönüştürülür.

- Nitelikler tabloların sütunlarına dönüştürülür.

- İlişkinin n tarafındaki tabloya 1 tarafından tablonun birincil anahtar sütunu yabancı anahtar olarak eklenir.

Bu kurallar doğrultusunda varlık-ilişki modelini tablolara dönüştürelim.

Varlık İlişki Modelinin Tablolara Dönüştürülmesi (1-n İlişki)

Page 76: VERİ TABANI YÖNETİMİ - AVESİS

Bire-Çok (1-n) İlişkilerin Tablolara Dönüştürülmesi

Personel (personelId, adSoyad, adres, maas, bolumId)

Bolum (bolumId, adi)

Primary KeyPrimary Key

Primary KeyPrimary Key Foreign Key

Varlık İlişki Modelinin Tablolara Dönüştürülmesi (1-n İlişki)

Page 77: VERİ TABANI YÖNETİMİ - AVESİS

Çoka-Çok (n-m) İlişkilerin Tablolara Dönüştürülmesi

- Varlık kümeleri tablolara dönüştürülür.

- Oluşturulan ilişki isminde tablo oluşturulur.

- Nitelikler tabloların sütunlarına dönüştürülür. Tanımlayıcı nitelikler ilişkiden oluşturulan tabloya sütun olarak eklenir.

- İlişkiyi oluşturan tabloların birincil anahtarları ilişkiyi oluşturan tabloya yabancı anahtar olarak eklenir.

- İlişkiden oluşturulan tablonun birincil anahtarı oluşturulan yabancı anahtarların birleşiminden oluşur. Eğer, bu şekilde oluşturulan birincil anahtar ihtiyaçlara cevap vermiyorsa yeni bir sütun eklenerek birincil anahtar yapılır.

Varlık İlişki Modelinin Tablolara Dönüştürülmesi (n-m İlişki)

Page 78: VERİ TABANI YÖNETİMİ - AVESİS

Çoka-Çok (n-m) İlişkilerin Tablolara Dönüştürülmesi

Film (filmID, filmAdi, y_tarihi, yonetmen)

Sinema (sinemaID, sinemaAdi, adres, telefon)

Oynar (oynarID, filmID, sinemaID, tarih, saat)

Varlık İlişki Modelinin Tablolara Dönüştürülmesi (n-m İlişki)

Page 79: VERİ TABANI YÖNETİMİ - AVESİS

Zayıf Varlık Kümeleri

Zayıf (Weak) varlık türü

- Mevcutluğu diğer varlık türüne bağlı olan varlık türüdür. Eğer bir varlık kümesinin niteliklerinin tümü alınsa bile bir anahtar oluşturmuyorsa buna zayıf varlık kümesi denir.

� Üniversite-fakülte ilişkisinde, bir fakülte üniversite olmadan olamayacağı için ve aynı fakülte isminde başka üniversitelerde fakülte olabileceği için fakülte varlık kümesi zayıf varlık kümesidir.

Zayıf Varlık Kümeleri

Page 80: VERİ TABANI YÖNETİMİ - AVESİS

Zayıf Varlık Kümelerinin Tabloya Dönüştürülmesi

Universite (univNo, univAdi)

Fakulte (univNo, fakulteNo, fakulteAdi)

Zayıf varlık kümeleri çift çizgili dikdörtgen ile gösterilir.

Zayıf Varlık Kümelerinin Tablolara Dönüştürülmesi

Page 81: VERİ TABANI YÖNETİMİ - AVESİS

Normalizasyon

Normalizasyon

- Veritabanının tasarım aşamasında veri tekrarını, veri kaybını veya veri yetersizliğini önlemek için gerçekleştirilen işlemlere normalizasyon denir.

- Genel olarak normalizasyon için ek tablolar gerekir.

Normalizasyon

Page 82: VERİ TABANI YÖNETİMİ - AVESİS

Normalizasyon (Örnek)Normalizasyon

Page 83: VERİ TABANI YÖNETİMİ - AVESİS
Page 84: VERİ TABANI YÖNETİMİ - AVESİS

Sql Server ile ÇalışmaHafta 3

Page 85: VERİ TABANI YÖNETİMİ - AVESİS

SQL Server Authentication ile veritabanına bağlanma

• Server Type ile veritabanı dışında, analiz, raporlama ve entegrasyon servislerine de bağlanabilirsiniz.

• Başka bir bilgisayardaki veritabanı motoruna veya servislere bağlanmak için Server Name seçeneği kullanılır.

Page 86: VERİ TABANI YÖNETİMİ - AVESİS

• SQL Server Management Studio, Visual Studio ile benzer bir arayüz sunmaktadır. Sol taraftaki Nesne Gezgini penceresi ile veritabanı nesnelerine erişilebilir ve değişiklik yapılabilir.

• "Databases" altında "System Databases" ve onun altında ise 4 tane sistem veritabanı yer alır. Bu veritabanları üzerinde de tablo yaratılabilse de genellikle bu tercih edilmez.

• Kendi tablolarımızı saklamak üzere yeni bir veritabanı oluşturmak için "Databases" üzerine sağ tıklanıp açılan menüden "New Database" seçilir.

NOT: Bu menüdeki "Attach" daha önce yaratılmış olan bir SQL Server veritabanına bağlanmak için, "Restore Database" ise yedeği (backup) alınmış veritabanını geri getirmek için kullanılır.

Page 87: VERİ TABANI YÖNETİMİ - AVESİS

Veritabanı ismi girildikten sonra bu veritabanı için bir sahip belirlenmek istenirse "owner" kısmına yazılabilir.

• 2 tane veritabanı dosyası bu listeye varsayılan olarak eklenir: 5 MB büyüklüğünde ve "ROWS Data" türünde olan ilk dosya tabloları, 1 MB büyüklüğünde ve "LOG" türünde olan ikincisi ise günlük bilgilerini saklayacaktır.

• İstenirse aşağıdaki "Add" düğmesi ile yeni dosyalar eklenebilir. Dosyaların başlangıç boyutu ise liste üzerinden değiştirilebilir.

Veritabanının Genel Özellikleri

Page 88: VERİ TABANI YÖNETİMİ - AVESİS

Seçenekler (Options) altında veritabanının dil ayarlarını, önceki sürümler ile uyumluluğunu, otomatik olarak yapılması gereken işlemleri, vs. ayarlayabileceğiniz seçenekler yer alır.

Son kullanıcı da çıkınca otomatik kapansın mı?

Veritabanından büyük miktarda veri silindiğinde dosya boyutu küçülsün mü? (başlangıç boyutunun altına inemez)

Ayrıntılı bilgi için: http://msdn.microsoft.com/en-us/library/ms188124.aspx

Seçenekler

Page 89: VERİ TABANI YÖNETİMİ - AVESİS

Bir tablo yaratmak için seçilen veritabanı altında "Tables" üzerine sağ tıklanarak açılan menüden "New" + "Table" seçilirse tablo tasarımı (table design) görünümüne geçilir (bak. sonraki slayt)

Page 90: VERİ TABANI YÖNETİMİ - AVESİS

Tablo Tasarımı Görünümü ve Birincil Anahtar Belirleme

• Tablonun alan isimleri ve veri tiplerinin belirlendiği tasarım görünümünde birincil anahtar oluşturmak için, ilgili alan veya alanlar seçilip üzerlerine sağ tıklanarak, çıkan menüden (bu menü tasarım görünümüne geçildiğinde beliren Table Designer menüsünün aynısıdır) "Set Primary Key" seçilebilir.

• Kaydetme ikonu tıklanıp (veya Ctrl+S) açılan pencereye tablonun ismi (Öğrenciler) yazılarak kaydedilir.

Page 91: VERİ TABANI YÖNETİMİ - AVESİS

• Tabloyu kaydettikten sonra bir değişiklik yapmak istediğinizde aşağıdaki uyarı mesajı ile karşılaşabilirsiniz:

• Tools / Options menüsü, Designers altında yer alan aşağıdaki seçeneğin kaldırılması ile bu durum düzeltilebilir:

Page 92: VERİ TABANI YÖNETİMİ - AVESİS

Dış anahtar belirleme• Dış anahtar belirlemek için "Table Designer" altındaki

"Relationships" menüsü kullanılabilir.

Add tıklanarak dış anahtar ilişkisi oluşturulur ve bağlanacağı tabloyu belirlemek için" Tables And Columns Sepecification" kullanılır.

Notlar ve Dersler tabloları da oluşturulduktan sonra, Notlar tablosunun tasarım görünümünde iken "Relationships" tıklanırsa aşağıdaki pencere gelir:

Page 93: VERİ TABANI YÖNETİMİ - AVESİS

Dış anahtar belirleme (devam)• İlişkinin PK tarafı için ilgili tablo (Dersler) ve o tablodaki ilgili

sütun (DersKodu) seçimleri yapılarak, FK tarafı için de Notlar tablosundan bağlantılı olacak sütun (Ders) seçilir:

Daha önce FK_Notlar_Notlar olan ilişki ismi Dersler tablosu seçilince FK_Notlar_Dersler olarak değişir (Öğrenciler seçilirse FK_Notlar_Öğrenciler olur)

Page 94: VERİ TABANI YÖNETİMİ - AVESİS

Bilgi tutarlılığını sağlamak için:• Access'teki Bilgi Tutarlılığına Zorla altında yer alan İlişkili Alanları Art

Arda Sil/Güncelleştir seçeneklerini kullanarak yaptığımız işlemin benzeri INSERT And UPDATE Specification seçeneğinin Delete Rule ve Update Rule alanları Cascade seçilerek yapılabilir.

PK tarafında silinen bir kaydın FK tarafındaki ilişkili olduğu kayıtlar silinmeyip, "Set Null" ile ilgili alan boş bırakılabilir veya "Set Default" ile varsayılan değer ile doldurulabilir.

Page 95: VERİ TABANI YÖNETİMİ - AVESİS

Nesne Gezginini Kullanma• Nesne gezgini üzerinde her tablonun altında

Columns, Keys, Constraints, Triggers, Indexes ve Statistics adında düğümler bulunur.

• Bir tablonun üzerine sağ tıklayıp açılan menüden "Design" seçilirse (veya herhangi bir sütun isminin üzerine sağ tıklayıp "New Column" veya "Modify" seçilirse) tasarım görünümüne geçilir.

• Keys düğümüne sağ tıklayıp açılan menüden "New Foreign Key" seçilirse önce tasarım görünümü açılır, sonra önceki slaytlarda gördüğümüz "Foreign Key Realationships" penceresi gelir.

• Constraints sağ tıklanıp "New Constraint" seçilirse "Check Constraints" adında bir pencere gelir (bak sonraki slayt)

• Triggers, Indexes ve Statistics hakkında sonraki derslerde bilgi verilecektir.

Page 96: VERİ TABANI YÖNETİMİ - AVESİS

Check Constraint

• Check constraints penceresinin Expression alanına gireceğimiz koşul ile bir alana girilecek veriye sınırlama (constraint) getirebiliriz.

NOT: Aslında PK, FK ve Not Null da sınırlamadır. Haftaya değineceğiz.

Page 97: VERİ TABANI YÖNETİMİ - AVESİS

Sorgu Penceresi• Araç çubuğundaki "New Query" simgesi (veya bir

veritabanı sağ tıklanıp menüden "New Query") ile sorgu penceresi açılabilir.

Eğer DML ifadeleri yazıldı ise Execute tıklandıktan sonra her ifade için etkilenen satır sayısı "Messages" sekmesinde belirtilir.

Eğer bir sorgu yazıldı ise Execute tıklandıktan sonra "Results" sekmesinde sorgunun sonucu gösterilir.

Page 98: VERİ TABANI YÖNETİMİ - AVESİS

Select Top 1000 RowsEdit Top 200 Rows

• Bir tablonun üzerine sağ tıklayıp "Select Top 1000 Rows" seçilirse, yanda görüldüğü gibi bir sorgu otomatik olarak yazılıp çalıştırılır.

• Bir tablonun üzerine sağ tıklayıp "Edit Top 200 Rows" seçilirse, aşağıda görüldüğü gibi veri girişi için ekleme, silme ve değiştirme yapılabilen bir tablo gelir.

Page 99: VERİ TABANI YÖNETİMİ - AVESİS

Diagram• Diagram nesneleri Access'teki İlişkiler görünümü gibi

tablolar arası ilişkilerin gösterildiği bir çizelgedir.• Dış anahtar ilişkileri Access'te olduğu gibi buradaki

tablolar arasında sürükle bırak yöntemi ile yapılabilir.

Page 100: VERİ TABANI YÖNETİMİ - AVESİS

Sql Server Veri Tipleri

• Tam Sayı ve Kesirli Sayı Veri Tipleri;

• BigInt - 8 bayt yer kaplar ve en geniş aralığı olan sayısal veri tipidir.

• Int - 4 bayt yer kaplar ve en çok kullanılan sayısal veri tipidir.

• Smallint - 2 bayt yer kaplar.

• Tinyint - 0-255 arasında 1 bayt yer kaplar.

• Bit - 0 veya 1 değerini alır True yada False olarak kullanılır.

• Decimal - Ondalık veya tam sayıları tutar. Genelde ondalık sayı olduğunda kullanılır.

• Money - Bellekte 8 byte yer kaplar ve parasal değerleri tutmak için kullanılır.

• SmallMoney - 4 bayt yer kaplar ve küçük miktardaki parasal değerleri tutmak için kullanılır.

• Real - Hassas değerli ondalıklı sayıları tutar. Boyutu en büyük olan kesirli sayı tipidir.

• Float - Bu veri tipi de real gibi hassas ondalıklı veri tiplerini tutar. Ancak boyutu Real’in yarısı kadardır.

Page 101: VERİ TABANI YÖNETİMİ - AVESİS

Sql Server Veri Tipleri

• Tarih Veri Tipleri;

• DateTime - 1 Ocak 1753 ile 31 Aralık 9999 tarihleri arasında veri alır. Bellekte 8 byte yer kaplar.

• DateTime2 - 1 Ocak 0001 ile 31 Aralık 9999 tarihleri arasında veri alır. Bellekte 8 byte yer kaplar ve 100 nano saniye hassasiyetinde tarih tutabilir.

• SmallDateTime - 1 Ocak 1900 ile 6 Haziran 2079 tarihleri arasındaki verileri alır.

• Date - 1 Ocak 0001 ile 31 Aralık 9999 tarihleri arasında veri alır. Ancak sadece tarih verisini tutar.

• Time - 100 nano saniye hassasiyetinde saat verilerini tutar.

• DateTimeOffset - Normal datetime aralığında veri alır ek olarak bölgeye bağlı olan saat farkını da tutar.

Page 102: VERİ TABANI YÖNETİMİ - AVESİS

Sql Server Veri Tipleri

• Unicode Desteği Olmayan Karakter Veri Tipleri ;

• Char - En fazla 8000 karakter alabilen ve girilecek verinin uzunluğu belli olduğunda kullanılır. Unicode desteği yoktur.

• VarChar - Bu da char gibi en fazla 8000 karakter alabilen ancak girilecek verinin uzunluğu belli olmadığında kullanılır. Unicode desteği yoktur.

• VarChar(Max) - En fazla 2 GB boyutuna kadar karakter verisi alır. (Max) bölümüne sayısal değer yazarsak VarChar veri tipinin maksimum uzunluğu o sayı kadar olur. Unicode desteği yoktur.

• Text - En fazla 2,147,483,647 karakter uzunluğunda değer alabilen veri türüdür. Unicode desteği yoktur.

Page 103: VERİ TABANI YÖNETİMİ - AVESİS

Sql Server Veri Tipleri

• Unicode Desteği Olan Karakter Veri Tipleri ;Unicode nedir ? Bilgi İçin (http://www.unicode.org/standard/translations/turkish.html)

• NChar - En fazla 4000 karakter tutan ve Unicode desteği olan veri türüdür ve gireceğimiz karakter sayısı belli ise bu kullanılır.

• NVarChar - En fazla 4000 karakter alır ve Unicode desteği olan veri türüdür ayrıca gireceğimiz karakter sayısı belli olmadığında kullanılır.

• NVarChar(Max) - En fazla 2 GB boyutuna kadar karakter verisi alır. (Max) bölümüne sayısal değer yazarsak VarChar veri tipinin maksimum uzunluğu o sayı kadar olur. Unicode desteği vardır.

• NText - En fazla 2,147,483,647 karakter uzunluğunda değer alabilen veri türüdür. Unicode desteği vardır.

Page 104: VERİ TABANI YÖNETİMİ - AVESİS

Sql Server Veri Tipleri

• Binary Veri Tipleri ;Sql’de dosyaları saklamak için kullanılır.Türleri şunlardır;

• Binary - En fazla 8000 bytelık veri saklar.

• VarBinary - En fazla 8000 bytelık veri saklar ve girilecek byte miktarı değişken olduğunda kullanılır.

• VarBinary(MAX) - En fazla 2 gb boyutunda veri alabilir. (MAX) değerine 2 GB’dan az olmak şartı ile boyut belirtebiliriz.

• Image - Grafik nesneleri için kullanılmaktadır.

•• Diğer Veri Tipi Çeşitleri ;

• Sql_Variant - Girilecek olan verinin tipi belli olmadığında kullanılır. Kısacası tüm türleri kapsayan genel veri türüdür.

• XML - Xml verilerini saklamak için kullandığımız veri türüdür.

• Hierarchyid - Bir hiyerarşi içerisinde olan yapıları saklamak için kullanılılır.

• Geometry - X ve Y eksenindeki koordinat bilgilerini tutar.

• Genel hali ile kullandığımız veri tipleri bunlardır. Veri tiplerini gösterdikten sonra tablo oluştururken kullandığımız özel ifadelere değinelim.

Page 105: VERİ TABANI YÖNETİMİ - AVESİS

Sql Server Veri Tipleri

• Özel İfadeler;

• Primary key; Oluşturulacak olan sütunun içindeki verinin o sütun içerisinde benzersiz olmasını sağlar.

• Identity; Belirli bir sayıdan başlayıp, belirlediğimiz aralığa göre artan veya azalan bir şekilde sayısal değer üretir. Genellikle primary key ile birlikte kullanıp kimlik numarası (id) oluşturulur.

• Default; Kullanıcı tarafından sütunda veri belirtilmeden SQL Server tarafından otomatik olarak verilen değerlerdir. Örneğin eleman tablosunda şirket sütunu olsun ve herkes aynı şirkette olduğundan bu bilgi default ile otomatik verilebilir.

• NULL / NOT NULL ; Null kavramı boş anlamına gelmektedir. Eğer bir sütunda null olarak belirlemişsek içeriğine bir şey yazmadan dahi tablomuza kayıt ekleyebiliriz. Ancak Not Null olarak belirlersek içeriğine aldığı veri tipinden kayıt girilmesi zorunludur. Yoksa verileri kaydetmez ve hata alırız.

• Unique ; Primary key mantığındadır. Bir tablodaki sütuna sadece tekil bilgi girilmesini sağlar. Primary key ve Unique birlikte kullanılmaz.

Page 106: VERİ TABANI YÖNETİMİ - AVESİS

Sql (Structured Query Language)Hafta 5_6

Page 107: VERİ TABANI YÖNETİMİ - AVESİS

Neden SQL?

• SQL yüksek seviyeli bir dildir.

– İngilizce bilen herkes bu dili kolayca öğrenebilir. Programlama dillerine göre öğrenilmesi çok daha kolaydır. Çünkü programlama dillerindeki gibi işlemin “nasıl yapılacağı” değil, işlemde “ne yapılacağı” yazılır.

Page 108: VERİ TABANI YÖNETİMİ - AVESİS

DML, DDL ve DCL

• Sorgulama için sadece SELECT komutu kullanılsa da; SQL içinde başka komutlar da yer alır. Bu komutlar işlevlerine göre sınıflandırılmış ve başka alt-diller oluşturulmuştur:– DML (Data Manipulation Language): Tablolara veri

girme, var olan veriyi güncelleme ve veri silme işlemleri için kullanılan komutları içerir.

– DDL (Data Definition Language): Tablo, Kullanıcı gibi nesneleri yaratmak için kullanılan komutları içerir.

– DCL (Data Control Language): Kullanıcılara çeşitli yetkiler verme, yetkileri geri alma gibi işlemleri gerçekleştirmek için kullanılan komutları içerir.

Page 109: VERİ TABANI YÖNETİMİ - AVESİS

SQL Data Definition Language (DDL)

Veritabanı nesneleri yaratmak, güncellemek ve silmek için kullanılır.

En çok kullanılanlar:

•CREATE TABLE – yeni bir tablo yaratır.•ALTER TABLE – Tabloda güncelleme yapar.•DROP TABLE – Tabloyu siler.

Page 110: VERİ TABANI YÖNETİMİ - AVESİS

Create database

Page 111: VERİ TABANI YÖNETİMİ - AVESİS

Create table

Page 112: VERİ TABANI YÖNETİMİ - AVESİS

Create table

Page 113: VERİ TABANI YÖNETİMİ - AVESİS

Create Table Örnek

Page 114: VERİ TABANI YÖNETİMİ - AVESİS

Alter ve Drop

Tabloya alan ekleme, silme, değiştirme işlemleri için kullanılır.

Page 115: VERİ TABANI YÖNETİMİ - AVESİS

Kayıt ekleme

Page 116: VERİ TABANI YÖNETİMİ - AVESİS

SELECT ifadesi

SELECT sütun [yada sütunlar]FROM tablo [yada tablolar]WHERE seçim kriteri

• SELECT ifadesinden sonra * kullanılırsa tüm nitelikler (sütunlar) seçilir.

• Kriter verilmezse “WHERE” sözcüğü de yazılmaz. Bu durumda tüm kayıtlar (satırlar) seçilir.

• Personel tablosundaki tüm kayıtların tüm nitelikleri aşağıdaki SQL cümlesi ile gösterilir:SELECT * FROM PERSONEL

Page 117: VERİ TABANI YÖNETİMİ - AVESİS

WHERE ile kriter verme

• Eğer tüm kayıtların değil de sadece belirli kayıtların görüntülenmesi istenirse WHERE ile kriter verilir.

• Aşağıdaki SQL cümlesi maaşı 1800 TL’nin üzerinde olan personelin adı ve soyadını ekranda gösterir:

SELECT AD, SOYAD

FROM PERSONEL

WHERE MAAS > 1800

Page 118: VERİ TABANI YÖNETİMİ - AVESİS

Kriterlerde kullanılan işleçler

• Programlama dillerinde kullanılan aritmetiksel karşılaştırma işleçleri (<, <=, >, >=, =, <>) ve mantıksal işleçler (AND, OR, NOT) SQL dilinde de kriter verirken kullanılır.

• Aşağıdaki SQL cümlesi görevi müdür olan ve maaşı 5000 TL’den fazla olan personeli gösterir:

SELECT * FROM PERSONEL

WHERE GOREV = ‘Müdür’ AND MAAS > 5000Programlama dillerinde olduğu gibi SQL’de de karakter türü veriler ile işlem yapılacaksa

tek tırnak yada çift tırnak kullanılır.

Page 119: VERİ TABANI YÖNETİMİ - AVESİS

Karakter türü verilerin karşılaştırılması

• Karakter türü veriler ile de büyüklük-küçüklük kıyaslamaları yapılabilir.

• Aşağıdaki SQL cümlesi adı N-Z arasında bir harf ile başlayan personeli gösterir:

SELECT * FROM PERSONEL WHERE AD > ‘N’

• Aşağıdaki SQL cümlesi adı E harfi ile başlayan personeli gösterir:

SELECT * FROM PERSONEL

WHERE AD > ‘E’ AND AD < ‘F’

Page 120: VERİ TABANI YÖNETİMİ - AVESİS

LIKE işleci

• Belirli bir karakter katarını barındıran verileri aramak için LIKE kullanılır.

• Önceki slaytta yer alan, adı E harfi ile başlayan personeli gösteren sorgu LIKE ile de yazılabilir:SELECT * FROM PERSONEL WHERE AD LIKE ‘E%’

• Adresler şehir adı ile bitiyorsa, Edirne ilinde ikamet eden öğrencileri görmek için aşağıdaki sorgu kullanılabilir:SELECT * FROM ÖĞRENCİLERWHERE ADRES LIKE ‘%Edirne’

Page 121: VERİ TABANI YÖNETİMİ - AVESİS

BETWEEN … AND … işleci

• İki değer arasında karşılaştırma yapmak için Between … And … işleci (… ile … arasında) kullanılabilir.

• Aşağıdaki SQL cümlesi maaşı 1000 ile 2000 TL arasında olan işçileri görüntüler:SELECT * FROM PERSONELWHERE MAAS BETWEEN 1000 AND 2000 AND GOREVI = ‘İşçi’

• Bu sorgu Between işleci kullanılmadan da yazılabilirdi:SELECT * FROM PERSONELWHERE MAAS >= 1000 AND MAAS <= 2000 AND GOREVI = ‘İşçi’

Page 122: VERİ TABANI YÖNETİMİ - AVESİS

IN işleci

• Bir listedeki değerler ile karşılaştırma yapmak için IN işleci kullanılır.

• 1000 ile 2000 TL arasında değil de sadece 1000, 1500 ve 2000 TL maaş alanları listelemek için aşağıdaki SQL cümlesi kullanılabilir:

SELECT * FROM PERSONEL WHERE MAAS IN (1000, 1500, 2000)

Page 123: VERİ TABANI YÖNETİMİ - AVESİS

Tarihsel türü verilerin karşılaştırılması

• Belirli bir tarihe eşit olan veya o tarihten büyük yada küçük olan verilerin aranması istenirse, tarih ay/gün/yıl biçiminde ve ‘ ’ karakterleri arasında yazılmalıdır:

SELECT * FROM OGRENCILER

WHERE DOGUM_TARIHI BETWEEN

‘1/1/1989’ AND ‘12/31/1989’

Page 124: VERİ TABANI YÖNETİMİ - AVESİS

DISTINCT ifadesi

• Eğer tablonun bir alanında yer alan veriler içinde aynı olan veriler varsa SELECT ifadesinden sonra kullanılan DISTINCT ile bu tekrar eden verilerin sadece 1 defa görüntülenmesi sağlanabilir.

• Aşağıdaki SQL cümlesi farklı kayıtlardaki aynı adları her kayıt için tekrar göstermek yerine 1 defa gösterilmesini sağlar:

SELECT DISTINCT AD FROM PERSONEL

Page 125: VERİ TABANI YÖNETİMİ - AVESİS

AS ifadesi ve sütun içeriklerini birleştirme

• Sütunların kendi ismi yerine AS ifadesi ile takma isim almaları sağlanabilir.

• İki yada daha fazla sayıda sütunun içeriğini birleştirmek için sütun isimleri arasında Sql Server ve Access’te &, Oracle’da ise || işleçleri kullanılır.

• Aşağıdaki SQL cümlesi AD ve SOYAD sütunlarının içeriklerini araya bir boşluk karakteri ekleyerek birleştirir ve ISIM adlı bir sütun şeklinde gösterir.

SELECT AD & ' ' & SOYAD AS ISIM FROM OGRENCILER

Page 126: VERİ TABANI YÖNETİMİ - AVESİS

Matematiksel İşlemler

• SELECT ifadesinden sonra bir sütunun bir matematiksel işleme tabi tutulması ve bu işlemin sonucunun gösterilmesi sağlanabilir.

• Tabloda aylık maaşları saklanan personelin yıllık maaşlarının görüntülenmesi istenirse, aşağıdaki SQL cümlesi kullanılabilir:

SELECT AD, SOYAD, MAAS * 12 AS YıllıkÜcret

FROM PERSONEL

Page 127: VERİ TABANI YÖNETİMİ - AVESİS

NULL (boş) değerler ile ilgili işlemler

• Eğer bir kayıt, bazı alanları boş bırakılarak eklendiyse, matematiksel işlemlerde sorun çıkabilir (NULL, sıfır değeri ile aynı değildir).

1500 * 12 + 0 işleminin sonucu 1800 iken,

1500 * 12 + NULL işleminin sonucu NULL olacaktır.

• Karşılaştırma işlemlerinde de NULL ile = işleci kullanılmaz, IS kullanılır.

SELECT * FROM PERSONEL WHERE TC_NO IS NULL

Page 128: VERİ TABANI YÖNETİMİ - AVESİS

Büyük/Küçük Harf Duyarlılığı

• SQL dili büyük/küçük harf ayrımı yapmaz (case-sensitive değildir).

• Aşağıdaki yazımların hepsi aynı işi yapar (Personel tablosundaki tüm personelin sadece adı ve soyadı görüntülenir):– SELECT AD, SOYAD FROM PERSONEL

– SELECT Ad, Soyad FROM Personel

– Select Ad, Soyad From Personel

– select ad, soyad from personel

Page 129: VERİ TABANI YÖNETİMİ - AVESİS

Türkçe karakter kullanma

• Birçok VTYS, tablo ve nitelik isimlerinde Türkçe karakter kullanımına izin verir. Fakat sorgularda bazı sıkıntılara neden olabileceği için kullanılması tavsiye edilmez.

• Örneğin PERSONEL tablosundaki nitelik isimleri ADI ve SOYADI şeklinde büyük harfler ile verildiyse, bazı VTYS’ler “SELECT Adi, SoyadiFROM Personel” ifadesini, bazıları ise “SELECT Adı, Soyadı FROM Personel” ifadesini doğru kabul eder.

Page 130: VERİ TABANI YÖNETİMİ - AVESİS

Alan ismi olarak kullanılmaması gereken kelimeler

• Bir öğrencinin not bilgilerini saklamak için “NOT” isminde bir alan yaratılırsa sorgularda bu alana göre kriter verilmek istendiğinde, İngilizcede “değil” anlamına geldiği için hata verecektir. “NOT” yerine “NOTU”, “VIZE”, “FINAL” gibi ifadeler tercih edilmelidir:– SELECT * FROM NOTLAR WHERE NOT >= 60– SELECT * FROM NOTLAR WHERE NOTU >= 60

• Benzer şekilde SQL’e ait olan “SELECT”, “FROM”, “WHERE”, “ORDER”, … gibi ifadeler de alan ismi olarak kullanılmamalıdır.

Hatalı

Doğru

Page 131: VERİ TABANI YÖNETİMİ - AVESİS

ORDER BY ile sıralama

• Eğer görüntülenecek olan kayıtların belirli bir sütuna göre sıralı olarak görüntülenmesi isteniyorsa ORDER BY kullanılır.

• Sıralama yukarıdan aşağıya doğru artan sırada olacaksa ASC, azalan sırada olacaksa DESC kullanılır. Varsayılan sıralama şekli artan olduğu için ASC yazılmasa bile artan sıralama kullanılmış olur.

• Aşağıdaki SQL cümlesi PERSONEL tablosundaki kayıtları maaşa göre azalan sırada gösterir:SELECT * FROM PERSONEL ORDER BY MAAS DESC

Page 132: VERİ TABANI YÖNETİMİ - AVESİS

SQL Fonksiyonları

• Programlama dillerinde olduğu gibi, SQL’de de bazı aritmetik işlemler için yada tip dönüşümü yapmak için hazır olarak sunulan fonksiyonlar mevcuttur.

• Bu fonksiyonların bazıları (SUM, AVG, MIN, MAX, …) birçok kayıt üzerinde işlem yapıp tek bir sonuç üretirken, bazıları ise (Örneğin; tip dönüşümü ile ilgili olanlar) üzerinde işlem yaptığı her kayıt için ayrı sonuç üretir.

Page 133: VERİ TABANI YÖNETİMİ - AVESİS

SUM ve AVG

• Belirli bir sütundaki sayısal verilerin toplanarak sonucun gösterilmesi istenirse SUM, aritmetik ortalamasının gösterilmesi istenirse AVG kullanılır.

• Aşağıdaki SQL cümlelerinden ilki tüm personelin maaşlarının toplamını, ikincisi ise maaşların aritmetik ortalamasını gösterir:1. SELECT SUM(MAAS) AS TOPLAM_MAAS FROM

PERSONEL

2. SELECT AVG(MAAS) AS [MAASLARIN ORTALAMASI] FROM PERSONEL

NOT: _ karakteri yerine boşluk karakteri kullanılması istenirse [] içinde yazılmalıdır.

Page 134: VERİ TABANI YÖNETİMİ - AVESİS

MIN ve MAX

• Belirli bir sütundaki en büyük veriyi görüntülemek için MAX, en küçük veriyi görüntülemek için ise MIN fonksiyonları kullanılır.

• Aşağıdaki SQL cümlesi, “2009-2010” öğretim yılında “BM 316” dersinden en yüksek başarı notunu gösterir:

SELECT MAX(VIZE*0.3 + FINAL*0.7)

FROM NOTLAR

WHERE DERS = “BM 316” AND DERS_YILI = “2009-2010”

Page 135: VERİ TABANI YÖNETİMİ - AVESİS

COUNT

• Sorgunun ürettiği satır sayısını döndürür.

• Aşağıdaki SQL cümlesi PERSONEL tablosundaki toplam kayıt sayısını döndürür:

SELECT COUNT(*) FROM PERSONEL

• Eğer COUNT içinde * yerine belirli bir sütun ismi verilirse o sütundaki NULL olmayan değer sayısını döndürür:

SELECT COUNT(ADRES) FROM OGRENCILER

Page 136: VERİ TABANI YÖNETİMİ - AVESİS

TOP

• Önceki örnekte en yüksek başarı notunu alan öğrencininnumarasını da göstermek istersek aşağıdaki kullanım hata verecektir:SELECT OGRENCI, MAX(VIZE*0.3 + FINAL*0.7) FROM NOTLAR WHERE DERS = “BM 316” AND DERS_YILI = “2009-2010”

• SELECT sonrasında “TOP n” kullanımı en üstteki n kaydı gösterir. Örneğimizde başarı notuna göre azalan sıralama yapıp en üstteki kaydı almak için “TOP 1” deyimini kullanmak en uygun çözümdür:SELECT TOP 1 OGRENCI, VIZE*0.3 + FINAL*0.7 AS Başarı_NotuFROM NOTLAR WHERE DERS = “BM 316” AND DERS_YILI = “2009-2010” ORDER BY VIZE*0.3 + FINAL*0.7

NOT: Bu ifade yerine takma ismi olan Başarı_Notu kullanılması hata verir

Page 137: VERİ TABANI YÖNETİMİ - AVESİS

LCASE, UCASE ve LEN

• LCASE: Tüm karakterleri küçük harfe dönüştürür. (Oracle’da LOWER)

• UCASE: Tüm karakterleri büyük harfe dönüştürür. (Oracle’da UPPER)

• LEN: Sütun yada ifade içindeki karakter sayısını döndürür (Oracle’da LENGTH)

• Aşağıdaki SQL cümlesi SOYAD bilgileri küçük harfli bile girilmiş olsa tüm karakterleri büyük harf olarak görüntüler:SELECT AD, LCASE(SOYAD) FROM PERSONEL

Page 138: VERİ TABANI YÖNETİMİ - AVESİS

Tarihsel Fonksiyonlar (Access)

• NOW: Sistem tarihini ve saatini döndürür.

• DATEDIFF: İki tarih arasındaki farkı verir.

• DATEADD: Aldığı tarihin üzerine aldığı değeri (gün, ay, yıl) ekleyerek yeni bir tarih değeri üretir.

• DAY: Aldığı tarihin gün kısmını döndürür.

• MONTH: Aldığı tarihin gün kısmını döndürür.

• YEAR: Aldığı tarihin gün kısmını döndürür.

• Oracle’daki tarihsel fonksiyonlar için: http://psoug.org/reference/date_func.html

Page 139: VERİ TABANI YÖNETİMİ - AVESİS

GROUP BY

• SUM, AVG gibi bazı fonksiyonların tablonun tamamı için değil de, belirli bir alana (yada alanlara) göre gruplandırılarak çalıştırılması GROUP BY deyimi ile sağlanabilir.

• Aşağıdaki SQL cümlesi personelin ortalama maaşlarını her bölüm için ayrı ayrı listeler:

SELECT AVG(MAAS) FROM PERSONEL

GROUP BY BOLUM

Page 140: VERİ TABANI YÖNETİMİ - AVESİS

Çok tablolu sorgulamalar

• Eğer birden fazla tabloda yer alan verilerin tek bir sorgu ile görüntülenmesi istenirse FROM kısmında ilgili tablolar araya virgül konularak yazılmalı, WHERE kısmında ise o tabloları birbirine bağlayan alanların birbirine eşit olması kriteri verilmelidir. WHERE kısmında böyle bir kriter verilmezse, iki tablonun tüm kayıtları birbiri ile eşleştirilecek (kartezyençarpım) ve ortaya istenilenden daha çok sayıda kayıt çıkacaktır.

Page 141: VERİ TABANI YÖNETİMİ - AVESİS

2 tablolu sorgulama örneği

• PERSONEL tablosundaki BOLUM (FK) alanı ile BOLUMLER tablosundaki BOLUM_NO (PK) alanı birbirine bağlıdır. Eğer personel bilgileri görüntülenirken personelin çalıştığı bölümün numarasını değil de adını göstermek istersek bu adı BOLUMLER tablosundan elde etmeliyiz. Bu nedenle iki tablonun ismini de FROM kısmında kullanmalıyız:SELECT AD, SOYAD, GOREV, BOLUM_ADIFROM PERSONEL, BOLUMLERWHERE BOLUM = BOLUM_NO

Page 142: VERİ TABANI YÖNETİMİ - AVESİS

Alan isimlerinin aynı olması durumu

• Eğer bir çok tablolu sorgulamada ilişkinin her iki tarafındaki alanlar aynı isimde ise; alan isimlerinden önce, o alanın ait olduğu tablo ismi de yer almalıdır.

• Örneğin PERSONEL tablosundaki alan ismi de BOLUM_NO olsaydı sorgu şu şekilde yazılmalıydı:SELECT AD, SOYAD, GOREV, BOLUM_ADIFROM PERSONEL, BOLUMLERWHERE PERSONEL.BOLUM_NO = BOLUMLER.BOLUM_NO SELECT AD, SOYAD, GOREV, BOLUM_ADI

FROM PERSONEL P, BOLUMLER BWHERE P.BOLUM_NO = B.BOLUM_NO

Aynı sorgu şu şekilde de yazılabilirdi:

Page 143: VERİ TABANI YÖNETİMİ - AVESİS

3 tablolu sorgulama örneği

• Öğrencilerin adı, soyadı, aldıkları derslerin adı ve bu derslerden başarı notları görüntülenmek istenirse:

SELECT AD, SOYAD, DERS_ADI, VIZE*0.3 + FINAL*0.7 AS BN

FROM OGRENCILER, NOTLAR, DERSLER

WHERE OGR_NO = OGRENCI AND DERS = DERS_KODU

Page 144: VERİ TABANI YÖNETİMİ - AVESİS

İç içe SELECT ifadeleri

• Eğer SELECT sonrasında yazılan alanların hepsi aynı tabloda, fakat kriter olarak kullanılan alanlar onlardan farklı bir tabloda ise iç içe SELECT ifadeleri kullanılabilir.

• Aşağıdaki SQL cümlesi ‘Fizik’ dersini alan öğrencilerin bilgilerini gösterir:SELECT OGR_NO, AD, SOYAD FROM OGRENCILERWHERE OGR_NO IN (

SELECT OGRENCI FROM NOTLARWHERE DERS IN (

SELECT DERS_KODU FROM DERSLERWHERE DERS_ADI = ‘Fizik’))

Fizik dersinin bir ders kodu olacağı için bu satırdaki IN yerine = kullanılabilirdi.

Page 145: VERİ TABANI YÖNETİMİ - AVESİS

İç içe SELECT ifadeleri

• Önceki örneği çok tablolu sorgulama türünde de yapabilirdik:

SELECT OGR_NO, AD, SOYAD

FROM OGRENCILER, NOTLAR, DERSLER

WHERE OGR_NO = OGRENCI AND

DERS_NO = DERS AND DERS_ADI = ‘Fizik’

• Fakat bu sorgu tabloların kartezyen çarpımına neden olacağı için muhtemelen daha yavaş çalışacaktır.

Page 146: VERİ TABANI YÖNETİMİ - AVESİS

INSERT

• Bir tabloya kayıt eklerken kullanılan komut.

• Aşağıdaki ifade HOCALAR tablosuna kayıt ekler:

INSERT INTO HOCALAR VALUES (15, ‘Ahmet’, ‘Çalışkan’, ‘Prof. Dr.’)

• Eğer eklenecek kaydın sadece belirli alanlarına veri girilecekse (Ör. HOCA_NO alanı ‘otomatik sayı’ veri türünde ise o alana veri giremeyiz), tablo adından sonra bu alanlar belirtilmelidir:

INSERT INTO HOCALAR (AD, SOYAD, UNVAN) VALUES (‘Ahmet’, ‘Çalışkan’, ‘Prof. Dr.’)

Veri türü karakter değilse tırnak kullanılmaz

Page 147: VERİ TABANI YÖNETİMİ - AVESİS

DELETE

• Bir tablodaki bir yada daha çok kaydı silmek amacıyla kullanılan DML komutudur. Hangi kayıt yada kayıtların silineceği WHERE sözcüğünden sonra verilen kriter ile belirlenir.

• Aşağıdaki DML ifadesi NOTLAR tablosundan ‘2007-2008’ öğretim yılına ait tüm kayıtları siler:DELETE FROM NOTLAR WHERE DERS_YILI = ‘2007-2008’

• Eğer WHERE sözcüğü hiç kullanılmaz ise tablodaki tüm kayıtlar silinir:DELETE FROM NOTLAR

Page 148: VERİ TABANI YÖNETİMİ - AVESİS

UPDATE

• Bir tablodaki kayıtların güncellenmesi amacıyla kullanılan DML komutudur. Hangi kayıt yada kayıtların güncelleneceği WHERE sözcüğü ile verilen kriter ile, kayıtlardaki güncellenecek alanlar ise SET sözcüğü sonrasında yeni değerlerinin atanması ile belirtilir.

• Aşağıdaki DML ifadesi PERSONEL tablosundaki Pazarlama bölümünde çalışanların maaşlarını %10 oranında arttırır.

UPDATE PERSONEL SET MAAS = MAAS * 1.1 WHERE BOLUM = (SELECT BOLUM_NO FROM BOLUMLER WHERE BOLUM_ADI = ‘Pazarlama’)

Page 149: VERİ TABANI YÖNETİMİ - AVESİS

Sorgu sonucunu tablo yapma

• Bir sorgu sonucunun yeni bir tablo olarak saklanması isteniyorsa FROM öncesinde INTO TABLO_ADI kullanılır.

• Aşağıdaki SQL cümlesi PERSONEL tablosundaki tüm verileri yeni yaratacağı PERS_YEDEK tablosuna kopyalar:

SELECT * INTO PERS_YEDEK FROM PERSONEL

• Eğer PERS_YEDEK tablosu önceden varsa, yukarıdaki komut önce tabloyu siler, sonra tekrar yaratarak verileri kopyalar.

Page 150: VERİ TABANI YÖNETİMİ - AVESİS

Sorgu sonucunu INSERT ile kullanma

• Bir tabloya veri eklerken INSERT ifadesinde VALUES yazılmayıp bir sorgu da yazılabilir.

• Aşağıdaki ifade PERSONEL tablosundaki tüm verileri önceden yaratılmış olan PERS_YEDEK tablosuna ekler:INSERT INTO PERS_YEDEK SELECT * FROM PERSONEL

• Bu komut çalıştırılmadan önce PERS_YEDEK tablosu boş değilse anahtar alan olan PERSONEL_NO alanında veri tekrarına neden olabilir (dolayısı ile hata verebilir).

• Aşağıdaki ifade sadece 2010 yılından sonra işe başlayanları ekler:INSERT INTO PERS_YEDEK SELECT * FROM PERSONEL WHERE GIRIS_TARIHI > #1/1/2010#

Page 151: VERİ TABANI YÖNETİMİ - AVESİS

Sorular Northwind veri tabanına göre hazırlanmıştır.Soruları önce kendiniz

cevaplayınız.

1. Çalışanların adını ve soyadını görüntüleyebilecek sorgu yazınız. Raporda istenen bilgiler; Employees = Çalışanlar

2. Çalışanın adını ve soyadını bir kolonda yaşını ise diğer kolonda gösteriniz. 3. Ürün Adı, Depodaki stok maliyeti, stoktaki ürünlerin toplam % 10 KDV’si

Raporda istenen bilgiler; Domates 200 20 4. Satılan ürünlerde istenilen bilgiler aşağıdaki gibidir

Raporda istenen bilgiler; ürün ID, satılan miktar, toplam fiyat – WHERE etiketi sorgumuza kriter koymamızı sağlar. –Kullanımı; select Sütün İsmi,… from tabloAdi where Kriter — Kriterleri belirtirken a şağıdaki işaretleri kullanabiliriz. — < > <= >= != <> =

5. Fiyatı 10 doların üzerinde olan ürünleri gösteriniz. 6. Memleketi Londra olan çalışanları gösteriniz. 7. ALFKI müşterisine ait siparişleri görüntüleyiniz. 8. Kategori Id’si 5 olan ürünleri görüntüleyiniz. 9. Kadın olan çalışanlarımı görüntüleyiniz. 10. 1997 yılına ait satışlarımı gösteriniz.

–Where etiketi ile yazdığımız sorgulara farklı kriterler ekleyebilmek için m antıksal ifadeleri de kullanabiliriz. – And ifadesi için kriterlerden ikisininde doğru olması gerekir – Or ifadesi için kriterlerden sadece bir tanesinin doğru olması yeterlidir.

11. Birim fiyatı 30 ile 90 dolar arasında olan ürünlerimi gösteriniz. 12. 1997 yılının 6 ayında londra ya yaptığım satıları listeleyiniz. 13. 10578 numaralı siparişte satılan ürünlerin toplam fiyatlarını ve ürün id lerini ekranda

yazdırınız. 14. 1997 ocak ayına ait londraya ve fransaya yaptığımız satışları görüntüleyiniz. 15. 1998 yılında gönderilmeyen siparişlerimi görüntüleyiniz. 16. Kategori id=2 olan ve stoklarda 15 ten çok olan ürünleri gösteriniz. 17. Amerika’da yaşamayan ve resmi olan çalışanları gösteriniz. 18. 2 numaralı nakliyecinin taşıdığı nakliye fiyatı aralığı 10 ile 100 dolar arasında olan satışları

görüntüleyiniz. –Sıralama(Order by) – Hem harf hemde sayısal sıralamaları order by ile yapmaktayız. Select sorgularında eğer varsa where ifadesinden sonra yazılır. –Genelde en sona yazılarak kullanılır. – select xxxx…. from tabloAdı where koşul order by kolonAdı

19. Siparişleri müşteri id’lerine göre sıralayınız. – Order by iki şekilde kullanılır. — Küçükten büyüğe(1–100)–>asc ve Büyükten küçüge(100–1) –>desc — Order by kolon adı asc / desc — Eğer bir şey yazılmazsa varsayılan asc’dir

20. Tedarikçilerimizi şirket ismi sırasına göre sıralayınız.

Page 152: VERİ TABANI YÖNETİMİ - AVESİS

21. 1 numaralı kategorideki ürünlerin fiyatlarını büyükten küçüğe göre sıralayınız. – Top : belirlenen sayıda kayıt almak için kullanılır. — Select ifadesinden hemen sonra gelir. select top 2 * from Employees

22. 1996 yılının 12 ayında yapılan siparişlerin nakliye ücretlerinden en pahalı 3 tanesini gösteriniz.

23. Stoğumdaki en pahalı 5 ürünü ekranda yazdırınız. 24. 2 numaralı çalışanın yaptığı satışlardan 1998 yılında gönderilen siparişlerin en ucuz 3 nakliye

ücretini görüntüleyiniz. 25. 1973’ten önce doğmuş olan 3 Amerikalı olmayan çalışanı görüntüleyiniz. 26. Nancy Davalio — [email protected]

— ekrana nancy için bu mail adresini yazan sorguyu yazınız.– BETWEEN … AND kalıbı — Tablolarda bulunan iki veri arasındaki değerleri sorgulamak için kullanılır — Örnek: — 10 ile 20 dolara arasındaki ürünleri listeleyiniz. select * from Products where UnitPrice >= 10 and UnitPrice <= 20 select * from Products where UnitPrice between 10 and 20

27. Nakliye ücreti 30 ile 60 arasında olan siparişleri gösteriniz. 28. Müşteri id si CACTU ile DUMON harfleri arasında olan müşterilerin bilgilerini

görüntüleyiniz. 29. 01.01.1997 tarihi ile 30.07.1997 tarihleri arasındaki siparişleri görüntüleyiniz. 30. Fotoğrafı NULL olmayan ve IDsi 3 ile 8 arasında olan çalışanları görüntüleyiniz.

—— LIKE BENZERL İK SORGULARI – bir metnin içerisinde veri araması yapabilmek için kullanılır. select * from Employees where FirstName like ‘%e%’

31. Tost yemekten hoşlanan çalışanımızı çıkarınız. — İpucu: Tost = toast – Tek bir karakteri bilmedi ğimiz durumlarda ‘ _’ karakteri kullanılır.

32. Müşterilerimizden ilk üç karakterini bilmediğimiz ama 4. ve 5. karakterleri ON olan müşterileri görüntüleyiniz. –Eşitlik aratmak için [ak] select * from Customers where CompanyName like ‘[AK]%’ — Mesafe aratmak için araya – işareti konur [A-K] select * from Customers where CompanyName like ‘[A-K]%’

33. Kategori açıklamalarından baş harfini bilmiyoruz ikinci harfi p ile t harfleri arasında olan kategorileri görüntüleyiniz. – [^n] n harfi olmayan

34. Müşteri IDsinde ilk harfi A olan ve ikinci harfi N olmayan müşterileri görüntüleyiniz.

Page 153: VERİ TABANI YÖNETİMİ - AVESİS

—————————————————CEVAPLARI———————————————————

1. select FirstName + ‘ ‘ + LastName as IsimSoyIsim from Employees Açıklama: ‘ ‘ i şaretleri boşluk bırakmak için kullanılır.

2. select FirstName+ ‘ ‘ + LastName as AdSoyad, DATEDIFF(year,BirthDate,GetDate()) Yas from Employees Açıklama: DateDiff parametresi tarihler arası farkı bulmak için kullanılır. GetDate= sistemin şuan ki tarihini tutar. Birthdate ise çalı şanın doğum günü tarihini tutar. Year ise yıl bazında farkını bulur.

3. select ProductName, Unitprice * UnitsInStock as Maaliyet, (Unitprice * UnitsInStock) / 10 ‘%10 KDV’ from Products Açıklama Select satırında matematiksel işlemler yapabiliriz. Ancak bizim oluşturdu ğumuz yeni sütunların başlıkları yoktur. Ba şlıklara isim vermek için as komutu kullanılır yada 2 örnekteki gibi yanına tek bir kelime olarak yazılır. Eğer sütun ismine 2 kelime vermek istiyorsanız tırnak işaretleri arasına almanız gerekmektedir.

4. select ProductId, Quantity, UnitPrice * Quantity ToplamSatis from [Order Details] 5. select * from Products where UnitPrice > 10 6. select * from Employees where City = ‘London’ 7. select * from Orders where CustomerID = ‘ALFKI’ 8. select * from Products where CategoryID = 5 9. select * from Employees where TitleOfCourtesy = ‘Mrs.’ and TitleOfCourtesy = ‘Ms.’

Açıklama: Where ifadesinde and ve or gibi mantıksal ifadelerde kullanabilirsiniz. 10. select * from Orders where YEAR(OrderDate) = ‘1997’ 11. select * from Products where UnitPrice > 30 and UnitPrice < 90 12. select * from Orders where MONTH(OrderDate) = 6 and YEAR(OrderDate) = 1997 and

ShipCity = ‘london’ Açıklama: Sipariş tarihinden sadece ayı çekmek istediğimizde month ifadesini sadece yılı çekmek istediğimizde Year ifadesini kullanırı.

13. select ProductID,UnitPrice * Quantity from [Order Details] where OrderID = 10578 14. select * from Orders where year(OrderDate) = 1997 and MONTH(OrderDate) = 1 and

(ShipCity = ‘london’ or ShipCountry = ‘France’) 15. select * from Orders where ShippedDate is null and YEAR(OrderDate) = 1998 16. select * from Products where CategoryID = 2 and UnitsInStock >15 17. select * from Employees where Country <> ‘USA’ and Photo is not null 18. select * from Orders where ShipVia = 2 and (Freight > 10 and Freight < 100)

Açıklama: Freight = Türkçede navlun bedeli anlamına gelir. ShipVia ise taşımacılığı yapan şirketin kodlarını tutar

19. select * from Orders order by CustomerID 20. select * from Suppliers order by CompanyName 21. select * from Products where CategoryID = 1 order by UnitPrice desc 22. select top 3 * from Orders where YEAR(OrderDate) = 1996 and MONTH(OrderDate) = 12

order by Freight desc 23. select top 5 ProductId, ProductName, UnitPrice * UnitsInStock ToplamMaliyet from

Products order by ToplamMaliyet desc

Page 154: VERİ TABANI YÖNETİMİ - AVESİS

24. select top 3 * from Orders where EmployeeID = 2 and YEAR(ShippedDate) = 1998 order by Freight asc

25. select top 3 * from Employees where YEAR(BirthDate) < 1973 and Country <> ‘USA’ 26. select FirstName + ‘ ‘ + LastName İsim,lower(LEFT(FirstName,1) + ‘.’ + LastName) +

‘@northwind.com’ MailAdresi from Employees Açıklama: Mail adresini otomatik oluşturmak için adım adım önce ismin ilk karakterini alıp küçük harfe çevirmemiz gerek. Sonrasında nokta koyup soyadını yazıyoruz. En sonuna ise şirkete ait site bilgisini ekliyoruz.

27. select * from Orders where Freight between 30 and 60 28. select * from Customers where CustomerID between ‘CACTU’ AND ‘DUMON’ 29. select * from Orders where OrderDate between ‘01.01.1997’ and ‘07.30.1997’ 30. select * from Employees where EmployeeID between 3 and 8 and Photo is not null 31. select * from Employees where Notes like ‘%toast%’ 32. select * from Customers where CompanyName like ‘___ON%’ 33. select * from Categories where Description like ‘_[p-t]%’ 34. select * from Customers where CustomerID like ‘A[^N]%’

Page 155: VERİ TABANI YÖNETİMİ - AVESİS

GRUP FONKSIYONLARI

� Tek satır fonksiyonları, tablonun bir satırınauygulanabiliyordu. Bir grup satıra bir fonksiyonunuygulanması söz konusu ise çoklu satırfonksiyonları ya da diğer bir deyişle grupfonksiyonlarından söz edilir.

Fonksiyonlar

Tek satır fonksiyonları

Çoklu satır fonksiyonları

Page 156: VERİ TABANI YÖNETİMİ - AVESİS

AVG() VE SUM() FONKSIYONLARI

� AVG() fonksiyonu herhangi bir sütunun içerdiğisayısal değerlerin aritmetik ortalamasınıhesaplamak amacıyla kullanılır.

SELECT AVG(ÜCRET) AS ORTALAMA FROM PERSONEL;

� SUM() fonksiyonu sütunların içerdiği sayısaldeğerleri toplamak amacıyla kullanılır.

SELECT SUM(ÜCRET) AS TOPLAM FROM PERSONEL;

Page 157: VERİ TABANI YÖNETİMİ - AVESİS

MAX() VE MIN() FONKSIYONLARI

� Tablonun içerdiği değerlerin içerdiği en büyük ve enküçük olanlarını bulmak için MAX() ve MIN()fonksiyonları kullanılır. Bu fonksiyonlar herhangi birveri türüne uygulanabilir.

SELECT MIN(ÜCRET) AS “EN AZ”, MAX(ÜCRET) AS “EN FAZLA” FROM PERSONEL;

SELECT MAX(GİRİŞ_TAR) AS “EN SON” FROM PERSONEL;

SELECT MIN(ADI) AS “İLK İSİM” FROM PERSONEL;

Page 158: VERİ TABANI YÖNETİMİ - AVESİS

COUNT() FONKSIYONU

� Bir tablodaki kayıtların tutulması amacıylakullanılır. İki farklı biçimde kullanılabilir:

� COUNT(*) fonksiyonu, NULL değerleri de içerentüm kayıtların sayılmasına neden olur.

SELECT COUNT(*) AS “KAYIT SAYISI” FROM PERSONELWHERE BÖLÜM_NO=‘30’;

� COUNT(sütun) biçiminde kullanılırsa NULL değerleriçermeyen tüm kayıtların sayılmasına neden olur.

SELECT COUNT(KOMİSYON) AS “KOMİSYON ALAN”FROM PERSONEL;

Page 159: VERİ TABANI YÖNETİMİ - AVESİS

GRUPLAMA İŞLEMLERİ

� Bir tablonun satırları gruplara ayrılarak, grupfonksiyonlarının bunlara uygulanmasısağlanabilir. GROUP BY sözcüğünden faydalanılır.

Örnek: Personel tablosuna göre, her bölüm içinpersonel sayısını, ücret toplamını ve ortalamaücretleri hesaplamak için:

SELECT BÖLÜM_NO, COUNT(ADI) AS SAYI,SUM(ÜCRET) AS TOPLAM, AVG(ÜCRET) AS ORTALAMAFROM PERSONEL GROUP BY BÖLÜM_NO;

Page 160: VERİ TABANI YÖNETİMİ - AVESİS

BIRDEN FAZLA SÜTUNA GÖRE GRUPLAMA

� GROUP BY ile bir sütuna göre gruplamayapılabildiği gibi, birden fazla sütun için degruplama yapılabilir.

Örnek: Her bölümü ve bölüm içindeki görevleregöre personeli gruplayarak bu bazda ücrettoplamları elde etmek için:

SELECT BÖLÜM_NO, GÖREVİ, SUM(ÜCRET) FROMPERSONEL GROUP BY BÖLÜM_NO, GÖREVİ;

Page 161: VERİ TABANI YÖNETİMİ - AVESİS

GRUP KOŞULLARININ KULLANIMI

� Grup işlemleri yerine getirilirken, grup bazındasınırlamalar söz konusu olabilir. Örneğin, bölümbazında bir işlemin, bölüm ücret ortalamasının2000’den büyük ise gerçekleşmesi istenebilir.

HatalıSELECT BÖLÜM_NO, AVG(ÜCRET) FROM PERSONEL WHERE AVG(ÜCRET)>2000 GROUP BY BÖLÜM_NO;DoğruSELECT BÖLÜM_NO, AVG(ÜCRET) FROM PERSONEL GROUP BY BÖLÜM_NO HAVING AVG(ÜCRET)>2000;

Grup koşulları WHERE içinde tanımlanamaz.Onun yerine HAVING sözcüğü kullanılır.

Page 162: VERİ TABANI YÖNETİMİ - AVESİS

GRUP KOŞULLARININ KULLANIMI

Örnek: Ortalama ücreti 3500’den fazla olanbölümlerin bölüm numarası ve o bölümdeki enyüksek ücret miktarını görüntülemek için:

SELECT BÖLÜM_NO AS “BÖLÜM NO”, MAX(ÜCRET) AS“EN ÇOK” FROM PERSONEL GROUP BY BÖLÜM_NOHAVING AVG(ÜCRET)>3500;

Page 163: VERİ TABANI YÖNETİMİ - AVESİS

GRUP KOŞULLARININ KULLANIMI

Örnek: Pazarlama bölümü dışında çalışan personeligörevlerine göre gruplandırıp ücretleri toplayan;bölümün toplam ücretini 5000’den fazla olanlarseçen ve sonuçları en düşük ücret toplamındanbüyüğe doğru sıralamak için:

SELECT GÖREVİ, SUM(ÜCRET) AS TOPLAM FROMPERSONEL WHERE GÖREVİ <> ‘PAZARLAMACI’ GROUPBY GÖREVİ HAVING SUM(ÜCRET) > 5000 ORDER BYSUM(ÜCRET);

Page 164: VERİ TABANI YÖNETİMİ - AVESİS

Gruplama örnekleri Okul veritabanı diyagramına göre a şağıdaki sorguları cevaplayınız.

1. ‘ders_id ders adı vize ortalama final ortalama’ al anlarını

içeren bir sql cümlesi yazınız.

select ders . ders_id , ders_adi , AVG( vize ), AVG( final ) from ogrenci_ders , ders where ders . ders_id =ogrenci_ders . ders_id group

by ders . ders_id , ders . ders_adi

2. ‘ogrenci sayısı ders id ders adı’ alanlarını içere n ve hangi

dersi kaç ki şinin aldı ğını gösteren sql cümlesini yazınız.

select COUNT(*) as [ogrenci sayýsý] , ogrenci_ders . ders_id , ders_adi from ogrenci_ders , ders where ogrenci_ders . ders_id =ders . ders_id group by ogrenci_ders . ders_id , ders_adi

3. ‘ogrenci sayısı ders adı ortalama’ alanlarını içe ren ve dersi

alan ö ğrenci sayısını ve ders ortalamasını gösteren sql cü mlesini

yazınız.

select count (*) as [ogrenci_sayýsý] , round ( avg ( vize * 0.4 +final * 0.6 ), 0) as [not ortalamasý] , ders_adi from ogrenci_ders , ders where ogrenci_ders . ders_id =ders . ders_id group by ders_adi

4. ‘ad yas’ alanlarını getirecek olan ö ğrencinin adını ve ya şını

gösteren sql cümlesini yazınız ve ya şa göre sıralayınız.

a) select ogrenci . ad, ( year ( GETDATE())- YEAR( ogrenci . dogumtarihi )) as yas

from ogrenci order by ( year ( GETDATE())- YEAR( ogrenci . dogumtarihi ))

b) select ogrenci . ad, datediff ( year , ogrenci . dogumtarihi , GETDATE()) as yas

from ogrenci

Page 165: VERİ TABANI YÖNETİMİ - AVESİS

5. ‘ders id ders adı vize ortalaması’ alanlarını içer en ve vize

ortalaması 50’den yüksek olan derslerin bilgilerini getiren sql

cümlesini yazınız.

select ogrenci_ders . ders_id , ders_adi , AVG( vize ) from ogrenci_ders , ders where ogrenci_ders . ders_id =ders . ders_id group by

ogrenci_ders . ders_id , ders_adi having AVG( vize )> 50

6. Ders adı gps olan dersin kodunu ‘hm413’ olarak de ği ştiren sql

cümlesini yazınız.

Update ogrenci_ders set ders_id ='hm413' where ders_id =( select ders_id

from ders where ders_adi ='gps’)

7. Adı ‘tuba’ olan ogrencinin ve ders_adi ‘veritabanı’ olan kaydını

ogrenci_ders tablosundan silen sql cümlesini yazını z.

delete from ogrenci_ders where ogrenci_id =( select ogrenci_no from

ogrenci where ad ='tuba' ) and ders_id in( select ders_id from ders

where ders_adi ='veritabaný' )

Page 166: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜ

Page 167: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜ

� Veri bütünlüğü nedir?

Page 168: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜ

� İlişkisel veri tabanı modellerinde � yanlış ya da ilişkisiz verilerin çeşitli yollarla veri

tabanına kaydedilmesi önlenip, � farklı tablolara dağıtılan verilerin kendi içerisinde

tutarlılık göstermesine veri bütünlüğü denir.

Page 169: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜ

� Veri bütünlüğü, verinin � doğruluğunu ve � tutarlılığını anlatmaktadır.

Page 170: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜ

� Uygulamalarda� önceden bir takım kurallar tanımlanarak, � bozuk, tutarsız verilerin girişi önlenerek ya da � mevcut bilgilerin üzerinde değişiklik yaparken

bozulması engellenerek veri bütünlüğü sağlanır.

Page 171: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜ

� Veri bütünlüğü, verinin � Doğru olmasını� Tam olmasını ve � tutarlılığını anlatmaktadır.

Page 172: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜ

� Örneğin öğrenci bilgilerinin tutulduğu bir tabloda:� öğrenci numarası alanının tek olması, � öğrenci numarası alanında 12 karakterden oluşan bir

değer olması,� bölüm kodu alanının bölümler tablosunda muhakkak

bir karşılığının olması vb.

Page 173: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Veri tabanı yönetim sistemlerinde veri bütünlüğü hangi yollarla sağlanabilir?

Page 174: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� VTYS’de veri bütünlüğünü iki yöntemle sağlanabilir1. Tanımlanabilir veri bütünlüğü2. Prosedürel (Programsal) veri bütünlüğü

Page 175: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Tanımlanabilir veri bütünlüğüTanımlanan nesnelerin kendi özellikleri sayesinde

sağlanabilen veri bütünlüğüdür.

� Prosedürel (Programsal) veri bütünlüğü

Bir programlama mantığıyla bütünlüğün tasarlanması gerekir.

Page 176: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Tanımlanabilir veri bütünlüğü1. Constraint’ler (kısıtlayıcılar), 2. Rule’lar (kurallar) ve 3. Default’lar (varsayılanlar)

Page 177: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Prosedürel veri bütünlüğü1. Trigger (tetikleyici)2. Stored Procedure (saklı yordam)

Page 178: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Prosedürel veri bütünlüğü1. Trigger (tetikleyici)2. Stored Procedure (saklı yordam)

Page 179: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Constraint’ler (kısıtlayıcılar)1. Primary Key Constraint2. Unique Constraint3. Check Constraint 4. Default Constraint5. Foreign Key Constraint

Page 180: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Primary Key Constraint� Veri tabanı tablosundaki bir satır için benzersiz bir

tanımlayıcıdır� Primary key boş deger alamaz � Her satırda farklı bir değer almak zorundadır � Her tabloda en fazla bir tane primary key kısıtı

olabilir.� Yapısında primary key olmayan bir tablo hiçbir

tabloyla ilişkilendirilemez.

Page 181: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Primary Key Constraint� Örnek:� Öğrenci bilgileri tablosu için öğrencino sütunu

birincil anahtar zorlayıcısı olarak tanımlanabilir. � Bu durumda öğrenci numarası olmayan hiçbir

öğrenci tabloya eklenemez� Girilmiş bir öğrenci numarası tekrar girilemez.

Page 182: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Primary Key Constraint� Örnek:

CREATE TABLE ogrenci(ogrno INT (11) PRIMARY KEY,ad CHAR(25),soyad CHAR(25));

Page 183: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Primary Key Constraint� Örnek:

CREATE TABLE ogrenci(ogrno INT (11),ad CHAR(25),soyad CHAR(25),

CONSTRAINT PK_ogrenci PRIMARY KEY (ogrno));

Page 184: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Primary Key Constraint� Örnek:

CREATE TABLE ogrenci(ogrno INT (11),ad CHAR(25),soyad CHAR(25),

CONSTRAINT PK_ogrenci PRIMARY KEY (ogrno, ad));

Page 185: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Unique Key Constraint� Bir tabloda birçok sütunda tanımlanabilir� Primary key’e benzer ancak küçük bir fark vardır� Her satırda farklı bir değer almak zorundadır � Boş deger alabilir

Page 186: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Unique Key Constraint� Örnek:� Örneğin öğrenci bilgileri tablosu için hem öğrenci no

sürunu hem de tckimlikno sütunu tekildir.� Öğrenci no birincil anahtar olarak tanımlanmışsa

tckimlikno da unique key olarak tanımlanabilir.

Page 187: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� UNIQUE Key Constraint� Örnek:

CREATE TABLE ogrenci(ogrno INT (11) PRIMARY KEY,Tckimlikno INT(11) UNIQUE,ad CHAR(25),soyad CHAR(25)

);

Page 188: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� UNIQUE Key Constraint� Örnek:

CREATE TABLE ogrenci(ogrno INT (11) PRIMARY KEY,Tckimlikno INT(11),ad CHAR(25),soyad CHAR(25),

CONSTRAINT UN_ogr UNIQUE (Tckimlikno));

Page 189: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Check Constraint � Bir sütuna ait değerin belirli formata uygun şekilde

girilmesi için oluşturulan bir kısıtlayıcıdır� Bir sütundaki değerin geçerliliğini başka bir sütunla

karşılaştırarak elde edebilmemize olanak sağlar.

Page 190: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Check Constraint � Örnek:� Bir sütuna bir metin ifadesi girmek istiyoruz ama

metnin uzunluğunun 20 karakterden fazla olmamasını istiyoruz.

� Ya da bir sütuna bayan ya da erkek değer, girilmesi gerekiyor

� Bu durumda check constraint kullanılır.

Page 191: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� CHECK Constraint� Örnek:

CREATE TABLE ogrenci(ogrno INT (11) PRIMARY KEY,Tckimlikno INT(11) UNIQUE,plakano INT(3),ad CHAR(25),soyad CHAR(25),

CONSTRAINT ilplakano CHECK (plakano BETWEEN 1 and 81)

);

Page 192: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� CHECK Constraint� Örnek:

CREATE TABLE ogrenci4(ogrno INT (11) PRIMARY KEY,Tckimlikno INT(11) UNIQUE,ogrtur CHAR (12),ad CHAR(25),soyad CHAR(25),

CONSTRAINT tur CHECK (ogrtur in ('Lisans', 'Yüksek Lisans', 'Doktora'))

)

Page 193: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Default Constraint � Bir sutüna varsayılan bir değer atama işlemi yapar. � Bir satırın bir sütununa değer girilmediği bir

durumda daha önceden belirlenen bir default değerin, o satıra otomatik olarak aktarılmasını yağar.

Page 194: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Default Constraint � Örnek:� E ticaret sistemine üye olan müşterilerin üyelik

tarihlerini sistemden otomatik olarak alıp ilgili sütuna aktarmak için

� Ya da 2 farklı gruptaki öğrencilerden grup girilmediğinde otomatik bir değer girilmesi için kullanılır.

Page 195: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� DEFAULT Constraint� Örnek:

CREATE TABLE ogrenci5(ogrno INT (11) PRIMARY KEY,Tckimlikno INT(11) UNIQUE,ogrtur CHAR (12) DEFAULT 'Lisans',ad CHAR(25),soyad CHAR(25)

);

Page 196: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Not Null Constraint� Bir tablodaki bir sütuna girilecek her kaydın

mutlaka bir değer alması gerektiğini gsterir.ö

Page 197: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Not Null Constraint� Örnek:� Farklı illerden yarışmacıların kayıt yaptıkları bir

uygulamada il adı alanı boş bırakılmasın istendiğinde bu kısıt kullanılabilir.

Page 198: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Not Null Constraint

� Örnek

CREATE TABLE yarismacilar(no INT(4) PRIMARY KEY,ad VARCHAR(30),soyad VARCHAR(30),iladi CHAR (20) NOT NULL

);

Page 199: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Foreign Key Constraint� Örnek:� Anket cevaplarının girildiği tablodaki soru no

sütunun anket sorularının bulunduğu tablodaki soruno sütunundan aktarılması için kullanılır.

Page 200: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� FOREIGN KEY� Örnek:

CREATE TABLE anketcevaplar(cevapno INT (11) PRIMARY KEY,soruno INT(11),cevap VARCHAR(100),

CONSTRAINT anketsoru FOREIGN KEY (soruno) REFERENCES anketsorular(no)

);

Page 201: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Update/Delete İşlem Kısıtları

� Yabancıl anahtar kısıtı ile referans alınan ana tablodaki değer üzerinde değişiklik ya da silme işlemi yapıldığında ne tür işlemlerin yapılabileceği ile ilgili kısıttır.

� Bu işlemler:� No Action� Set Null� Cascade � Set Default

Page 202: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Update/Delete İşlem Kısıtları

� No Action:� Yabancıl anahtar tarafından referans verilen değer

silinmeye ya da değiştirilmeye çalışıldığında işlem gerçekleşmez.

Page 203: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� No Action

� Örnek

CREATE TABLE yarismacilar(no INT(4) PRIMARY KEY,ad VARCHAR(30),soyad VARCHAR(30),iladi CHAR (20) NOT NULL,

CONSTRAINT FK_iladi FOREIGN KEY (iladi) REFERENCES iller(adi) ON DELETE NO ACTION

);

Page 204: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Update/Delete İşlem Kısıtları

� Set Null:� Yabancıl anahtar tarafından referans verilen değer

silinmeye ya da değiştirilmeye çalışıldığında, yabancıl anahtarın bulunduğu tablodaki ilgili alana boş değer atanır.

Page 205: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Set Null

� Örnek

CREATE TABLE yarismacilar(no INT(4) PRIMARY KEY,ad VARCHAR(30),soyad VARCHAR(30),iladi CHAR (20) NOT NULL,

CONSTRAINT FK_iladi FOREIGN KEY (iladi) REFERENCES iller(adi) ON DELETE SET NULL

);

Page 206: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Update/Delete İşlem Kısıtları

� Cascade:� Yabancıl anahtar tarafından referans verilen değer

silinmeye ya da değiştirilmeye çalışıldığında, yabancıl anahtarın bulunduğu tablodaki ilgili alana değişiklik yansıtılır.

Page 207: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Cascade

� Örnek

CREATE TABLE yarismacilar(no INT(4) PRIMARY KEY,ad VARCHAR(30),soyad VARCHAR(30),iladi CHAR (20) NOT NULL,

CONSTRAINT FK_iladi FOREIGN KEY (iladi) REFERENCES iller(adi) ON DELETE CASCADE

);

Page 208: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Update/Delete İşlem Kısıtları

� Set Default:� Yabancıl anahtar tarafından referans verilen değer

silinmeye ya da değiştirilmeye çalışıldığında, yabancıl anahtarın bulunduğu tablodaki ilgili alana daha önceden tanımlanmış olan varsayılan değer atanır.

Page 209: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Set Default:

� Örnek

CREATE TABLE yarismacilar5(

no INT(4) PRIMARY KEY,

ad VARCHAR(30),

soyad VARCHAR(30),

iladi CHAR (20) NOT NULL,

CONSTRAINT FK_iladi FOREIGN KEY (iladi) REFERENCES iller(adi) ON DELETE SET DEFAULT

)

Page 210: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Tanımlamalı veri bütünlüğünün üç türü vardır:1. Alan Bütünlüğü(Domain)2. Varlık Bütünlüğü (Entity)3. Referans Bütünlüğü (Referential)

Page 211: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Tanımlamalı veri bütünlüğünün üç türü vardır:1. Alan Bütünlüğü(Domain)� Alan kısıtları bir veya birkaç sütun ile ilişkilidir. � Temel amaç sütunun ya da birkaç sütunun

tanımlanan kritere uygun olmasıdır. � Tabloya yeni satır eklendiğinde ya da var olan

satırlardan birisi update edildiğinde kısıt gerekli kontrolü yapar.

Page 212: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Tanımlamalı veri bütünlüğünün üç türü vardır:2. Varlık Bütünlüğü (Entity)� Varlık kısıtları satırlarla ilgilidir. � Bu tarz kısıtlar tüm sütunu dikkate almak yerine

özellikle tek bir satır ile ilişkilidir. � Bir satırın bir kolonundaki bilginin diğer hiç bir

satırda bulunmaması garanti altına alır.

Page 213: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Tanımlamalı veri bütünlüğünün üç türü vardır:3. Referans Bütünlüğü (Referential) � Bir sütundaki bilginin diğer bir sütun ile eşleşmesi

zorunluluğunu sağlayarak bütünlüğü korur. � Eşleşen sütunlar farklı iki tablonun sütunları

olabileceği gibi aynı tablonun sütunları da olabilir.

Page 214: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

Tanımsal Bütünlük Türleri Yöntemler

Alan Bütünlüğü(Domain) Check ConstraintDefault ConstraintPrimary ve Foreign KeyConstraint çifti

Varlık Bütünlüğü (Entity) Primary Key ConstraintUnique Key Constraint

Referans Bütünlüğü (Referential)

Check ConstraintForeign Key Constraint

Page 215: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Rule � Check constraint ile aynı işi yapan kurallar oluşturulabilir.

� Constraint’ten farkı tablodan ayrı bir nesne olarak oluşturulmasıdır

� Bu nedenle oluşturulduktan sonra hangi tablonun hangi sütunu ile ilişkili olduğu belirtilmek üzere bağ kurulmalıdır.

CREATE RULE range_rule AS @range>= $1000 AND @range <$20000;

Page 216: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Default� Default nesnesi default constraint ile aynı işleve sahiptir.

� Constraint’ten farkı ayrı bir nesne gibi derlenmesidir.

� Default nesnesine destek verilmesinin nedeni geriye dönük uyumluluğu sağlamak içindir.

USE AdventureWorks2012; GO CREATE DEFAULT phonedflt AS 'unknown';

Page 217: VERİ TABANI YÖNETİMİ - AVESİS

VERI BÜTÜNLÜĞÜNÜ SAĞLAMA

YÖNTEMLERI

� Veri bütünlüğü ne kadar alt katmanda çözülürse o kadar iyi olur

Veri Bütünlüğü sağlama yöntemleri

Kısıtlar (constraint)

Default ve rule

Trigger

Stored procedure veSQLserver dışından

performans fonksiyonellik

Page 218: VERİ TABANI YÖNETİMİ - AVESİS

STORED PROCEDURE (SAKLı YORDAM)

� Stored Procedure'ler database server'da saklanan SQL ifadeleridir.

� Bir programlama dilindeki fonksiyonlar gibi parametre alabilirler.

� Bu parametrelere göre bir sorgu çalıştırıp cevap gönderilirebilir.

� Stored Procedure'ler database server‘da saklanmasından dolayı daha hızlı çalışırlar.

� Bir stored procedure ilk çalıştırıldığı zaman derlenir. Bir daha çalıştırılınca derlenmeden çalışırlar. Bu sayede zaman kaybını önler.

� Sotered procedure'un diğer bir özelliği ise programlama deyimleri içermesidir. if, next, set vs.. programlama dillerindekine benzer özellikler sunar. Gelen parametrelere göre sorgu yapılıp sonucun dönmesi sağlanabilir.

Page 219: VERİ TABANI YÖNETİMİ - AVESİS

STORED PROCEDURE

CREATE PROCEDURE TEST_PRO

@yas int

AS SELECT * FROM KISI where YAS > @yas ORDER BY YAS

AS ifadesinden sonra sql cümlesi yazılır.

Page 220: VERİ TABANI YÖNETİMİ - AVESİS

STORED PROCEDURE

CREATE PROCEDURE TEST_PRO

@yas int

AS

if (yas > 19)

SELECT * FROM KISI where YAS > @yas ORDER BY YAS

else

SELECT * FROM KISI where YAS > @yas and ERISKIN=1 ORDER BY YAS

Page 221: VERİ TABANI YÖNETİMİ - AVESİS

TRIGGER (TETIKLEYICI)

� Bir tabloda yapılan degisikliğin başka bir tablodaki veriyi etkilemesi durumunda, etkilenen tablodaki verinin de otomatik olarak degistirilmesi için trigger kullanılmaktadır.

� Trigger 2 farkli tablo kullanmaktadir.

� 3 çesit trigger vardir. � Insert Trigger (ilgili tabloda ekleme islemi oldugu anda)

� Delete Trigger (ilgili tabloda silme islemi oldugu anda)

� Update Trigger (ilgili tabloda güncelleme islemi oldugu anda)

Page 222: VERİ TABANI YÖNETİMİ - AVESİS

TRIGGER (TETIKLEYICI)

Insert Trigger örneği• Bir tabloda herhangi bir ekleme islemi oldugu anda diger tabloda

da yazdigimiz algoritmanin otomatik olarak etki etmesini saglamak.• Kitap ürünümüzün stoktaki adedi 50 tane• Kitaptan 10 adet satıldığında stoktaki sayisinin otomatik olarak • 10 tane azalması gerekir. • Hiçbir islem yapmazsak bu mümkün degildir. Bu nedenle insert

trigger kullanılır.

Page 223: VERİ TABANI YÖNETİMİ - AVESİS

TRIGGER (TETIKLEYICI)

create trigger urunAdediGuncelle on satislar --1

for insert --2

as begin --3

declare @urunid int, @satisadedi int --4

select @urunid =urunid, @satisAdedi=satisAdedifrom inserted --5

update urunler set urunadedi=urunadedi-@satisadedi where urunid=@urunid --6

end --7

Page 224: VERİ TABANI YÖNETİMİ - AVESİS

TRIGGER (TETIKLEYICI)

--1. Yeni bir trigger olusturmak için create trigger diyoruz, triggerimizinadini yaziyoruz ve satislar tablosunda ekleme oldugu anda bir kod bloguçalisacagi için on satislar diyoruz.

--2 . Trigger çesidimizi belirtiyoruz. Satislar tablosunda herhangi bir ekleme islemi oldugu anda sql server “inserted”adinda bir tablo olusturur. Bu tablonun adini veya yerini degistiremeyiz.

--3. Kodlarimizi yazacagimiz blogu açiyoruz.

--4. Urunid ve satisadedi adinda int türünde 2 tane degisken tanimladik.

--5. Sql server arka planda inserted adinda bir tablo olusturur demistik. Simdi bu tablodan (inserted tablosu) tanimladigimiz degiskenlere degerleriniatiyoruz.

--6. Bu kisimda da diger tabloda (bizim için urunler tablosu) yapilmasigereken degisikligi sorgu biçiminde yaziyoruz. Sorgumuzda urunlertablosundaki urunadedinin girdigimiz satisadedi kadar azalmasinisaglamisiz. Tabiî ki daha sonra where kosulu ile bunun satisini yaptigimizüründe gerçeklesmesini saglamisiz.

--7. Sonlandiriyoruz.

Page 225: VERİ TABANI YÖNETİMİ - AVESİS

Sql Server Spatial Data TypesVeritabanı Yönetimi – TUBA KURBAN

Page 226: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-Geometry

• Geometry: harita bilgilerini 2 boyutlu olarak tutmaktadır.( X ve Y düzleminde-flat-düzlem)

• nokta,doğru, çember, çokgen gibi geometrik cisimlerin X ve Y eksenindeki koordinat bilgilerini tutar.

• uzaysal veriler binary olarak tutulmaktadır ve text hale dönüştürülmesinde OGC tarafından tanımlanmış WKT (Well Konown Text ) formatını kullanmaktadır.

• WKT ‘lerin temsil ettiği uzaysal verilere, şunlar örnek olarak gösterilebilirler.

Page 227: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-Geometry

Bu verilerin,temsili için STAsText() fonksiyonu kullanılmaktadır.Bu fonksiyon dışında 60’dan fazla fonksiyon GEOMETRY tipinin işlemlerindekullanılırlar.(Aynı zamanda GEOGRAPHY tipi için de kullanılabilirler)

Page 228: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Functions

Bütün geometrik tipler,bir SRID’ye sahiptir ve bu fonksiyonlar çalışırken SRID ‘ye göre işlemlerini gerçekleştirir.

Page 229: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-Örnek Alan

Page 230: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Insert• Noktalarımızı, noktalar adlı değişkene giriyoruz ve ardından da

spatialornek tablosunun,1 numaralı ID li kaydının noktasal değerlerini veriyoruz

• Veritabanında binary halde tutulduğu için doğrudan tabloya eklenemezler.

Page 231: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-Örnek

1. STGeomFromText fonksiyonu WKT alır ve SQL Server’ın storageengine’ninde binary olarak saklar.Bu örnek için çokgenin taslağı bir Alan Kodu olarak saklanmaktadır.

2. Noktasal kordinatların oluşturacağı çokgensel şeklin toplam kapladığı alanı STArea()fonksiyonu ile hesaplayalım.

Page 232: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-Örnek

• Örnek olarak bu alan içinde, hayali bir noktaya bir okul kurulacak olsun. Bu okulun bulunduğu noktanın; alanımız içinde olup olmadığını STWithin()fonksiyonunu kullanarak bulabiliriz.

Page 233: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-Örnek

• Bir eğlence merkezinin açılma şartının değerlendirilmesi için, okula olan uzaklığını STDistince()fonksiyonunu kullanarak bulduktan sonra, değerlendirmenin yapılmasını sağlayalım. (1 KM’den küçükse kurulamasın kriteri olsun mesela)

Page 234: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-Örnek

• STTouches() fonksiyonunu kullanarak; doğru şeklinde olan ve kordinatları verilen bir nehrin, alanımız ile sınır olup olmadığını bulalım.

• Çıkan sonucun 1 olması,bize nehirin alanımızla sınır olduğunu gösteriyor.

Page 235: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-Örnek

• SQL Server fonksiyonlarının, iletişimde bulunduğu bir başka data grubu ise XML datalardır.

• XML datalar için Geometrik veriler, Geography Markup Language (GML) aracılığıyla tanımlanabilir.

• GML‘in çalışma şeklini incelemek amacıyla 2 tane girdi alan(XML ve integer), AlanKodununIcindeMi adlı bir store procedure yazalım.

• XML girdimizi bir noktayı GML formatında tanımlamak için oluştururken, integer girdimizi nokta kodlarını karşılaştırmak için oluşturuyoruz.

Page 236: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-Örnek

Page 237: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-Örnek

• Store Procedurümüzü test etmek için (10 10) koordinatlarında bir nokta oluşturalım ve bu noktanın alanın içinde olup olmadığını, ‘AlanKodununIcindeMi’ adlı store procedurümüzü kullanarak bulmuş olalım.

Page 238: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-Geography

• Geography: verileri dünya yüzeyi ile ilişkili olarak tutmaktadır. (geoid)• GEOGRAPHY veri tipi, GEOMETRY veri tipiyle aynı fonksiyonları

kullanılır,aynı şekilde çalışır.• Dünya’nın şeklinden dolayı,bu tipe geoid veri tipi denmektedir.• Bundan dolayı da objeleri geodetik düzlemde ifade eder.• Bu veri tipi noktaların enlemsel ve boylamsal bilgilerini GPS(Global

Positioning System) kordinatlarına göre temsil eder.• Bu tipte de her obje ,bir SRID’ye sahiptir.

Page 239: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-ÖrnekŞimdi de STGeomFromText;fonksiyonunu kullanarak 1 numaralı ID’ye sahip kayıda bir Linestring’in2 numaralı ID’ye sahip kayıda da bir çokgenin kordinat bilgilerini girelim.

Page 240: VERİ TABANI YÖNETİMİ - AVESİS

Spatial Data Types-Örnek

• STIntersects fonksiyonunu kullanarak Linestring ile Çokgenin; Linestring üzerinde ki kesiştiği noktanın kordinatlarını bulalım

Page 241: VERİ TABANI YÖNETİMİ - AVESİS

Kaynaklar

• http://blog.gurunlu.com/dokumanlar/Sql2008-YeniVeriTipleri.pdf• http://www.ugurethemaydin.com/sql-server/geography-tipi-

kullanimi.html• https://mustafaacungil.blogspot.com/2008/09/sql-server-2008de-

spatial-data-uzam.html