• Tidak ada hasil yang ditemukan

SQL Server 2008 4Baski

N/A
N/A
Protected

Academic year: 2021

Membagikan "SQL Server 2008 4Baski"

Copied!
114
0
0

Teks penuh

(1)
(2)
(3)
(4)

Yaşar Gözüdeli

YAZILIMCILAR İÇİN

SQL SERVER 2008

ve

VERİTABANI PROGRAMLAMA

4. BASKI Ankara, 2009

(5)

Yazılımcılar İçin SQL Server 2008 ve Veritabanı Programlama

Yaşar Gözüdeli

Bilgisayar Kitapları Dizisi: 99 ISBN 978-975-02-1014-3 Dördüncü Baskı:

Haziran - 2009

© Seçkin Yayıncılık San. ve Tic. A.Ş.

Bu kitabın her türlü yayın hakkı Seçkin Yayıncılık San. ve Tic. A.Ş.'ye aittir. Yayınevinin yazılı izni olmadan, tanıtım amaçlı toplam bir sayfayı geçmeyecek alıntılar hariç olmak üzere, hiçbir şekilde kitabın tümü veya bir kısmı herhangi bir mecrada yayınlanamaz ve çoğaltılamaz. Sayfa Tasarımı: Seçkin Yayıncılık Kapak Tasarımı: İsmail Çam Yayın ve Dağıtım:

Merkez: Seçkin Yayıncılık, Sağlık Sokak No: 19/B-21 06410 Sıhhiye, ANKARA Tel: (0–312) 435 30 30 (Pbx), Faks: (0–312) 435 24 72

Şube: Ankara Adliye Sarayı K Blok Zemin Kat Sıhhiye, ANKARA Tel: (0-312) 309 52 48 Şube: Abide-i Hürriyet Caddesi 259/4 (Şişli Ceza Adliyesi Altı) Şişli - İSTANBUL Tel: (0-212) 234 34 77 Web Adresi: www.seckin.com.tr, E–posta: yayin@seckin.com.tr

Baskı:

(6)

Teşekkür

Bu kitabın ortaya çıkmasında en büyük fedakârlık şüphesiz ki aylarca, kendilerine ait olan zamanda bilgisayarla baş başa kalmama tahammül edebilen eşim Lale'ye, kızım

Ne-va'ya ve oğlum Yusuf Hakan'a aittir. Kendilerine teşekkür ederim.

Özellikle yeni nesil Microsoft teknolojileri konusunda beni yaşama bağlayan Özcan Koç-'a; SQL Server'in gelişim sürecinde, kitap fikrimi sürekli taze tutan ve beni yüreklendi-ren, Sefer Algan ve Tolga Yaramış olmak üzere tüm arkadaşlarıma teşekkürlerimi suna-rım. 9.Bölümde yer alan Uzaysal Veri Tipleri'ne olan katkılarından dolayı Mehmet

Ka-raman'a, 10.Bölümde yer alan ADO.NET 2.0 yenilikleri bahsine katkılarından dolayı Burak Selim Şenyurt'a teşekkür ederim. Kitap içeriğini sizlerden önce okuyarak, gerek

fikirleri gerekse değerlendirmeleri ile sizlere daha az hatalı bir kitap sunmam konusunda bana yardımcı olan değerli yazılım geliştirici arkadaşlarım Volkan Verim, Oğuz Kağan

Yağmur ve Salih Bozkurt'a teker teker teşekkürlerimi sunarım.

Kitap içeriğinin ve müfredatının genel kabul görmüş bir müfredat haline gelmesinde, INETA- MEA'nın Verivizyon'a verdiği destek şüphesiz yabana atılamaz. Bu kapsamda INETA'ya teşekkürlerimi sunarım. Yine kitap müfredatına alınmış konuların anlatımla-rının olgunlaşması Verivizyon aktiviteleri ile sağlanmıştır. Verivizyon tarafından düzen-lenen seminer, eğitim ve benzeri etkinliklere emeği geçen ve katılan herkese teşekkürle-rimi sunarım. Kitabın düzenlenmesi ve okunabilir hale gelmesinde emeği geçen Seçkin

Yayıncılık çalışanlarına ve desteklerinden dolayı bütün mesai arkadaşlarıma teşekkür

ederim.

Kitabın bundan önceki baskıları hakkında, teveccühlerini veya düzeltmelerini ileterek daha iyiyi arama serüvenimde bana destek veren okurlarıma teşekkür ederim. Günlük hayatta karşılaştıkları sorunları ve çözümlerini dolayısıyla da tecrübelerini benim aracılı-ğımla siz okurlara ulaştıran yazılımcı dostlarıma, son olarak bu kitabı okumaya değer gö-rüp elinize aldığınız için ve belki bana görüşlerinizi ileterek daha iyiyi bulmama yardımcı olacağınız için size teşekkürlerimi sunarım.

(7)

INETA Hakkında

Kısa adı INETA olan International .NET Association, Microsoft .NET temelli yazılım geliştiriciler için paylaşım alanı sağlayan bir oluşum. INETA'nın hedefi, dünyanın birçok yerinde oluşturulmuş BT topluluklarının kendi üyelerini Microsoft. NET teknolojileri konusunda eğitebilmeleri ve bu teknolojilerin tanıtımını yapabilmeleri için gerekli kay-nak ve destekleri sağlamak. BT Profesyoneli, yazılım geliştirici veya mimar yahut ta proje yöneticilerinden oluşan kullanıcı toplulukları INETA'nın destek verdiği topluluk kapsa-mında ele alınmakta.

Bir kullanıcı topluluğunun INETA çerçevesinde yer alabilmesi için, herhangi bir .NET alanı veya .Net'in tüm alanları ile ilgileniyor olması veya birçok başka yazılım geliştirme teknolojilerinin yanı sıra .NET ile de ilgileniyor olması gerekmekte.

Kâr amacı gütmeyen ve bağımsız bir kuruluş olan INETA, Microsoft ve diğer sponsorla-rının desteğinde, dünyanın birçok yerindeki çok sayıda kullanıcı topluluklasponsorla-rının yöneti-cileri aracılığıyla yürütülmektedir.

INETA'YA Katılmak

INETA üyeliği, bütün kullanıcı toplulukları için şu anda, yer, ilgi odağı ve ilişki ayrımı yapmaksızın ücretsiz yapılmakta. .NET ile ilgili bir grup için en etkin değer kazanımı ak-tif INETA katılımı ile mümkündür.

Bir yazılım geliştirici olarak, INETA çerçevesinde rol alabilmek için size en yakın INETA topluluğunu www.ineta.org adresinden bulabileceğiniz gibi, uygun bir topluluk bulamamanız halinde siz de etrafınızda .NET teknolojilerini kullanan yazılım geliştiricile-ri bir araya getirerek INETA olanaklarından faydalanıp, INETA içegeliştiricile-risinde aktif rol üst-lenebilirsiniz.

INETA, üyeliğe kabul ettiği bir topluluğun muntazaman gelişimini sürdürebilmesi için, üyelerine yönelik düzenli aktivitelere teşvik etmektedir. Ayrıca üye kullanıcı toplulukla-rının seminer verebilmeleri için ortam ve konuşmacı sağlanması, seminer anında meşru-bat ve pizza sunulması gibi konularda kullanıcı gruplarına destek olmakta, gerektiğinde kitap türü bilgilendirici materyaller ile de onların küresel eğilimlerle bütünleşmiş kalması hususunda destek sağlamaktadır.

(8)

INETA'nın Önsözü

Günümüzün kurumsal bilgi teknolojileri altyapılarını oluşturan bir çok veritabanı yöne-tim sistemi içerisinde SQL Server en yaygın kullanılanı olarak dikkat çekiyor. Her geçen gün daha fazla uygulamanın, SQL Server uyumlu olarak pazarda kendisine sağlam bir yer edindiğini görüyoruz.

Bu gelişim süreci, uygulama geliştiricilerden bilgi teknolojileri yöneticilerine kadar geniş bir kitlenin MS SQL Server hakkında teknik bilgilere daha kolay ve örneklerle destek-lenmiş olarak erişebileceği bir kaynak ihtiyacını doğuruyor. Yaşar Gözüdeli, SQL Server 2005 konusundaki kitabı ile başladığı yolculuğuna SQL Server 2008 ile devam ederek bu ihtiyacı karşılıyor.

SQL Server ürününü gerçekleştiren yazılımcılar bir alan veya teknoloji üzerinde son de-rece detaylı bir uzmanlığa sahiptirler. Yazdıkları ürünün özelliklerini bilmenin ötesinde yaşadıkları için çoğu zaman bu detayları kullanıcılar veya yazılımcılara basit bir açıdan aktarmakta zorlanırlar. İşte bu noktada Yaşar Gözüdeli derin ve uzun araştırmalar gerek-tiren bilgileri özümseyip, onları sistematik bir şekilde okuyucusunun en çok yarar sağla-yabileceği şekilde sunuyor.

SQL Server 2008 dendiğinde benim aklıma gelen ilk şey güvenlik; Diğer veritabanı yö-netim sistemleri ile karşılaştırıldığında uzun senelerdir sıfır veya sıfıra yakın güvenlik açı-ğı olmasını, kurumsal güvenlik politikalarından taviz vermeden SQL Server içinde uygu-lanabilir olarak çıkmasına bağlıyorum. Güvenlik tam anlamıyla sağlanmasının ötesinde kolay şekilde de yönetilebilir olmalıdır. İlk kuruluşta güvenli olma, Veri kaynakları erişim kontrolleri, Veri şifreleme, aktiviteleri izleme ve kaydetme özellikleri ve bunların yöne-timi SQL Server 2008’i güvenlik konusunda rahatça rakiplerinin üstüne yerleştiriyor. Yaşar Gözüdeli, SQL 2008 için yazdığı bu kitapta veritabanına girişten başlayarak sorgu-lamalar, Optimizasyon, T-SQL ve CLR, XML desteği, ortak zamanlı çalışma, Coğrafi Tipler, harici sunucular ve Service Broker’lar ile çalışmalardan da bahseden, örneklerle zenginleştirilmiş, takibi kolay bir kaynak hazırlamış. Kitap, profesyonel çalışmalarımızda SQL Server 2008' den nasıl faydalanabileceğimizi akıcı ve kolay anlaşılabilir bir üslup ile anlatıyor.

Bir önceki SQL Server 2005 kitabı 3 baskı yapan ve 3000 adet satan, alanında büyük kabul gören kitabı kadar başarılı olacağına emin olduğumuz SQL Server 2008 kitabını bize kazandıran Yaşar Gözüdeli'ye, kütüphanemizde en önlerinde yer alacak bu güncel kaynağı hazırladığı için teşekkürlerimizi sunuyoruz.

Gökşin Bakır

(9)

Önsöz

İnsanoğlu var olduğundan bugüne hep veriye gereksinim duydu. Ama belki bu gereksi-nimi hiç bugünkü kadar şiddetli değildi. Hiç şüphe yok ki bu gereksinim, yarın bugün-künden daha şiddetli olacak. Bu gereksinime paralel, verilerin birinci dereceden muha-tabı olan Veritabanı Yönetim Sistemleri de sürekli olarak gelişmekte. SQL'in, standart olarak ortaya atıldığından bu yana yaklaşık 20 yıldır popülerliğini kaybetmemiş bir dil olması onun ne denli güçlü ve gereksinim duyulan bir şey olduğunu ortaya koyar. Belki bunun en büyük sebeplerinden biri, "veri" kaydının ve sorgulamasının hayatın temel bir parçası olmasındandır.

Veri işleme, her geçen gün yeni gereksinimlerle karşımıza çıkmakta. SQL standardı da bu gelişmelere paralel olarak 1999, 2003, 2006 yayınlarıyla desteklendi. SQL Server 2008, bir VTYS olarak bu standartlardan payına düşeni fazlasıyla almış bir veri yönetim aracı. 2000'den 2005'e geçmeye nazaran, 2005- 2008 geçişinin daha kolay bir geçiş ola-cağından emin olabilirsiniz.

Bu yeni sürümde, SQL Server programlamanın olmazsa olmazı olan Transact SQL ile il-gili birkaç iyileştirme yer almakta. Bir veritabanı programcısı iseniz, bu yenilikleri hızlı bir şekilde öğrenmeniz sizin açınızdan hiç de zor olmayacaktır. Hatta kullanmaktan keyif alacağınızı söyleyebilirim. Şayet 2008 sürümüne, SQL Server 2000'den geçiyorsanız, T-SQL 'in sizi zorladığı hallerde CLR desteği sizin için bir kurtuluş olacaktır, mutlaka de-neyin…

Şayet bir Coğrafi Bilgi Sistemi projesi geliştiriyorsanız, SQL Server 2008 ile birlikte gelen Uzaysal(Spatial) tipler işlerinizi oldukça kolaylaştıracaktır. Yine Site haritası gibi verile-rinizi tutmak için hierarchyid tipini kullanmaktan keyif alabilirsiniz.

SQL Server 2005 XML Web Servis desteğine yatırım yapan yazılımcılar, sizlere üzücü bir haberim var; 'Bir sonraki SQL Server sürümünde aradığınız bu özelliği bulamayabilirisi-niz!' Bu nedenle, ilgili üniteyi kitaptan çıkarttım.

Servis temelli çalışıyorsanız, veya çok fazla veri ile boğuşmanız gerektiğinden yük dağıt-ma ve ölçekleme yapdağıt-ma ihtiyacınız varsa, Service Brokers teknolojisi servislerinizin me-sajlaşmasını veritabanının gücü ile buluşturacaktır. Bu konuda da bilgi edinmek sizin için elzem olabilir.

Bütün bu yeni özellikleri bünyesinde barındıran bir tek ürün olarak karşımıza çıkan SQL Server 2008, bütün verilerinizi tek merkezden idare edebileceğiniz gerçek manada bir 'Veri' tabanı Yönetim Sistemi…

Kitap yayına hazırlanırken etrafta halen SQL Server 2000 kullanan yazılımcıların da ol-duğunu gördük. Bu nedenle her ne kadar SQL Server 2008 sürümü için hazırlanmış bir kitap olsa da 2000 ve 2005 sürümlerinden geçmek isteyenleri de cesaretlendirmek için yer yer çapraz sürüm kıyaslamalarına yer verdim.

Veritabanı ile tanışmak için bu kitabı aldı iseniz, ilk aşamada kitap CD'lerinde yer alan “Veritabanı Programlama 1-2” kitapçıklarını okuyarak başlamanızda yarar var. Çünkü kitap bir seferde bitiremeyeceğiniz kadar büyük olduğundan büyük resmi kaçırabilirsiniz!.

(10)

Kitap kapsamı, başlangıçtan orta seviyeye olduğu için bu kitap, "Yazılımcılar için SQL

Server 2005 ve Veritabanı Programlama" adlı bir önceki kitabın SQL Server 2008

ye-nilikleri çerçevesinde yeniden düzenlenmiş halidir. Kitabı bitirdiğinizde, orta büyüklükte bir veritabanı yönetim sistemi için yazılım ve yönetim işlemlerinin hemen hepsinin üste-sinden gelecek birikime sahip olacağınızı söyleyebilirim. Ancak ekstrem projeler için ki-tabın kapsamı ölçekleme açısından yetersiz gelebilir.

Son olarak, konulara geçmeden önce, şayet SQL Server 2008'i bu kitapla öğrenmek amacında iseniz, şunu bir prensip haline getirmiş olmanızda büyük yarar var; Bir dili veya programlanabilir ortamı tanımak için bir satır kod çalıştırıp sonucunu görmek, bin satır kodu okuyup geçmekten iyidir. Unutmayın ki bir yazılımcı için tecrübe, kaç saat kod yazdığından öte, kod yazarken ne kadar problemle karşılaştığı ile ilgilidir. Kod çalıştırma-dan, başkalarının yazdığı hazır kodları okuyarak(çalışmayan bir kod bile olabilir, sadece okuyarak bunu nerden bilebilirsiniz ki!) asla problemlerle karşılaşamazsınız.

Başarı sizinle olsun…

Yaşar Gözüdeli

ygozudeli@verivizyon.com Mayıs 2009-ANKARA

(11)
(12)

Genel İçindekiler

1. Bölüm: VERİTABANI KAVRAMINA GİRİŞ ... 39 

1. ÜNİTE: İlişkisel Veritabanının Temelleri ... 39 

2. ÜNİTE : SQL Server 2008'in Temelleri ... 53 

3. ÜNİTE: T-SQL'e Genel Bakış ... 69 

2. Bölüm: VERİTABANI TASARIMI ... 89 

4. ÜNİTE: Veritabanı Tasarımına Genel Bakış ... 89 

5. ÜNİTE: Veritabanı Nesnesinin Temelleri ... 107 

6. ÜNİTE: Tabloları Tasarlamak ... 127 

7. ÜNİTE: Veri Bütünlüğünü Sağlamak ... 153 

3. Bölüm: VERİLERİ SORGULAMAK ... 175 

8. ÜNİTE: Basit Sorgular ... 175 

9. ÜNİTE: Tabloları Birlikte Sorgulamak ve Özetlemek ... 201 

10. ÜNİTE: İleri Veri Yönetim Teknikleri ... 225 

4. Bölüm: VERİ ERİŞİMİNİ İYİLEŞTİRMEK ... 251 

11. ÜNİTE: Viewlerle Çalışmak ... 251 

12. ÜNİTE: Indeks Teorisi ... 271 

13. ÜNİTE: Indeks Yönetimi ... 289 

5. Bölüm: T-SQL İLE PROGRAMATİK ÖĞELER KODLAMAK ... 317 

14. ÜNİTE: T-SQL ile Programlar Geliştirmek ... 317 

15. ÜNİTE: Stored Procedure'ler ... 345 

16. ÜNİTE: İleri T-SQL Programlama ... 369 

17. ÜNİTE: Kullanıcı Tanımlı Fonksiyonlar ... 387 

6. Bölüm: XML İLE ÇALIŞMAK ... 399 

18. ÜNİTE: Tip Olarak XML ... 399 

19. ÜNİTE: XML-İlişkisel Dönüşümler ... 427 

7. Bölüm: ORTAK ZAMANLILIK VE TRANSACTION ... 441 

20. ÜNİTE: Transaction'larla Çalışmak ve Ortak Zamanlılık ... 441 

21. ÜNİTE: Kilitlenmeleri Yönetmek ... 461 

22. ÜNİTE: Triggerlar ... 469 

8. Bölüm: SQL SERVER İÇİNDE CLR ... 493 

23. ÜNİTE: CLR Genel... 493 

24. ÜNİTE: Basit Rutinler ... 511 

(13)

9. Bölüm: VERİTABANI YETENEKLERİNİ GELİŞTİRMEK ... 547 

26. ÜNİTE: Bağlı Sunucularla Çalışmak ... 547 

27. ÜNİTE: İlişkisel Olmayan SQL Server Yetenekleri ... 555 

28. ÜNİTE: Service Brokers ... 571 

10. Bölüm: İSTEMCİ TARAFTA SQL SERVER ERİŞİMİ PROGRAMLAMA ... 591 

29. ÜNİTE: ADO.NET Temelleri ... 591 

30. ÜNİTE: ADO.NET'de Kopuk Veri Yönetimi ... 617 

31. ÜNİTE: SQL Server Management Objects'i Kullanmak ... 639 

EK A: VERİTABANI PROGRAMCILARINA İPUÇLARI ... 649 

EK B: C# VE OOP KILAVUZU ... 669 

EK C: BÖLÜM SONU SORU CEVAPLARI ... 695 

EK D: DÜKKAN VERİTABANI ŞEMASI ... 705 

(14)

İçindekiler Teşekkür ... 5 INETA Hakkında ... 6 INETA'YA Katılmak ... 6 INETA'nın Önsözü ... 7 Önsöz ... 8 Genel İçindekiler ... 11 Giriş ... 33

Veritabanı Programlama Hakkında ... 33

Kitabın İçerdiği Örnekleri Test Edebilmek İçin ... 33

Birikim Gereksinimleri ... 34

Kimlere Hitabediyor ... 34

Farklı Başlangıç Önerileri ... 34

Kitap Neler İçeriyor ... 36

Veritabanı Kavramına Giriş ... 36

Veritabanı Tasarımı ... 36

Veri Sorgulama ... 36

Veri Erişimini İyileştirmek ... 36

T-SQL ile Programatik Öğeler Kodlamak ... 36

XML ile Çalışmak ... 36

Ortak Zamanlılık ve Transaction ... 37

SQL Server 2008 içinde CLR ... 37

Veritabanı Yeteneklerini Geliştirmek ... 37

İstemci Taraftan Veritabanı... 37

EK A - Veritabanı Programcılarına İpuçları ... 37

EK B - C# ve OOP Kılavuzu ... 37

EK C - Dükkan Veritabanı Şeması ... 37

EK D - Bölüm Sonu Soru Cevapları ... 38

EK E - CD Kullanım Kılavuzu ... 38

Gösterimler ve İçerik Düzeni Hakkında ... 38

Kaynak Dosyaları Destek ve Geri Bildirim ... 38

1. Bölüm

VERİTABANI KAVRAMINA GİRİŞ

1. ÜNİTE: İlişkisel Veritabanının Temelleri ...39

TEMEL VERİTABANI KAVRAMLARI ... 39

İlişkisel Veritabanı Kavramı ... 40

(15)

İlişkisel Cebirin Temel Operatörleri ... 43

Veritabanı Programlama Nerelerde Kullanılır? ... 45

Temel Veritabanı Nesneleri ... 45

Veritabanı Uygulamaları ... 50

Üç N Katman Mimarisi ...50

Veritabanı Atelyesi 1.1 ... 51

2. ÜNİTE: SQL Server 2008'in Temelleri ...53

SQL SERVER BİLEŞEN MİMARİSİ ... 53

Başlıca SQL Server 2008 Araçları ... 54

SQL Server Configuration Manager ... 54

Management Studio ... 55

SqlCmd ... 56

SQL Server Surface Area Configuration ... 58

SQL Profiler ... 59

Books Online ... 60

SQL Server Veritabanı Mimarisi ... 60

Standart Veritabanları ... 60

Disk Yönetim Mimarisi ... 62

SQL Server'de Disk Ölçümleri ... 62

SQL Server'de Tablo ve Indeks'lerin Yönetimi ... 64

Heap ...65

Clustered Indeks ...65

Nonclustered Indeks ...65

SQL Server Kullanıcı Yönetim Mimarisi ... 65

Roller ... 65

Kullanıcılar ... 66

İzinler ... 67

Şemalar ... 67

SQL Server Properties\Security Sekmesi ...67

Veritabanı Atölyesi 1.2 ... 68

3. ÜNİTE: T-SQL'e Genel Bakış ...69

Veri Tanımlama Dili ... 70

Nesne Oluşturmak: CREATE ... 70

Nesne ve Değişken (Tanımlayıcı) İsimlendirme Kuralları ...71

Tanımlayıcı İsimlendirme Notasyonları ...71

Tanımlayıcı İsimlendirmenin Töresi ...71

Null Kavramı ...72

Nesnelerde Değişiklik Yapmak: ALTER ... 72

Nesne Silmek: DROP ... 73

Veri İşleme Dili ... 73

(16)

Veri Seçmek ve Filitrelemek: SELECT ... 74

Ulama ...74

Seçilen Kayıtları Sıralamak ...75

WHERE Cümleciği ile Kayıtları Filitrelemek ... 75

Verilerde Değişiklik Yapmak: UPDATE ... 76

Veri Silmek: DELETE ... 77

Fonksiyonlar ... 77

Aggregate (Grupsal) Fonksiyonlar ... 77

Rowset Fonksiyonlar ... 79

Skaler Fonksiyonlar ... 79

Deterministik Kavramı ...81

Veri Kontrol Dili ... 82

Yetki vermek: GRANT ... 83

WITH GRANT OPTION Seçeneği ile Basamaklı Yetkilendirmek ...84

Erişimi Engellemek: DENY ... 84

Erişim Tanımını Kaldırmak: REVOKE ... 85

Veritabanı Atölyesi 1.3 ... 86

Bölüm Sonu Özeti ... 87

Bölüm Sonu Tekrar Soruları ... 87

2. Bölüm

VERİTABANI TASARIMI

4. ÜNİTE: Veritabanı Tasarımına Genel Bakış ...89

Kavram Model ... 90

ORM ile Veritabanı Modelleme ... 91

ER ile Modelleme ... 92

ER ile Modelleme Aşamaları ...93

UML ile Modelleme: ... 94

Mantıksal Model ... 95

Veri Normalizasyonu ... 96

Normalizasyon Kuralları ... 96

Kayıtların İlişkilendirilmesi ... 99

Bire Bir İlişki (1-1) ... 99

Bire Çok İlişki (1-N) ... 100

İlişkisel Ortamda Hiyerarşik Veriyi Modellemek ...100

Çoka Çok İlişki (N-N) ... 101

ER Diyagram ile Mantıksal Model Oluşturmak ... 102

Fiziksel Model ... 105

(17)

5. ÜNİTE: Veritabanı Nesnesinin Temelleri ...107

Dosya ve Dosya Gruplarını Anlamak ... 107

Veritabanı Oluşturmak ... 108

Management Studio ile Yeni bir Veritabanı Oluşturmak ... 108

Transact SQL ile Veritabanı Oluşturmak ... 109

Çoklu Dosya ve Dosya Gruplarını Kullanmak ... 111

Dosya Grubu (File Group) Kavramı ... 112

Default Dosya Grubu (Default File Group) ... 113

Var Olan Bir Veritabanında Dosya ve Dosya Grubu Eklemek ... 113

Veritabanına Erişecek Uygulama Kullanıcısını Ayarlamak ... 115

Veritabanı İçerisinde Şema Kavramı ... 115

Şemaları Yönetmek... 116

Veritabanını Yönetmek ... 117

Veritabanı Seçeneklerini Ayarlamak ... 117

Veritabanı Seviyeli Collation Ayarı Yapmak ...120

Veritabanı Dosyalarının Boyutunu Değiştirmek ... 121

Veritabanı Dosyalarının Boyut Artımını Ayarlamak...121

Otomatik Artırmaya Ayarlama ... 121

Müdahale Ederek Artırmak ... 121

Transaction Log Dosyasını Gözlemlemek ... 122

Veritabanlarını Küçültmek (Shrinking) ... 122

Veritabanlarını Silmek ... 124

Veritabanı Atölyesi 2.2 ... 125

6. ÜNİTE: Tabloları Tasarlamak ...127

Nesne İsimlendirirken ... 127

Sütunları Tasarlamak ve Veri Türleri ... 128

Metin Veri Tipleri ... 129

ASCII Veri Tipleri ...129

Unicode ...130

Metinsel Veri Tiplerinden Seçim Yapmak ... 130

Collation Ayarları ... 131

Tarih-Zaman Veri Tipleri ... 132

Numerik Sayılar ... 133

Yaklaşık Sayı Veri Tipleri ... 133

Tamsayı Veri Tipleri ... 134

IDENTITY() Fonksiyonu ile Otomatik Artan Sütunlar Tanımlamak ... 134

Parasal Veri Tipleri ... 136

Binary Veri Tipleri ... 136

MAX İfadesi ... 136

Eski LOB Veri Tiplerini Dönüştürmek ...137

XML Veri Tipi ve XML Verilerin Tasarlanması ... 138

(18)

Hesaplanmış Sütun ... 141

Hesaplanmış Sütunu Sabitlemek (Persist Etmek) ...141

Seyrek Sütun ve Seyrek Tablo Kavramı ... 142

Kullanıcı Tanımlı Veri Tipleri ... 142

Kullanıcı Tanımlı Veri Tipleri (UDDT) ile Çalışmak ... 143

CLR Kullanıcı Tanımlı Tipler ... 144

Tabloları Oluşturmak ... 144

Tablo Tasarımında Satır Boyutuna Karar Vermek ...145

Tablolar Üstünde Değişiklik Yapmak ... 147

Sütun Eklemek ... 147

Sütun Değiştirmek ... 147

Sütun Silmek ... 147

Tabloların veya Sütunların Adını Değiştirmek ... 148

Tablo Silmek ... 148

Geçici Tablolarla Çalışmak ... 148

Nesnelerin T-SQL İfadelerini Almak ... 150

Veritabanı Atölyesi 2.3 ... 151

7. ÜNİTE: Veri Bütünlüğünü Sağlamak ...153

Veri Bütünlüğünü Kavramları ... 153

Tanımlamalı Veri Bütünlüğü ... 154

Prosedürel Veri Bütünlüğü ... 157

Veri Bütünlüğü Tekniği Seçmek ... 157

Veritabanı Atölyesi ... 158

Veri Bütünlüğünü Gerçeklemek ... 159

Sütun Seviyeli Veri Bütünlüğünü Sağlamak ... 159

Primary Key Constraint Oluşturmak ...159

Unique Key Constraint Oluşturmak ...161

Default Constraint Oluşturmak ...162

Default Nesnesi Oluşturmak ...163

Check Constraint Oluşturmak ...163

Rule Oluşturmak ...165

Tablo Seviyeli Veri Bütünlüğünü Sağlamak ... 166

Sütunlar Arası Check Constraint Oluşturmak ...166

Foreign Key Constraint Oluşturmak ...167

Ardışık Bütünlük (Cascading Integrity) ... 169

Constraint'leri Yönetmek ... 171

Constraint'lere Göz Atmak ... 171

Constraint'leri Silmek ... 172

Constraint'leri Denetime Kapamak ve Açmak ... 172

Veritabanı Atölyesi ... 172

Bölüm Sonu Özeti ... 173

(19)

3. Bölüm

VERİLERİ SORGULAMAK

8. ÜNİTE: Basit Sorgular ...175

Kayıtları Seçmek: SELECT ... 175

En Basit SELECT ... 176

Sadece Belli Sütunları Seçmek ... 177

Tekrarlamaları Tekile İndirgemek: DISTINCT ... 177

Türetilmiş (Calculated) Sütunlar ... 177

Aritmetik İşaretler ... 177

Sütuna Takma Ad (Alias) ... 178

Matematiksel Fonksiyonlar ... 179

WHERE ile Satırları Filitrelemek ... 180

Karşılaştırma İşaretleri ... 180

Mantıksal Operatörler ...181

NULL Karşılaştırma ... 183

Aralık Sorgulama: BETWEN.... AND.... ... 184

Kayıtları Sıralamak: ORDER BY ... 184

Dönen Kayıt Sayısını Kısıtlamak: TOP ... 186

SQL'DE Karakter ve Tarih İşlemleri ... 187

Karakter Karşılaştırmaları: LIKE Deyimi ... 187

Joker Karakterler ... 188

Metinleri Ulamak (Concatenation) ... 190

Başlıca Karakter Fonksiyonları ... 191

Tarihleri Sorgulamak ... 192

Tarih Fonksiyonları ... 192

Alt Sorgularla Çalışmak ... 194

IN ve NOT IN ... 195

Tekil Sonuçlar Döndüren Alt Sorgular ... 195

Çoklu Sonuç Döndüren Altsorgular ... 196

Türetilmiş Tablolar ... 197

İlintili (Corelated) Altsorgular ... 198

EXISTS, NOT EXISTS ... 199

Veritabanı Atölyesi ... 200

9. ÜNİTE: Tabloları Birlikte Sorgulamak ve Özetlemek ...201

Tabloları Birleştirerek Sorgulamak ... 201

Tabloya Takma Ad (Alias) ... 203

Bir Tabloyu Kendisiyle Birlikte Sorgulamak ... 203

(20)

OUTER JOIN İfadeleri ... 206

LEFT OUTER JOIN... 206

RIGHT OUTER JOIN ... 207

FULL OUTER JOIN ... 208

CROSS JOIN ... 208

SQL Server Açısından JOIN İşlemleri ... 209

JOIN İçin İpucu Kullanmak ... 210

Fark, Kesişim ve Birleşim Bulmak ... 210

Veritabanı Atölyesi ... 212

Verileri Gruplamak ve Özetlemek ... 214

Gruplamalı Fonksiyonlar (Aggregate Functions) ... 214

GROUP BY Deyimi ... 216

Gruplamalar Üstünde Şart Koşmak: HAVING ... 218

Gruplanmış Verileri Özetlemek ... 220

CUBE Deyimi ... 220

ROLLUP Deyimi ... 221

GROUPING ile Özetleri Düzenlemek ... 222

COMPUTE BY ve COMPUTE deyimi ... 222

Veritabanı Atölyesi 3.2 ... 223

10. ÜNİTE: İleri Veri Yönetim Teknikleri ...225

CTE ve Rekürsif Sorgular ... 225

CTE ... 226

Hiyerarşik Sorgu için CTE'nin Rekürsif Kullanımı ... 228

PIVOT ve UNPIVOT Operatörleri ile Veri Analizi ... 231

PIVOT ... 231

UNPIVOT ... 235

Rütbeleme Fonksiyonları ile Kayıtları Sıralamak ... 236

ROW_NUMBER() ... 237

Parçalı Satır Numaraları Vermek ...238

RANK() ve DENSE_RANK() Fonksiyonları ... 239

Sonuçları n Gruba Ayırmak: NTILE (ifade) ... 240

Veri Değişimi Yönetimi ... 241

Yeni Veri Eklemek Hakkında Püf Noktaları ... 241

Sorgu Sonucunu Yeni Tabloda Saklamak ...242

Bir Sorgunun Sonucunu Varolan Tabloya Eklemek ...242

Verileri Güncellemek ... 243

Tabloları Birleştirerek Veri Güncellemek ...243

Alt Sorgular Kullanarak Veri Güncellemek ...244

Verileri Silmek ... 244

Tabloları Birleştirerek Veri Silmek ...244

(21)

TOP İfadesi ... 246

Etkin Olarak Veri Silmek: TRUNCATE TABLE ...246

Veritabanı Atölyesi 3.3 ... 247

Bölüm Sonu Özeti ... 249

Bölüm Sonu Tekrarı-6 ... 249

4. Bölüm

VERİ ERİŞİMİNİ İYİLEŞTİRMEK

11. ÜNİTE: Viewlerle Çalışmak ...251

VIEW'LERLE ÇALIŞMAK ... 251

View'lere Neden İhtiyaç Duyarız ... 252

View İçin Alternatifler ... 252

View Oluşturmak ... 253

Kısıtlamalar ... 254

İzinler ve Sahiplik Zinciri ... 254

Birden Fazla Tablodan Veri Çeken View'ler ... 255

View'leri Yönetmek ... 256

View Üstünde Değişiklik Yapmak ... 256

Tanımlanan View'leri Görmek ve Sistem View'leri ... 257

View Tanımlarını Gizlemek ... 257

View Temel Tablolarının Şemasını Kilitlemek: SCHEMABINDING ... 258

View'leri Silmek ... 259

View'ler ve INSERT, UPDATE, DELETE İfadeleri ... 259

Parçalı View Yapıları ... 262

Parçalı Tablolar Oluşturmak ... 265

Nesnelere Takma Ad: Synonymuslarla Çalışmak ... 269

Veritabanı Atölyesi ... 270

12. ÜNİTE: Indeks Teorisi ...271

INDEKSLERLE ÇALIŞMAK ... 271

VTYS'ler Indeks'leri Nerelerde Kullanır? ... 273

INDEKS MİMARİSİ ... 275

Dengeli Ağaç (β-tree) Yapısı ... 276

Heap Yapı ... 278

Clustered Indeks ... 278

(22)

SQL Server Indeks Türleri ... 281

Unique Index ... 281 Karma (Composite) Indeks ... 281 Kapsam (Covering) Indeks ... 281 Parçalı Indeksler ... 282 Eklenti Sütunlu İndeksler ... 282 Filtreli İndeksler ... 282 XML Indeksler ... 282 Full-Text Indeksler ... 282

Veri Değişim İşlemlerinin Indekslere Etkisi ... 283

FILLFACTOR ve PAD_INDEX Parametrelerine Karar Vermek ... 284

Indeks Tanımlama Yaklaşımları ... 284

Clustred Tanımlarken ... 284 Non-Clustred Indeks Tanımlarken ... 285

Veritabanı Atölyesi 8.1 ... 286

13. ÜNİTE: Indeks Yönetimi ...289

INDEKS OLUŞTURMAK ... 289

Unique Index ... 291 Kapsam (Covering) Indeks Oluşturmak ... 292 INCLUDE Deyimi ile Eklenti Sütunlu Indeks Tanımlamak ... 293 WHERE Deyimi ile Filtreli İndeks Tanımalak ... 293 Indeks Seçeneklerini Ayarlamak ... 294 Parçalı Indeksler Oluşturmak ... 296 FILLFACTOR ve PAD_INDEX Parametrelerini Ayarlamak ... 296 View Üstünde Clustered Indeks Tanımlamak ... 297

Indeksler Hakkında Bilgi Almak ... 298 Indeksler Üstünde Değişiklik Yapmak ... 299

Indeksleri Yeniden Derlemek: REBUILD ... 300 Indeksleri Yeniden Düzenlemek: REORGANIZE ... 300 Indeksleri Kapatmak ... 301 Indeks Seçeneklerini Değiştirmek ... 301

Indeksleri Silmek ... 302 Indekslere Bakım Yapmak ... 303

Indekslerin Dağınıklıklarını Gözlemlemek ... 304

Indeksleri Düzenlemek ... 305 İstatistiklerin Veri Erişimine Etkisi ... 306

(23)

İstatistikleri Güncellemek ... 308

Veritabanı Performans Araçlarını Kullanmak ... 308

SQL Profiler ile Veritabanını Takip Etmek ... 308 Database Tuning Advisor ile Veritabanı İyileştirmesi ... 310

Veritabanı Atölyesi 8.3 ... 314 Bölüm Sonu Özeti ... 315 Bölüm Sonu Tekrarı-8 ... 315

5. Bölüm

T-SQL İLE PROGRAMATİK ÖĞELER KODLAMAK

14. ÜNİTE: T-SQL ile Programlar Geliştirmek ...317 Programlama Dili Olarak T-SQL ... 317 Değişken Tanımlama ve Kullanma ... 318 Birleşik Operatörler ...320 Bit Seviye Operatörler ...321 Kod İçerisine Açıklamalar Eklemek ...322 Global Değişkenler ve Sistem Fonksiyonları ... 322 Yığın Kavramı ve GO bölümleyicisi ... 323

Print Komutu ... 324 Tablo Tipi Değişkenler Kullanmak ...325 DML ifadeden Çıktı Veri Almak ...325 Akış Kontrolleri ... 327 IF ... ELSE Karar Yapısı ... 328 CASE Deyimi ...330 CASE ile PIVOT Gerçeklemek ... 331 While Döngüsü ...332 BREAK Komutu ... 332 CONTINUE Komutu ... 333 Cursorlerle Veri Yönetimi ... 333 Transact-SQL Sunucu Cursor'ler ... 334 Cursor'lerin Seçeneklerini Ayarlamak ... 340 Cursor'lerle Satırları Dolaşmak ... 340

Cursor Üstünden Kayıtları Düzenlemek ...341 Ortak Zamanlı (Concurrent) çalışma ve Cursor'ler ... 342

Veritabanı Atölyesi 5.1 ... 342

15. ÜNİTE: Stored Procedure'ler ...345

Stored Procedure'lerle Çalışmak ... 345

Stored Procedure'ler Oluşturmak ... 349 Stored Procedure'ü Çalıştırmak... 350 NOCOUNT Oturum Parametresi'nin Kullanımı ... 352

(24)

Stored Procedure'leri Yönetmek ... 353 Stored Procedure'lerde Değişiklik Yapmak ... 353

Stored Procedurelerde Parametrelerle Çalışmak ... 356

Girdi Parametreler (Input Parameter)... 356 Girdi Parametre ile Stored Procedure Çağırmak ... 356 Tablo Tipi Parametre Alan Stored Procedure'ler Kodlamak ... 358 Parametre Geçerliliğini Denetlemek ... 359 Çıktı Parametrelerle Çalışmak ... 361 Çıkış Parametrelerini Almak ... 361 RETURN deyimi ... 362 Modül Çalıştırma Bağlamları: EXECUTE AS ... 364 EXECUTE AS CALLER ... 365 EXECUTE AS 'kullanici' ... 365 EXECUTE AS SELF ... 366 EXECUTE AS OWNER ... 366

Veritabanı Atölyesi ... 367

16. ÜNİTE: İleri T-SQL Programlama ...369

SQL Server 2008 T-SQL Ortamını Etkin Kullanmak ... 369

Dinamik SQL Çalıştırmak ... 369 EXEC Fonksiyonu ile Dinamik SQL Çalıştırmak ... 370 sp_executesql ile Dinamik Sorgu Çalıştırmak ... 372 T-SQL'de Hata Yakalama Mimarisi ... 373 Sistem Mesajları: sys.messages ... 373 Sisteme Yeni Mesaj Eklemek ... 374 Sistemden Kullanıcı Tanımlı Mesaj Silmek ... 376 Hata Mesajlarını Kullanmak: RAISERROR ... 376 Parametreli Hata Mesajları Tanımlamak ... 378 Oluşan Son Hatanın Kodunu Yakalamak: @@ERROR ... 379 Hata Kontrolü ve TRY-CATCH Yapısı ... 381 Uygulama için Veritabanı Hata Yakalama Mimari Tasarımı ... 382 dbo.tbHataGecmis Tablosu ...383 sp$HataYakala Stored Procedure'ü ...383 sp$HataYazdir Stored Prosedürü ...384 Hata Yakalama Mimarisi Kullanım Örneği ...385 Veritabanı Atölyesi ... 386 17. ÜNİTE: Kullanıcı Tanımlı Fonksiyonlar ...387

Kullanıcı Tanımlı Fonksiyonlarla Çalışmak ... 387

Kullanıcı Tanımlı Fonksiyonlarla Neler Yapabiliriz ... 388 Skaler Kullanıcı Tanımlı Fonksiyonlar ... 388 Türetilmiş Sütun Olarak Skaler Fonksiyon ... 390

(25)

Satırdan Tablo Döndüren Fonksiyonlar ... 391 Çoklu İfade ile Tablo Döndüren Fonksiyonlar ... 392 Rekürsif Sorgu için Örnek Fonksiyon ... 393 Tablolarla Tablo Tipi Fonksiyonları Bileştirmek: APPLY ... 395 CROSS APPLY ... 396 OUTER APPLY ... 397 Veritabanı Atölyesi ... 397

Bölüm Sonu Özeti ... 398 Bölüm Sonu Tekrar Soruları ... 398

6. Bölüm

XML İLE ÇALIŞMAK

18. ÜNİTE: Tip Olarak XML ...399

XML Desteği ... 399

Hibrit Veritabanı Gereksinimi ...400

XML Veri Tipini Kullanmak ... 401

Değişken ve Parametre Olarak XML Tipi ... 402 Tablolarda XML Veri Tipi ... 402 Tip Tanımsız XML Veri İle Çalışmak ... 403 Tip Tanımlı XML Veri İle Çalışmak ... 403 XSD ve Schema Collections Nesneleri... 403 Şemalar Hakkında Bilgi Almak ...405 Tip Tanımlı XML Sütunlar Oluşturmak ...406 İlişkisel Seviye XML Tanımlamaları Kullanmak ... 408

Kısıtlanmış (Constrainted) XML Veri Kullanmak ... 408 XML Veri Üstünde Hesaplanmış Sütun Tanımlamak ...408

XML Veriyi Yönetmek ve Sorgulamak ... 408

Bir Bakışta XML Sorgu Dili: XQuery ... 409 XML Veri Tipi Metodları ... 413 xml.query (string XQuery) ... 413 xml.exist (string XQuery) ... 415 xml.value (string XQuery, string SQLVeriTipi) ... 415 xml.nodes (string XQuery) ... 416 XML Veriyi Düzenlemek: xml.modify() ... 418 insert İfadesi ile Yeni Bilgi Eklemek ... 419 delete İfadesi ile Bir Bilgi Silmek ... 420 replace value of İfadesi ile Düğüm Üstünde Düzenlemeler Yapmak ... 420 Veritabanı Atölyesi ... 421

(26)

XML Sütunlarda Indeks Tanımlamak ... 422

Birincil XML Indeks Oluşturmak ... 422 İkincil XML Indeks Oluşturmak ... 423 Değer Temelli XML Indeksler ... 423 Yol Temelli XML Indeksler ... 423 XML Sütunlar Üstünde Hesaplanmış Alan ve İlişkisel Indeksler Tanımlamak ... 424 Veritabanı Atölyesi ... 425 19. ÜNİTE: XML-İlişkisel Dönüşümler ...427

İlişkisel-XML Veri Dönüşümleri ... 427

OPEN XML ... 427 FOR XML ... 430 RAW Mod ile XML Veri Çekmek ... 431 AUTO Modda XML Veri Çekmek ... 432 EXPLICIT (Bilinçli) Modda XML Veri Çekmek ... 434 PATH Modda XML Veri Çekmek ... 436 Veritabanı Atölyesi ... 438

Bölüm Sonu Özeti ... 439 Bölüm Sonu Tekrar Soruları ... 439

7. Bölüm

ORTAK ZAMANLILIK VE TRANSACTION

20. ÜNİTE: Transaction'larla Çalışmak ve Ortak Zamanlılık ...441

Transaction ve Ortak Zamanlılık ... 441

Transaction Bloğu Nasıl Ele Alınır? ... 443 Transaction Kavramı ve Transaction Modlarını Anlamak ... 443 Harici (Explict) Transaction Modunda Çalışmak ... 444 Harici Transaction Yönetimi ... 444 TRY-CATCH Yapısı ile Transaction Hatası Yakalamak ... 445 Sabitleme Noktaları (Save Points) ... 447 Dahili (Implicit) Transaction Modu ve Yönetimi ... 448 Ortak Zamanlılığı ve İzolasyon Seviyelerini Anlamak ... 448 İzolasyon Sağlamak ... 448 Ortak Zamanlı (Concurrent) Erişim Anomalileri ... 449 İzolasyon Seviyeleri ... 450 Snapshot izolasyon Seviyesi ve Satır Versiyonlama ... 455 Transaction Bazlı Snapshot İzolasyon ... 456 İfade Bazlı Snapshot İzolasyon ... 458 Snapshot İzolasyonun Kazanım ve Maliyetleri ... 459 Veritabanı Atölyesi ... 459

(27)

21. ÜNİTE: Kilitlenmeleri Yönetmek ...461

Kilitlemeleri Yönetmek ... 461 Kilitlemeleri Gözlemlemek ... 461

Management Studio ile Kilitlenmeleri Takip Etmek ve Process Öldürmek ... 464

Zaman Aşımı Ayarlamak ... 465 Tablo Seviyeli Kilitlemeler ... 466

Kilitleme İpucu Vermek ... 466

Kilitleme Çıkmazı: Deadlock ... 467

Veritabanı Atölyesi ... 468 22. ÜNİTE: Triggerlar ...469

TRIGGER'LARI KAVRAMAK ... 469 Trigger Ne Zaman Kullanılmalıdır ... 470 Trigger Ne Zaman Kullanılmamalıdır ... 471

Klasik Trigger'ın Özellikleri ve Kısıtlamaları ... 471 Trigger'lar Nasıl Çalışır? ... 472

TRIGGER OLUŞTURMAK ... 472 INSERT Trigger'i ... 475 DELETE Trigger'i ... 477 UPDATE Trigger'i ... 478 INSTEAD OF Trigger'ı ... 480 KOMPLEKS TRIGGER'LAR ... 482 Nested Trigger'lar Tanımlamak ... 482 Recursive Trigger Tanımlamak ... 483 DDL Trigger'lar ... 483

Veritabanı Seviye DDL Trigger'larla Çalışmak ... 484 Sunucu Seviyeli DDL Trigger'lar ... 487

TRIGGER YÖNETİMİ... 488 Trigger'ları Silmek ... 488

Veritabanı Seviyeli DDL Trigger'ları Silmek ... 489 Sunucu Seviyeli DDL Trigger'ları Silmek ... 489

Trigger'ları Tepkimeye Kapatmak ... 489

Veritabanı Atölyesi ... 490

Bölüm Sonu Özeti ... 491 Bölüm Sonu Tekrarı ... 491

(28)

8. Bölüm

SQL SERVER İÇİNDE CLR

23. ÜNİTE: CLR Genel ...493

CLR ile Çalışmak ... 493 SQL Server İçerisinde CLR ... 495

Assembly Kavramı ... 496 Kodların Kaynak Erişim Hakları ... 496 .NET Assembly'leri SQL Server'a Yüklemek ... 497 T-SQL ile CLR Arasında Seçim Yapmak ... 501 Veritabanında Assembly Yönetimi ... 502 Assembly'ler Hakkında Bilgi Almak ... 502 Assembly'leri Değiştirmek ve Silmek ... 503 Assembly'ler Üstünde Değişiklik Yapmak...503 Assembly'nin İçeriğini Değiştirmek ...503 Assembly'nin Seçeneklerini Değiştirmek ...504 Assembly Değişikliğinin Verilere Etkisi ... 505 Assemblylere Ek Kaynaklar Eklemek ve Çıkartmak ...505 Assembly'leri Silmek ...506 SQL Server için CLR Bileşenler Programlamak ... 507 Visual Studio'da SQL Server Projesi Oluşturmak ... 507 Veritabanı Atölyesi-8.1 ... 510 24. ÜNİTE: Basit Rutinler ...511

SQL Server içerisinde Basit CLR Rutinleri Kodlamak ... 511

SQL Server için CLR Kütüphanelerini Anlamak ... 511 T-SQL ve CLR Tip Geçişi: System.Data.SqlTypes ... 512 SQL CLR için Veri Sağlayıcıları ... 513

SqlContext ...514 SqlConnection...515 In-Process (Dahili İşlem) ve Out-Of-Process (Harici İşlem) Kavramları ... 515 SqlCommand ...517 SqlParameter ...517 SqlPipe ...518 SqlDataReader ...520 SqlDataRecord ...520 SqlTransaction ...521 System.Transaction ...522 SqlTriggerContext ...522 CLR Stored Procedure'ler Oluşturmak... 522 CLR'da RETURN Deyimi ile SP'den Değer Döndürmek ... 524 Stored Procedure'ler ile Transaction Kullanımı ... 526 CLR Trigger'larla Çalışmak ... 526

(29)

CLR Kullanıcı Tanımlı Fonksiyonlar Oluşturmak ... 528 Skaler Tipli Kullanıcı Tanımlı Fonksiyonlar... 530 Veritabanı Atölyesi ... 532 25. ÜNİTE: İleri Rutinler ...533

CLR ile İleri Rutinler Kodlamak ... 533

Tablo Tipli Kullanıcı Tanımlı Fonksiyonlar Kodlamak ... 533 Kullanıcı Tanımlı Grupsallar Oluşturmak ... 535 Serializable Kavramı ve Gereksinimi ... 537 CLR Kullanıcı Tipleri Oluşturmak ... 540 Veritabanı Atölyesi ... 544

Bölüm Sonu Özeti ... 545 Bölüm Sonu Tekrar Soruları ... 545

9. Bölüm

VERİTABANI YETENEKLERİNİ GELİŞTİRMEK

26. ÜNİTE: Bağlı Sunucularla Çalışmak ...547

Dağıtık Sunucularla Bağlantı Tanımlamak ... 547

Bir Bağlı Sunucu Tanımlama ve Yönetme ... 548 Bağlı Sunucularda Güvenlik ve Erişim ... 550

Dağıtık Sorgularla Çalışmak ... 551

Bağlı Sunucular Üstünden Dağıtık Sorgular Çalıştırmak ... 551 Dağıtık Sorgularda Transaction ve MSDTC... 553 Doğaçlama Dağıtık Sorgular (Ad-Hoc Distributed Queries) ... 553

Veritabanı Atölyesi ... 554

27. ÜNİTE: İlişkisel Olmayan SQL Server Yetenekleri...555

HierarchyID Veri Tipini Anlamak ... 555

Hiyerarşik veriye kavramsal bakış ... 555 HierarchyID Veri Tipi ve Metotları ... 556 Hiyerarşik Veriyi Eklemek ... 557 Bir Düğümün Atalarını Listelemek ... 558 Bir Düğümün Çocuklarını Listelemek ... 560 Bir Düğümün Ana Düğümünü Değiştirmek ... 560 Bir Seviyedeki Düğümleri Döndürmek ... 561 Bir Düğümün Altına Düğüm Eklemek ... 562

Uzaysal Veri Türlerini Anlamak ... 563

(30)

Uzaysal Veri Tiplerine Genel Bakış ... 564 Uzaysal Veri Tipleri Metotları... 565 Uzaysal Veriyi Kaydetmek ... 566 Uzaysal Veriyi Sorgulamak ... 567 Alan Bulmak ... 567 Kesişim Bulmak ... 568 Mesafe Bulmak ... 569 Veritabanı Atölyesi ... 570 28. ÜNİTE: Service Brokers ...571

Service Brokers Mimarisini Anlamak ... 571

Service Broker Altyapısının Sağladığı Bazı Önemli Özellikleri ... 573 Bir Veritabanında Service Broker Desteğini Açmak ... 573

Service Broker Nesnelerini Anlamak ... 574

Service Broker Nesneleri ... 574 Type ... 574 Contract ... 575 Queue ... 576 Service Program ... 577 Service ... 577 Servisleri Konuşturmak ... 577 Dialog (Diyalog) Nesnesi ve Mesajlaşmayı Anlamak ... 577

Service Broker Uygulaması Gerçeklemek ... 579

Gerekli Nesnelerin Oluşturulması ... 580 Kullanıcı Kayıt İşlemleri Servisinin Kodlanması ... 580 E-Posta Servisinin Bileşenlerinin Kodlanması ... 582 Servislerin Aktifleştirilmesi ... 587 Servislerin Çalışmalarının Test Edilmesi ve Gözlemlenmesi ... 587 Veritabanı Atölyesi ... 588

Bölüm Sonu Özeti ... 589 Bölüm Sonu Tekrarı Soruları ... 589

10. Bölüm İSTEMCİ TARAFTA SQL SERVER ERİŞİMİ PROGRAMLAMA

29. ÜNİTE: ADO.NET Temelleri ...591

İstemci Taraf Veritabanı Uygulamaları Geliştirmek ... 591 ADO.NET 2.0'ı Kavramak ... 592

(31)

SqlConnection ... 594 Bağlantı Havuzlama (Connection Pooling) ... 596 SqlCommand ile Veri Yönetimi... 596 SqlDataReader ve SqlServer'dan Veri Çekmek ...598 SqlParameter ...599 SQL Server 2005'de MARS Desteğini Kullanmak ...602 Yoğun Veri Kopyalamak: SqlBulkCopy ...604 Veri Değişimini Yönetmek ... 606 SqlTransaction ile İstemci Taraflı Transaction Yönetimi ...608 CLR Kullanıcı Tanımlı Tipleri İstemci Tarafta Kullanmak ...612 Xml.XmlReader Sınıfı ve İstemci Tarafta Bağlantılı XML İşlemleri ...613

Veritabanı Atölyesi ... 616

30. ÜNİTE: ADO.NET'de Kopuk Veri Yönetimi ...617

Offline (Kopuk) Veri Erişim Modeli ... 617

DataSet Nesne Modelini Anlamak ... 618 DataTable ve Veritabanından Veri Çekmek...619 DataTable'larda Veri Bütünlüğü ve Constraint'ler ... 620 DataSet içerisinde Birden Fazla DataTable İlişkilendirme ve Relations Kavramı ... 621 SqlDataAdapter ile Kopuk Modelde Veri Erişimi ... 622 Kopuk Modelde Veri Değişimini Yönetmek ... 625 DataTable Açısından Veri Değişimi ...625 Değişimleri Veritabanına Geri Yansıtmak ...627

ASP.NET Uygulamaları ve Veri Bağlamaya Hızlı Bakış ... 630

Veritabanı Atölyesi ... 637

31. ÜNİTE: SQL Server Management Objects'i Kullanmak ...639 SMO Nesne Modelini tanımak ... 640 SMO Nesne Modelini Uygulamalarda Kullanmak ... 640 Server Nesnesininin Özelliklerini Almak ... 642 SMO ile Veritabanında Nesneleri Yönetmek ... 644 Yeni Bir Nesne Oluşturmak ...644 Var Olan Nesneyi Değiştirmek ...645 Nesne Silmek ...645 SMO Utility Class'ları Kullanmak ... 646 Veritabanı Atölyesi ... 647

Bölüm Sonu Özeti ... 648 Bölüm Sonu Tekrar Soruları ... 648

(32)

EK A

VERİTABANI PROGRAMCILARINA İPUÇLARI

SQL SERVER'DAN DAHA FAZLA YARARLANMAK ... 649

Veri Sunum Katmanı Hakkında ... 649 Veri Erişim Katmanı Hakkında ... 649 Veritabanı Yönetimi ... 649 SQL Server'in Diğer Yetenekleri Hakkında ... 650

Reporting Services ... 650 Veri Ambarlama ve OLAP ... 650 SQL Server Integration Services (SSIS) ... 650 XML Sütunları Full-Text Aramaya açmak ... 651

SQL SERVER'DE VERİ ALIŞVERİŞİ ... 651

Veri Dosyalarıyla Veritabanını Taşımak: Attach-Deattch ... 652 Uygulama Verilerini Yedeklemek ve Yedekten Geri Dönmek Hakkında ... 652 BCP ile Metin Dosyalarından Veri Alışverişi ... 655 SQL Server Import and Export Wizard Kullanarak Veri Aktarımı ... 657 Replication ... 660

SQL Server 2000 veya 2005 Veritabanını SQL Server 2008'e Aktarmak Hakkında ... 661

Aktarım Seçenekleri ... 661

GÜVENLİK VE YETKİLENDİRME HAKKINDA ... 663

Genel Güvenlik Önlemleri ... 663 Hassas Bir Uygulama için Veritabanı Güvenlik Kontrol Listesi ... 664 SQL Enjeksiyonu ve Karşı Önlemler ... 665 Tektırnak Saldırılar ...665 Hata Verdirmeye Dayalı Saldırılar ...666 Stored Procedure Kullanan Saldırılar ...667 Genel SQL Enjeksiyon'larından Korunma Tedbirleri ...668 Sadece İyileri Kabul Etmek ... 668 Kötüleri Reddetmek ... 668 Kötüleri Filitreleyerek Kabul Etmek ... 668

EK B

C# VE OOP KILAVUZU

C# İLE PROGRAMLAMAYA GİRİŞ KILAVUZU ... 669

C# ile Merhaba Dünya... 669 Sınıflar Yazmak ... 670 Değişkenler Değerler ve Veri Tipleri ... 672 Tür Dönüşümleri ...674 Değer ve Referans Tipler Arası Dönüşüm: Boxing ve Unboxing ... 675

(33)

Döngüler ve Karar Yapıları ...675 if-else Karar Yapısı ... 676 for Döngü Yapısı ... 676 while Yapısı ... 676 Nesnelerle Çalışmak ... 676

Sınıflarda Erişim Seviyelerini Anlamak ... 677 Yapıcı (Constructor) Kavramını Anlamak ... 679 Metodları Aşırı Yüklemek ... 681 Static Kavramını Anlamak ... 682 Özetle Nesneye Dayalı Programlama ... 684 3n Katmanlı Mimari ve Sınıfların Rolü ... 685 Üç Katmanı Tasarlamak ... 685 İş Katmanını Tasarlamak... 686 Sunum Katmanını Tasarlamak ... 691 EK C: BÖLÜM SONU SORU CEVAPLARI ...695 EK D: DÜKKAN VERİTABANI ŞEMASI ...705

EK E

CD KULLANIM KILAVUZU

CD Kullanım Kılavuzu ... 707

Araçlar ... 707 SQL Server Express Edition ... 707 SQL Server 2008 Bileşenleri ... 707 Örnek Veritabanları ve Kurulumları ... 707 SQL Server Veritabanı Sürüm Yükseltme Kılavuzu ... 708 Çalışma Dökümleri ... 708

Kaynakça ... 709 Dizin ... 711

(34)

Giriş

Kitap kapsamında veri işleme ile ilgili iki temel standarttan bahsedilmekte; SQL ve XML. SQL veritabanı sorgulamak için kullanılan bir dil olup, ANSI tarafından kabul edilmiş bir standarttır. Standardın tam metnini farklı yıllardaki gözden geçirilmiş halle-riyle birlikte, ANSI'den satın alabilirsiniz. Bunun için http://webstore.ansi.org adresinde SQL kelimesini aratın ve çıkan ekrandan dilediğiniz standart için karşılığı olan ücreti ödedikten sonra PDF dosyasına sahip olabilirsiniz. Standartların bazılarına ücretsiz de ulaşabilirsiniz. Genel olarak SQL, veritabanı yönetim sistemine verilerle ilgili ifadeleri bildirmek ve sonuçlarını almak için kullanılabilen bir standart tanımıdır.

XML, yazılım ve donanımdan bağımsız veri taşıma ve saklama standardı olup eXtensible Markup Language (Genişletilebilir İşaretleme Dili) kelimelerinden elde edilmiş bir kısaltma-dır. XML ile işaretlenmiş bir bilgi, bir cep telefonunda bir PC'de gösterildiği kadar kolay göste-rilebilir. XML ayrıca farklı platformlarda çalışan uygulamalar arasında veri paylaşımı için ve HTML'den arındırılmış olarak bilgilerin Web'e açılması için de kullanılır. XML de verinin gö-rünümü ve sunumu ile ilgilenen işaretleme dili HTML (Hiper Metin İşaretleme Dili) gibi SGML (Standard Generalized Markup Language)'den türetilmiştir. SGML çok geniş bir dil olduğundan Web'de tam olarak kullanılması oldukça zordur. Bu nedenle bu türden geliştir-melere gidilerek amaca özel kısıtlı elemanlardan oluşan işaretleme dilleri elde edilmiştir. XML standardının son haline www.w3c.org/TR/XML adresinden ücretsiz olarak ulaşabilirsiniz.

Veritabanı Programlama Hakkında

Herhangi bir dil (C#, VB.NET, Delphi, C++, Java…) ile yazılmış ve en basitinden düz metin dosyasına erişip içerisinde verilerini saklayan ve daha sonra erişip bu verileri oku-yan uygulama bir veritabanı uygulamasıdır. En gelişmiş anlamda veritabanı uygulaması, milyonlarca satırdan oluşan tabloları yöneten ve raporlayan uygulamalardır. N katmanlı yaklaşımda en alt katmana Veri katmanı denir ve bu katman veritabanına karşılık gelir. Uygulamalarda veritabanı kullanılmasındaki temel hedef, veri ile onu işleyen yazılımının birbirinden soyutlanması ve veri erişimi, raporlama gibi işlemlerin hızlandırılmasıdır. Ve-ritabanı ayrıca veriye erişimi izne bağlar ve veri güvenliğini sağlar.

Genellikle, kurumların çeşitli kaynaklardan ürettikleri verileri yönetmelerini sağlamak üzere geliştirdikleri uygulamalar, verilerini veritabanı ortamında saklar. Veritabanı orta-mı, üstüne inşa edilen uygulamanın verilere daha hızlı erişmesini, raporlamasını sağlaya-rak performans artışı ve kolay veri yönetim ortamı sağlar.

Kurumsal ihtiyaçlar çerçevesinde geliştirilen programlar için yazılan kodların dışında, ve-ritabanı ile etkileşim ve veve-ritabanı seviyesinde karar mekanizması geliştirme gibi amaçlar için veritabanı programlama kullanılır. Güncel veritabanı programlamada kullanılan ve-ritabanı seviyeli diller, SQL, XML ve Nesne sorgulama dili standartları çerçevesinde şe-killenmiştir.

Kitabın İçerdiği Örnekleri Test Edebilmek İçin

"Yazılımcılar için MS SQL Server 2008 ve Veritabanı Programlama" kitabının içerdiği örnekleri test edebilmek için, sisteminizde standart olarak kurulumu yapılmış SQL

(35)

Ser-ver 2008 Developer Edition olması yeterlidir. Yer yer, Books Online(kısaca BOL) adı ve-rilen SQL Server 2008 yardım kitabına atıfta bulunulmuş olabilir. Kitapta ele alınan pro-jeye ait dosyaları, CD içeriğinde bulabileceğiniz gibi, destek sayfalarından indirebilirsiniz. Ayrıca www.microsoft.com/sql adresinden ücretsiz indirebileceğiniz 180 günlük(ki yarım yıl demek) ücretsiz SQL Server 2008 Enterprise Edition da kitap içeriğini test etmek için fazlasıyla yeterli bir SQL Server sürümüdür.

Kitapta verilen kodlamalar, aksi belirtilmediği sürece 'Management Studio' adı verilen SQL Server istemci aracının Query ekranları kullanılarak test edilebilir.

Birikim Gereksinimleri

Kitap içeriği, programlama dünyasına yeni adım atmış ve Microsoft temelli yazılım geliş-tirme ortamını öğrenmeyi amaçlamış okurlar için düzenlenmiştir. Bunun dışında bir veri-tabanı yönetim sistemi için temel bilgileri verebilecek bir kitap olsa da ek bir adaptasyon süreci gerektirebilir.

Kitap içeriği, SQL dışında bir uygulama geliştirme dili gerektiğinde bunun C# olması durumuna göre düzenlenmiştir. Bu nedenle C# dili hakkında yüzeysel bir birikiminizin olması, kitap kapsamını bir çırpıda sindirebilmeniz için faydalı olabilir. Daha önce bir dil ile uygulama geliştirdiniz ama C# size biraz yabancı geliyorsa, kitabın ek kısımları size yol gösterecektir. Hiçbir dil bilmeden bu kitaba başlıyorsanız, yer yer bir C# kitabı ile des-teklenmesinde yarar olabilir.

Kimlere Hitabediyor

Kitap, ASP.NET ve/veya .NET ile SQL Server 2008 üstünde uygulama geliştirenlere hi-tap etmektedir. Bilgisayar Mühendisliklerinde okutulan 'Veritabanı Yönetim Sistemleri', Endüstri Mühendisliklerinde veya Yönetim Bilişim Sistemlerinde okutulan 'Veritabanı Tasarımı ve Gerçekleme' derslerine asıl veya yardımcı kitap olarak kullanılması müm-kündür. Ayrıca, programlama dünyasından daha önce haberdar olan ve programlamaya bir orta ve büyük ölçekli veritabanını uygulaması tasarlamayı çözerek başlamak isteyen-lere yol göstermek üzere hazırlanmıştır.

Ancak kitap programlama hakkında hiçbir altyapısı olmayanlar için hazırlanmış ve her şeyi hiçbir şey bilmeyen biri için en baştan alan bir kaynak değildir. Programlama hak-kında hiç bir deneyiminiz olmaması halinde, kitabın kapsamı sizin için ağır ve anlamsız gelebilir.

Yine, bir uygulama geliştirmek isteyenler için, bu kitabı tek başına yeterli kaynak olarak görmek iyi bir seçim olmaz. Kitap, bir veritabanına bağlı uygulama geliştirmenin ağırlıklı olarak veri katmanını, fikir verecek kadar da veri erişim katmanını ele almaktadır. Diğer katmanlar için başka kaynaklarla birlikte takip edilmesi gerekebilir.

Farklı Başlangıç Önerileri

Kitabı yapacağınız işe ve birikiminize göre farklı noktalardan başlayarak okuyabilirsiniz. Bu konuda aşağıdaki tablo size yol göstermek üzere düzenlenmiştir.

(36)

Yaptığınız-

yapacağınız iş Bilmeniz gerekenler Daha Önceden Kitabı kullanmak için öneri

Başlangıç Seviye SQL Server 2005-2008 Verita-banı Programcısı

İlişkisel Veritabanı

Hakkında genel bilgi 1. İlk üç bölüm sizi veritabanı ortamına alıştıracaktır. 2. Ek-A'daki teknikler veri taşımanızı kolaylaştırabilir. İleri - Orta Seviye SQL

Server 2005-2008 Verita-banı Programcısı

SQL Server 2000 veya eşdeğeri bir VTYS ile proje geliştirmiş olmak

1. SQL Server 2005 yenilikleri hakkında fakir sahibi değilseniz ilk 3 bölüme göz atın 2. Takip eden 4 bölümden ihtiyacınız olanları okuyun

3. C# veya eşdeğeri bir dil bilmiyorsanız EK-B'yi okuyun 4. 8. Bölümü okuyun

5. Veritabanı ortamında servis temelli bileşenler kurgulamanız gerekiyorsa 9. bölümü

okuyun.

6. İstemci taraf uygulamalar geliştirme konusunda fikir edinmek için 10. bölümü okuyun

Raporlama Uzmanı Raporlama Ortamınızı

Kullanmak 1. SQL Server 2008'e veya İlişkisel Veritabanı Kavramına yabancı iseniz 1.bölüme göz atın

2. SQL ifadelerini yazmakta güçlük çekiyorsanız 3. Bölümü okuyun 3. Bazı sorgularınızı hızlandırmak veya basitleştirmek için 4. Bölümü okuyun 4. Sorgularınızda sunucu taraflı programatik bileşen gereksinimleriniz varsa 5. Bölümü

okuyun.

5. Sunucu taraflı bileşen ihtiyacınız arttıkça takip eden bölümlerden uygun olanlara da

göz atabilirsiniz. SQL Server 2005

Prog-ramcılar için Yenilikler SQL Server 2000 Prog-ramlamayı iyi seviyede bilmek

1. İlk bölüme göz gezdirin ve yeni eklenen servisler, eski servislerin yeni isimleri

hakkın-da fikir sahibi olun

2. 2.2'de yeni veritabanı seçenekleri hakkında

2.3'de yeni tiplerin kullanımı hakkında

2.4'de yeni veri bütünlüğü seçenekleri hakkındaki değişikliklere göz atın.

3. 3.2.3'de yer alan veri sorgulamaya dair yeniliklere göz atın 4. 3.3'ün ilk üç konusunu okuyun

5. 4.1'de parçalı tablolar bahsini okuyun 6. 4.3'de yeni indeks seçeneklerine göz atın

7. 5.2'de rutinleri başkalarının adına çalıştırmak bahsine göz atın

5.3'de TRY-CATCH yapısını öğrenin. 5.4'ün son iki başlığını okuyun

8. 6.Bölümün tamamını okuyun 9. 7.1.2'yi okuyun

10. 8.Bölümün tamamını okuyun 11. 9.Bölümün tamamını okuyun

12. 10.Bölümün ilk iki ünitesindeki yeniliklere göz gezdirin. 13. 10.3'ün tamamını okuyun.

14. Veritabanınızı SQL Server 2000'den 2005'e aktaracaksanız, EK-A'daki ipuçları

bahsine göz atın. SQL Server 2008 Yenilikler SQL Server 2005

Prog-ramcısı 1. SQL Server araçlarına göz atın. SAC'ın yeni yerini öğrenin 2. 6.Ünite'de Sparse column özelliğine bakın

3. 8.Ünite'de Tarih Zaman tipi ile ilgili yenilikleri okuyun 4. 9.Ünite'de “Gruplanmış verileri özetlemek” bahsini okuyun

5. 10.Ünite'de VALUES ifadesi ile çoklu satır üretimine ve MERGE ifadesine göz atın 6. 13.Ünite'de filtreli indekslere ve sıkıştırılmış indeks kullanımına göz atın 7. 14.Ünite'de T-SQL değişken tanımlama ve operatör yeniliklerine göz atın 8. 15.Ünite'de Tablo Tip parametre alan Stored Procedure konusuna göz atın 9. 18.Ünite'de XQuery ve let ifadesine göz atın

10. 27.Ünite'de hiyerarşik ve uzaysal veri tiplerine göz atın. XML Web Service desteği

(37)

Kitap Neler İçeriyor

Kitap genel olarak veritabanı programlama konusunu ele almakta. Konu, bir veritabanı yönetim sisteminin tanıtımı yapmaktan öte, onu bir veritabanı yönetim sistemi olarak nasıl programlayabileceğiniz noktasında ele alınmakta. Elbette veritabanı programlamaya dair ne varsa bu kadar sayfada anlatmak mümkün değil. Burada, bir veritabanı uygula-masını geliştirme sırasında gerekli bilgileri başlangıçtan itibaren aşama aşama ele alarak, basitlik ve yalınlık kısıtları dâhilinde yeni bir yazılım geliştiriciye temel veritabanı disip-linlerinin aktarılması hedeflenmekte.

Veritabanı Kavramına Giriş

Bu bölümde, temel olarak ilişkisel veritabanı kavramları ve SQL Server'ın temel bileşen-leri ele alınmakta. Arkasından gelecek bölümlerdeki ifadebileşen-leri anlayacak kadar T-SQL di-linden bahsedilmekte.

Veritabanı Tasarımı

Bu bölümde, sıfırdan bir veritabanı projesinin nasıl tasarlanacağına dair fikir edinmeye çalışa-cağız. Arkasından, bir veritabanı nesnesinin özelliklerinin belirlenmesi ele alınmakta. Son olarak, tabloların hangi kurallara göre tasarlanacağı ele alınmakta. Veritabanı tasarımı, kav-ramsal, mantıksal ve fiziksel olmak üzere üç aşamalı bir süreç içerisinde ele alınmakta.

Veri Sorgulama

Bu bölümde, bir tablodan verilerin nasıl çekilebileceğinden başlanıp, tabloların birlikte sorgulanması, verilerin özetlenmesi, CTE ile rekürsif sorguların yazılması ve verilerin sı-raya sokulması gibi işlemler ele alınmakta. Özellikle raporlar geliştirmeniz gerekiyorsa bu bölümdeki üç üniteyi kavramak sizin için elzem olabilir.

Veri Erişimini İyileştirmek

Verileri sorgularken, performans artışına gereksinim duyarız. Bu durumda alınabilecek önlemler bu bölümde incelenmekte. Yavaş çalışan raporlarınız varsa, veritabanına gelen sorguları takip etmeniz ve iyileştirme konusunda SQL Server'dan fikir almak istiyorsanız, bu bölüme göz atmanız faydalı olabilir.

T-SQL ile Programatik Öğeler Kodlamak

T-SQL dilini bir programlama dili olarak öğrenmek, böylece SQL Server 2005 içerisinde ihti-yaca binaen kodlar yazmak istiyorsanız bu bölümdeki üniteler size yol gösterecektir. Kodları-nızı veritabanında tekrardan kullanım amaçlı olarak kaydetmek ve veritabanı seviyeli kodla-rınızdaki hataları daha sonra gözlemlemek üzere takibata almak bu bölümde ele alınmakta.

XML ile Çalışmak

Veritabanında XML veri saklamak ve XML veri üstünde yapılabilen işlemlerle ilgili programatik konular bu bölümde ele alınmakta. Gerektiğinde tablolarınızdaki verileri XML'e dönüştürerek çekmek ve XML verilerinizi tablolara aktarmak da burada ele alınmakta.

(38)

Ortak Zamanlılık ve Transaction

Veritabanı içerisinde birden fazla işlemin mantıksal olarak aynı anda olmuş gibi yürüme-sini sağlamanız gerekiyorsa, transaction blokları kullanmak sizin için kaçınılmaz olacak-tır. Bu bölümde, transaction blokları oluşturmak, transaction bloklarını birbirinden izole etmek ve veri değişimlerine duyarlı T-SQL programcıkları geliştirmek ele alınmakta.

SQL Server 2008 içinde CLR

Bu bölüme başlamadan önce en azından yazılmış kodları anlamlandıracak kadar C# bilgini-zin olması gerekir. Şayet daha önce hiç C# veya benzeri bir dil ile program geliştirmedi iseniz, kitabın Ek-B kısmına göz atmanız yararlı olacaktır. Bölüm içerisinde, C# dilinin ve Micro-soft. NET ortamının T-SQL'e yardımcı bir enstrüman olarak kullanılması ele alınmakta.

Veritabanı Yeteneklerini Geliştirmek

Bu bölümde, veritabanınızdan daha fazla yararlanabilmeniz için yapabileceğiniz program-sal işlemler ele alınmakta. Bu çerçevede, SQL Server'ın bir veri yönetim merkezi olarak kullanılması ve text, Excel, Access, başka veritabanı yönetim sistemleri içerisindeki veri-leri tek bir merkezden yönetmesi için ayarlamalar yapmak ele alınmakta.

Ayrıca, SQL Server 2008 ile birlikte eklenen Hiyerarşik ve Uzaysal Veritipleri ele alınmakta. Yine bu bölümde, Servis Temelli Programlama kapsamında, birbirinden bağımsız çalışan ama gerektiğinde birbirini tetikleyen SQL Server içerisinde program blokları oluşturmayı ele alacağız.

İstemci Taraftan Veritabanı

Bu bölüm de yine 'ölmeyecek kadar' C# bilgisi gerektiren bir bölüm. İstemci taraftan ve-ritabanı erişimi konusunda yeni başlamış programcılara fikir vermek ve vizyon çizmek için kitaba eklenmiştir.

Ayrıca, SQL Server 2008'e veri dışında yönetimsel hedefler için erişimde bulunacak uy-gulamaların geliştirilmesi için gerekli kütüphaneler de bu bölümde ele alınmakta.

EK A - Veritabanı Programcılarına İpuçları

Elinizdeki kitap her ne kadar geniş kapsamlı bir veritabanı programlama kitabı olsa da, veritabanı programlama aşamasında ihtiyaç duyacağınız temel işlemlerden konunun akışı içerisinde yer verilememiş olanlar burada toparlanarak, bilginize sunulmuştur.

EK B - C# ve OOP Kılavuzu

Henüz C# ve OOP ile yeterince vakit geçirmemişseniz bu ünite size gerekli yüzeysel bil-giyi vermek üzere düzenlenmiştir.

EK C - Dükkan Veritabanı Şeması

Kitap içerisinde sürekli olarak kullanılan Dukkan veritabanının bu bölümde bir şeması verilmiştir. Yer yer bu şemaya göz atmak veritabanı yapısını kavramak adına işlerinizi ko-laylaştırabilir.

(39)

EK D - Bölüm Sonu Soru Cevapları

Kitap ekinde gelen CD'nin içeriği ve kullanımı konusunda bu bölümde bilgi bulabilirsiniz.

EK E - CD Kullanım Kılavuzu

Kitap ekinde gelen CD'nin içeriği ve kullanımı konusunda bu bölümde bilgi bulabilirsiniz.

Gösterimler ve İçerik Düzeni Hakkında

Kitap içerisinde, kodlar daktilo formatında verilmiştir. İki farklı şekilde örnek kodlar yer almaktadır: açıklama niteliğinde olan kodlar ve çalıştırılabilir kodlar. Formül-açıklama niteliğindeki kodlarda satırların başında düşey çizgi yer almamaktadır. Ayrıca, yerine bir şeyler yazmanız gereken yerler, altı çizgili olarak verilmiştir. Bunun dışında, {} arasına alınan yerler, mutlaka bir şeyler yazmanız gerektiğini gösterirken, [] içerisindeki ifadelerin isteğe bağlı olduğunu ifade eder. | işareti veya anlamında olup bir yere yazıla-bilecek alternatifleri belirtmek için kullanılmaktadır.

Bu türden kodlar doğrudan çalıştıramazsınız!

Formül seviyesindeki {gösterimler[dir]}

Çalıştırılabilir kodların başında düşey bir çizgi yer almaktadır. Ayrıca, çalıştırılabilir kod-lar içerisinde vurgulanmasında yarar görülen ifadeler koyulaştırılmak suretiyle, daha hızlı görmeniz sağlanmaya çalışılmıştır.

Çalışabilir kodları göstermektedir.

İpucu: Burada bahsedilen şey, hayati derecede önemli olmasa da programlama yaparken hayatınızı

kolaylaştıracak nitelikte olabilir veya konunun anlatımı bozmamak adına yüzeysel ele alındığını detaylarını nerede bulabileceğinizi gösterir.

Dikkat: Burada bahsedilen şeyler, hayati derecede önemlidir. Dikkat edilmemesi halinde veri

kayıpları-na neden olabilir veya tekniği tam olarak uygulayabilmeniz buraları gözden kaçırmamanıza bağ-lıdır.

Kaynak Dosyaları Destek ve Geri Bildirim

www.verivizyon.com/sql2008 adresinde kitap ve kapsamı hakkında ek bilgiler, kaynak

dosyaları ve sunumlar bulabilirsiniz.

Kitap hakkındaki fikirlerinizi doğrudan yayınevine iletebileceğiniz gibi,

(40)

Birinci Bölümden EK A'ya Kadar Olan

31 Ünite Basılı Halde

(41)
(42)

EK A

VERİTABANI PROGRAMCILARINA İPUÇLARI

Bu kısımda, veritabanını daha etkin kullanabilmek için ihtiyaç duyacağımız, ama kitap akışı içerisinde, akışı dağıtmamak adına yer verilememiş önemli hususların özeti yer almakta. Bu çerçevede SQL Server 2000 ve 2005'teki verilerinizi 2005'e aktarma konusu da ele alınmakta. Ayrıca bölüm içerisinde size çeşitli gereksinimleriniz için ufuk açmayı hedefleyen, gerek duydu-ğunuzda başka kaynaklardan detaylandırmanız gereken önemli hususlara yer verilmiştir.

SQL SERVER'DAN DAHA FAZLA YARARLANMAK Veri Sunum Katmanı Hakkında

SQL Server 2008 ile parelel zamanlarda Microsoft tarafından duyurulan Silverlight ve WPF gibi arayüz tanımlama teknolojilerini yakından takip etmenizde yarar var. Çünkü ilerleyen zamanlarda bu iki teknolojinin vektör temelli, estetik kullanıcı arayüzleri geliş-tirmekte hayli yaygın bir kullanım bulacağı öngörülmekte.

Veri Erişim Katmanı Hakkında

SQL Server'a erişim için Entity Framework adı verilen ve Microsoft tarafından geliştirilen Nesne-İlişkisel Veri Eşleme(ORM veya Object-Relational Mapping) kütüphanelerini kulla-narak kolayca erişebilirsiniz. Bu kütüphane, ilişkisel veritabanını bir nesneler kümesi imiş gibi otomatik olarak projelerinizden sorgulama ve değiştirme olanağı sağlamaktadır.

Ayrıca, Microsoft tarafından çeşitli ortamlardaki verilerin SQL'e benzer bir söz dizimi ile sorgulanması sağlayan LINQ kütüphanesini, hafızadaki bilgilerinizi sorgulamak için; bu kütüphanenin bir alt kütüphanesi olan LINQ to SQL kütüphanesini kullanarak, verita-banındaki tablolara bir nesneler kümesi gibi erişim sağlayabilirsiniz.

Bu iki kütüphaneyi özellikle şu amaç için tercih edebilirisiniz:

SQL Server verileri ilişkisel bir ortam olduğu için tablolarda tutar. C# gibi bir dil ile ge-liştirdiğiniz kullanıcı arayüzleri vs. veritabanı dışındaki kodlama ortamları genellikle nes-ne tabanlıdır ve nes-nesnes-ne temelli bir veri modeli kullanırlar. Nesnes-ne temelli veri modelinin ilişkisel temelli bir veri ortamında saklanması veya ilişkisel verinin nesne modeline dö-nüştürülmesi, program geliştirirken ek maliyet olarak karşınıza çıkar. İşte bu iki kütüp-hane, sizin yerinize nesne-tablo dönüşümlerini yaparak maliyetlerinizi azaltır.

Veritabanı Yönetimi

Veritabanında yedek alma, yedekten dönme, hata kurtarma, Replication yapılandırma, Mirroring ve Clustred olarak sunucuları paralel çalıştırma gibi konularda bilgi gereksiniminiz varsa, SQL Server Yönetimi ile ilgili bilgi kaynaklarına göz atmanızda yarar olabilir.

(43)

SQL Server'in Diğer Yetenekleri Hakkında

Notification Services ile Veri Dağıtım Abonelikleri Kurgulamak için Notification Services bileşenini yapılandırabilirsiniz. Bu servisi verilerinizdeki belli değişimlere abone olan kullanıcılarınıza olay dahilinde çeşitli kanallardan mesaj iletmek için yapılandırabi-lirsiniz. Ayrıntılı bilgi için Notification Services hakkında bir kitap okuyabilirisiniz.

Reporting Services

SQL Server 2005 için geliştirilen "Reporting Service" adlı program, SQL Server 2000 ile de uyumlu olarak kullanılabilmektedir. Bu araç sayesinde, Web Sayfası, PDF, Excel gibi ortamlara verilerin raporları aktarılabilmektedir. Ücretsiz olan bu aracı olarak rapor su-nucusu olarak kullanabilirsiniz.

Veri Ambarlama ve OLAP

Veri Ambarlama, Veri Madenciliği ve OLAP gibi konular hakkında ayrıntılı bir çalışmaya gereksinimizin varsa, bu konuda yazılmış kitaplara başvurabilirsiniz. SQL Server'in Enterprise Sürümünde yeralan Analysis Services bileşenleri bu konuda size destek olacaktır.

OLAP konusunda, ciddi bir çalışma planlıyorsanız, SQL'in yanı sıra MDX (Çok boyutlu İfadeler- multidimentional Expretions) konusunda da bilgi edinmeniz gerekecektir.

SQL Server Integration Services (SSIS)

SQL Server 7.0'dan bu yana kullanılagelen Data Transformation Services SQL Servre 2005'den itibaren yeniden şekillendirilerek SSIS adı verilmiştir. SSIS ile veri bütünleş-tirme çözümleri gelişbütünleş-tirmede kullanılır. SSIS veri birleşbütünleş-tirme ve dönüşüm paketleri oluş-turmak için grafik arayüzler, sihirbazlar ve araçlar içerir. Veri akışı paketleri programlar-ken, FTP ile veri çekme ve ver gönderme, e-mail mesajları gönderme gibi ek destekler sağlar. Ayrıca SSIS bileşenlerine, SMO gibi programsal olarak erişmek mümkündür. Şayet veritabanınıza düzenli olarak çeşitli kaynaklardan veriler aktarmanız veya rutin olarak veri dönüşümü işlemleri yapmanız uygulamanızın bir parçası olacaksa SSIS prog-ramlama konusunda ayrıntılı bilgi edinmeniz gerekebilir.

Şekil A.1: Integration Services'in diğer servislerle olan ilişkisi8

Gambar

Şekil A.1:  Integration  Services'in diğer  servislerle olan  ilişkisi 8
Şekil A.5: Verita- Verita-banındaki  veriler-de bir sorun  çıkması halinde,  alınan yedekleri  indirerek en son  yedek aldığınız  zamandaki  duru-ma geri  dönebili-risiniz
Şekil A.9:  Columns  sekme-sinden sütunları  görebilirsiniz.  Advenced  sekme-sinden sütunların  adını ve tipini,  sütun silme
Şekil B.1:  MerhabaCsharp  projesinin  başla-tılması  Şekil B.2:  İlk C#  programı-nın çalıştırılması
+2

Referensi

Dokumen terkait

Oleh karena itu, Kami menyusun Kebijakan Privasi ini untuk menjelaskan kepada Anda bagaimana Kami memperoleh, mengumpulkan, mengolah, menganalisis, menggunakan, menyimpan,

7.1 Kelab adalah tertakluk kepada semua peraturan dan undang-undang yang telah dikeluarkan oleh kerajaan, Kementerian Pendidikan, Jabatan Pendidikan, Sekolah dan Persatuan Pencinta

Problematika mendasar pengolahan makanan yang dilakukan masyarakat lebih disebabkan budaya pengelohan pangan yang kurang berorientasi terhadap nilai gizi, serta

Kondisi optimum untuk ekstraksi flavonoid total dari daun jati belanda yang diperoleh pada penelitian ini adalah konsentrasi pelarut 70%, nisbah bahan baku- pelarut 1:10, dan

Temperatur kerja pada mesin penetas telur menggunakan temperatur 38-39°C yang agak sedikiti lebih tinggi suhu nya dibandingkan dengan suhu 37,8°C pada saat awal umur

Bahwa dalam rangka pembangunan di bidang perhubungan Dinas Perhubungan Kota Denpasar telah melaksanakan tugas pokok dan fungsinya dengan baik, sesuai dengan

Tulisan ini mengemukakan suatu perancangan kompensasi riak frekuensi rendah pada teknologi converter dc ke dc terkendali menggunakan pengendali proposional dan intergrator

Alat dalam melakukan pengelasan sangat banyak, tergantung dari kebutuhan, untuk apa di gunakan, dan dimana penggunaannya, hal ini harus di perhatikan karena, apabila salah dalam