Yaşar Gözüdeli
YAZILIMCILAR İÇİN
SQL SERVER 2008
ve
VERİTABANI PROGRAMLAMA
4. BASKI Ankara, 2009Yazı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ı:
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.
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.
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
Ö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!.
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
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
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
İç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 ...39TEMEL VERİTABANI KAVRAMLARI ... 39
İlişkisel Veritabanı Kavramı ... 40
İ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
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ış ...89Kavram 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
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
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
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
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
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 ...251VIEW'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
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
İ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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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.
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.
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,
Birinci Bölümden EK A'ya Kadar Olan
31 Ünite Basılı Halde
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.
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