Veritabanı Yönetim Sistemleri Ders Notları PDF

Document Details

ConciliatoryRomanArt

Uploaded by ConciliatoryRomanArt

Düzce University

2024

Serdar KIRIŞOĞLU

Tags

database management systems database concepts t-sql sql server

Summary

This document is lecture notes for a Database Management Systems course. It covers various aspects of relational databases, NoSQL databases, T-SQL queries, and SQL Server Management Studio, including key concepts like tables, columns, rows, and primary and foreign keys. The document provides technical information related to database management.

Full Transcript

Veritabanı Yönetim Sistemleri Ders Notları Dr. Öğr. Üyesi Serdar KIRIŞOĞLU 08.11.2024 İÇİNDEKİLER VERİTABANI YÖNETİM SİSTEMLERİ 3 1. VERİTABANI KAVRAMLARI...

Veritabanı Yönetim Sistemleri Ders Notları Dr. Öğr. Üyesi Serdar KIRIŞOĞLU 08.11.2024 İÇİNDEKİLER VERİTABANI YÖNETİM SİSTEMLERİ 3 1. VERİTABANI KAVRAMLARI 3 1.1. VERİTABANI NEDİR 3 1.2. VERİTABANI YÖNETİM SİSTEMİ (VTYS) 3 1.3. İLİŞKİSEL VERİTABANI 4 1.4. NOSQL VERİTABANI 9 1.5. VERİTABANINI KİMLER KULLANIR? 9 1.6. VERİTABANI TASARIMI 11 1.7. İLİŞKİSEL VERİTABANININ KAVRAMSAL TASARIMI 11 1.8. İLİŞKİSEL VERİTABANININ MANTIKSAL TASARIMI 17 1.9. VERİTABANI YÖNETİM SİSTEMLERİNDE (VTYS) FİZİKSEL TASARIM 17 1.10. NORMALİZASYON 19 1.11. NORMALİZASYON ÖRNEK 21 1.12. BÖLÜM SONU DEĞERLENDİRME SORULARI 27 1.13. BÖLÜM SONU DEĞERLENDİRME CEVAPLARI 30 2. T-SQL İLE VERİTABANI İŞLEMLERİ 31 2.1. T-SQL VERİ TÜRLERİ 32 2.2. DEĞİŞKENLER 35 2.3. USE GO DEYİMİ 37 2.4. OPERATÖRLER 38 2.5. FONKSİYONLAR 39 2.6. AÇIKLAMALAR 40 2.7. AKIŞ KONTROL MEKANİZMALARI 40 2.8. DDL (DATA DEFİNİTİON LANGUAGE ) 45 2.9. DML (DATA MANİPULATİON LANGUAGE ) 54 2.10. DQL (DATA QUERY LANGUAGE ) 58 2.11. ALT SORGULAR SUBQUERİES 68 2.12. BÖLÜM SONU DEĞERLENDİRME SORULARI 70 2.13. BÖLÜM SONU DEĞERLENDİRME CEVAPLARI 73 3. SQL SERVER MANAGEMENT STUDİO İLE VERİTABANI İŞLEMLERİ 74 3.1. İNDİRME VE KURULUM 74 3.2. SSMS İLE VERİTABANI SUNUCUSUNA BAĞLANMAK 77 3.3. SSMS İLE VERİTABANI OLUŞTURMA 78 3.4. VERİTABANI SUNUCUSU İÇİN LOGIN OLUŞTURULMASI 80 3.5. VERİTABANI SUNUCUSUNDA VERİTABANI İÇİN KULLANICI OLUŞTURULMASI 85 3.6. TABLO OLUŞTURMA 92 3.7. TABLOLARA VERİ EKLENMESİ 104 3.8. TABLOLARDAN VERİ SİLİNMESİ 104 3.9. SORGU OLUŞTURULUMASI 106 3.10. VERİTABANI YEDEĞİNİN ALINMASI 109 3.11. VERİTABANININ YEDEKTEN GERİ YÜKLENMESİ 114 3.12. VERİTABANI İÇİN YEDEK OLUŞTURMA PLANLAMASI 116 3.13. BÖLÜM SONU DEĞERLENDİRME SORULARI 122 3.14. BÖLÜM SONU DEĞERLENDİRME CEVAPLARI 126 1 4. VIEW’LAR 128 4.1. VİEW NEDİR? 128 4.2. VİEW OLUŞTURMA 128 4.3. VİEW KULLANIMI 128 4.4. VİEW GÜNCELLEME VE SİLME 129 4.5. FİLTRELENMİŞ VİEW 129 4.6. HESAPLAMALI VİEW 129 4.7. İÇ İÇE VİEW 130 4.8. BÖLÜM SONU DEĞERLENDİRME SORULARI 131 4.9. BÖLÜM SONU DEĞERLENDİRME CEVAPLARI 133 5. SAKLI YORDAM (STORED PROCEDURE) 134 5.1. SAKLI YORDAM OLUŞTURULMASI 135 5.2. C# İLE SAKLI YORDAM KOD ÖRNEĞİ 144 5.3. BÖLÜM SONU DEĞERLENDİRME SORULARI 146 5.4. BÖLÜM SONU DEĞERLENDİRME CEVAPLARI 149 6. TRIGGER KULLANIMI 151 6.1. TRİGGER NEDİR 151 6.2. TRİGGER TÜRLERİ 151 6.3. TRİGGER OLUŞTURMA 151 6.4. TRİGGER ÖRNEKLERİ 152 6.5. TRİGGER KULLANIM SENARYOLARI 154 6.6. TRİGGER PERFORMANSI VE DİKKAT EDİLMESİ GEREKENLER 154 6.7. TRİGGER HATALARI VE SORUN GİDERME 155 6.8. BÖLÜM SONU DEĞERLENDİRME SORULARI 156 6.9. BÖLÜM SONU DEĞERLENDİRME CEVAPLARI 159 7. ÖRNEK PROJE 160 7.1. ÖRNEK VERİTABANI OLUŞTURULMASI 160 7.2. KUZEYYELİ VERİTABANI KODLARI 170 2 VERİTABANI YÖNETİM SİSTEMLERİ 1. VERİTABANI KAVRAMLARI 1.1. VERİTABANI NEDİR Verilerin yapılandırılmış bir şekilde depolanmasını ve yönetilmesini sağlayan bir yazılım sistemidir. Bir veritabanı, verilerin güvenli, düzenli ve erişilebilir bir şekilde depolanmasına izin verir ve bu verilerin işlenmesine, sorgulanmasına ve güncellenmesine olanak tanır. Bir veritabanı, genellikle bir veya daha fazla veri tabanı yönetim sistemi (DBMS) kullanılarak oluşturulur ve yönetilir. Veritabanları, çeşitli veri türleri (sayılar, metin, resimler, vb.) için alanlar veya sütunlar içeren tablolardan oluşur. Veriler, bu tablolara kaydedilir ve her bir veri öğesi, benzersiz bir tanımlayıcı olan bir anahtar tarafından tanımlanır. Veritabanları, birden fazla tabloyu birbirine bağlayarak, farklı veri öğeleri arasındaki ilişkileri yönetebilir. Veritabanları, birçok farklı uygulama alanında kullanılır, örneğin finansal işlemler, stok yönetimi, müşteri bilgileri, e-ticaret, ürün kataloğu ve daha birçok alanda. Veritabanları, verilerin yapılandırılmış bir şekilde depolanmasını sağlayarak, veri işleme işlemlerinin daha hızlı ve daha verimli bir şekilde gerçekleştirilmesine olanak tanır. 1.2. VERİTABANI YÖNETİM SİSTEMİ (VTYS) Verilerin depolanması, yönetimi ve sorgulanması için kullanılan bir yazılım sistemidir. VTYS, verilerin güvenliği, bütünlüğü ve kullanılabilirliği için gereken araçları sağlar. VTYS, bir veya birden çok kullanıcının verilere erişimini kontrol eder ve verilerin tutarlılığını sağlamak için işlemlerin sırasını yönetir. VTYS'ler, veritabanı yöneticisi (VTY) tarafından kurulur, yapılandırılır ve yönetilir. VTY, veri tabanının yapısını ve özelliklerini tanımlar, veri erişimi ve kullanımını yönetir ve verilerin yedeklemesini alır. VTY ayrıca, veri tabanının performansını izler ve ayarlamalar yaparak en yüksek performansı sağlar. VTYS, birçok farklı veri tabanı türüne uygun olarak tasarlanmıştır. İlişkisel veri tabanı yönetim sistemleri (RDBMS) en yaygın kullanılan veri tabanı türlerindendir ve örneğin MySQL, Oracle ve Microsoft SQL Server gibi birçok ticari ve açık kaynaklı VTYS mevcuttur. Diğer veri tabanı türleri arasında belge tabanlı veri tabanları, grafik veri tabanları ve anahtar-değer veri tabanları yer alır. VTYS, birçok avantaj sunar. Veri tabanları, verileri tutarlı bir şekilde tutmak için tasarlanmış olduğundan, verilerin daha doğru, daha güvenli ve daha güncel kalmasını sağlar. VTYS, verilerin daha hızlı ve daha kolay erişilebilmesini sağlar ve aynı zamanda verilerin daha kolay sorgulanmasına ve analiz edilmesine olanak tanır. Ancak VTYS kullanımı, bazı zorluklar da sunar. Veri tabanı tasarımı ve yapılandırması, uzmanlık gerektirir ve veri tabanı yönetimi için özel beceriler gerektirir. VTYS'ler, diğer yazılım sistemleriyle entegre edilmeleri gerektiğinde, uyumluluk sorunlarına neden olabilirler. Özet olarak, veri tabanı yönetim sistemi, verilerin güvenliği, bütünlüğü ve kullanılabilirliği için gereken araçları sağlayan bir yazılım sistemidir ve veri tabanı yöneticileri tarafından kurulur, yapılandırılır ve yönetilir. 3 Günümüzde en çok kullanılan iki veritabanı yaklaşımı vardır bunlar İlişkisel Veritabanı (Relational Database) ve NoSQL (Not only SQL) veritabanı, farklı veri yapısı ve işleme mantığına sahip olan iki farklı veritabanı yönetim sistemi türüdür. 1.3. İLİŞKİSEL VERİTABANI İlişkisel veritabanı, tablo halindeki verileri kullanır ve bu tablolardaki verilerin birbirleriyle ilişkisini belirler. Bu veriler, sütunlar ve satırlar halinde oluşturulur ve veriler arasındaki bağlantılar, anahtarlar ve birincil anahtarlar aracılığıyla gerçekleştirilir. İlişkisel veritabanları, verilerin yapısal olarak tutarlılığını korur, tutarlı bir veri işleme yöntemi sunar ve SQL (Structured Query Language) adı verilen bir standart veri sorgulama dili kullanır. İlişkisel veritabanları, finansal işlemler, stok yönetimi ve işletme kaynakları planlaması (ERP) gibi yapısal ve yüksek hacimli verilerin yönetimi için idealdir. 1.3.1. Temel Kavramlar Aşağıda, veri tabanı kavramlarına ilişkin bazı temel bilgiler verilmiştir. 1.3.1.1. Tablo ( Table ) Veri tabanlarında verileri tutmak için kullanılan yapısal birimlerdir. Tablolar, sütunlar ve satırlar şeklinde düzenlenmiştir ve bir veya daha fazla anahtar sütunu kullanarak diğer tablolara bağlanabilirler. 1.3.1.2. Sütun ( Column ) Tablolardaki verilerin farklı özelliklerini temsil eden dikey yapısal birimlerdir. Her sütun, bir veri türüne sahip olabilir ve her bir sütun bir alan adı veya sütun adı ile tanımlanır. 1.3.1.3. Satır ( Row ) Tablolardaki verilerin her bir örneğini temsil eden yatay yapısal birimlerdir. Her satır, birincil anahtar veya benzersiz tanımlayıcı alan kullanarak diğer tablolara bağlanabilir. 1.3.1.4. Anahtar ( Key ) Veri tabanlarında farklı tablolar arasında ilişki kurmak için kullanılan bir sütundur. Anahtar, birincil anahtar veya ikincil anahtar olarak işlev görebilir ve diğer tablolara bağlanabilir. 1.3.1.5. Birincil Anahtar ( Primary Key ) Bir tablodaki her bir kaydı benzersiz bir şekilde tanımlayan bir veya daha fazla sütundan oluşan bir kümedir. Birincil anahtar, bir tablodaki her bir kaydın benzersiz olarak tanımlanmasını sağlar ve bu nedenle diğer tablolarla ilişkilendirilebilir. Birincil anahtar ayrıca, verilerin doğruluğunu sağlamak ve yinelenen kayıtları önlemek için de kullanılır. Birincil anahtar, bir tablodaki herhangi bir sütuna uygulanabilir, ancak genellikle tek sütunlu bir anahtar olarak uygulanır. Birden fazla sütundan oluşan birincil anahtarlar da mümkündür ve bu durumda, her bir sütunun değeri birleştirilerek benzersiz bir tanımlayıcı oluşturulur. 1.3.1.6. Yabancı Anahtar ( Foreign Key ) Bir tablodaki bir veya daha fazla sütunun, başka bir tablodaki birincil anahtar sütunu ile ilişkilendirilmesi işlemidir. Bu işlem, iki tablo arasındaki bir ilişki kurulmasına olanak tanır. Yabancı anahtar, bir tablodaki kayıtların, diğer tablodaki kayıtlarla ilişkilendirilmesini sağlar. Yabancı anahtarın uygulandığı sütun, diğer tablodaki birincil anahtar ile aynı veri tipine sahip olmalıdır. Yabancı anahtar, verilerin bütünlüğünü korumak ve hatalı veri girişlerini önlemek için kullanılır. Örneğin, bir müşteri tablosunda birincil anahtar olarak kullanılan müşteri numarası sütunu, siparişler tablosunda yabancı 4 anahtar olarak kullanılabilir. Bu sayede, siparişler tablosunda her bir siparişin hangi müşteriye ait olduğu bilgisi tutulabilir ve herhangi bir müşteri numarası olmayan sipariş kaydı engellenebilir. 1.3.1.7. Tekil Anahtar ( Unique Key ) Bir tablodaki sütunların benzersiz olmasını sağlayan bir kısıtlama türüdür. Tekil anahtar, birincil anahtarın yerini alamaz, ancak birincil anahtar ile benzer özelliklere sahiptir. Tekil anahtar, bir veya daha fazla sütuna uygulanabilir ve bir tablodaki kayıtların benzersiz olmasını sağlar. Tekil anahtarın uygulandığı sütun, aynı değerlerin birden fazla kez kullanılmasını önler. Bu nedenle, veri bütünlüğünün korunması ve yinelenen kayıtların önlenmesi için kullanılır. Örneğin, bir müşteri tablosunda müşteri e- posta adresi sütunu için bir tekil anahtar uygulayabilirsiniz. Bu sayede, aynı e-posta adresiyle kayıtlı birden fazla müşteri kaydı oluşmasını önleyebilirsiniz. 1.3.1.8. SQL ( Structered Query Language ) Veri tabanı yönetimi için kullanılan bir programlama dili olan SQL, veri tabanlarında veri ekleme, güncelleme, silme ve sorgulama işlemleri yapmak için kullanılır. 1.3.1.9. T-SQL (Transact-SQL) Microsoft SQL Server veritabanı yönetim sistemleri için geliştirilmiş bir SQL (Structured Query Language) türevidir. T-SQL, SQL standardına dayanır ancak Microsoft SQL Server özelliklerine özgü bir dizi eklenti içerir. T-SQL, veritabanı oluşturma, sorgulama, yönetme ve güncelleme işlemlerini gerçekleştirmek için kullanılır. T-SQL, SQL Server Management Studio gibi araçlarla kullanılabilir ve stored procedure, trigger, fonksiyon, view ve diğer veritabanı nesnelerinin oluşturulmasını ve yönetimini destekler. T-SQL, büyük ölçekli veritabanı uygulamalarının geliştirilmesinde ve yönetiminde sıkça kullanılmaktadır. 1.3.1.10. Yedekleme ( Backup ) Veri kaybını önlemek için, veri tabanlarındaki verilerin düzenli olarak yedeklenmesi önerilir. Yedekleme işlemi, veri tabanı yöneticileri tarafından gerçekleştirilir ve verilerin bir yedeği oluşturulur. Bu temel kavramlar, veri tabanı yönetimi için gereklidir ve veri tabanı uygulamalarının tasarımı ve yönetimi için önemlidir. İlişkisel veritabanında tablolar arasındaki ilişki kavramını detaylandırmakta fayda var. Bu ilişkiler kısaca aşağıda verilmiştir. İleriki bölümlerde nasıl oluşturulacağı hakkında örnek kodlar ve örnek bir veritabanı tasarımıda bulacaksınız. 1.3.1.11. DML, DDL ve DQL DML (Data Manipulation Language), DDL (Data Definition Language) ve DQL (Data Query Language) veritabanı işlemlerini ifade eden üç farklı kavramdır. DML (Data Manipulation Language): Veri Manipülasyon Dili olarak da bilinir. DML, veritabanı üzerinde veri ekleme, güncelleme, silme veya sorgulama gibi veri manipülasyon işlemlerini gerçekleştirmek için kullanılan bir dildir. DML komutları, INSERT (veri ekleme), UPDATE (veri güncelleme), DELETE (veri silme) gibi işlemleri gerçekleştirmek için kullanılır. Örneğin, bir tabloya yeni bir kayıt eklemek için INSERT INTO, mevcut bir kaydı güncellemek için UPDATE veya belirli bir koşulu sağlayan kayıtları silmek için DELETE komutları kullanılır. DDL (Data Definition Language): Veri Tanımlama Dili olarak da bilinir. DDL, veritabanı nesnelerini tanımlamak, değiştirmek veya silmek için kullanılan bir dildir. DDL komutları, tablolar, indeksler, sütunlar, kısıtlamalar gibi veritabanı nesnelerini oluşturmak, değiştirmek 5 veya silmek için kullanılır. DDL komutları arasında CREATE (oluşturma), ALTER (değiştirme) ve DROP (silme) gibi komutlar bulunur. Örneğin, yeni bir tablo oluşturmak için CREATE TABLE, bir tabloya yeni bir sütun eklemek için ALTER TABLE veya bir tabloyu silmek için DROP TABLE komutları kullanılır. DQL (Data Query Language): Veri Sorgulama Dili olarak da bilinir. DQL, veritabanından veri sorgulamak için kullanılan bir dildir. DQL komutları, veritabanından veri çekmek ve veritabanı üzerinde sorgular çalıştırmak için kullanılır. DQL'in en yaygın kullanılan komutu SELECT komutudur. SELECT komutu, belirli bir tablodan veya tablolardan veri çekmek ve sorgulamalar gerçekleştirmek için kullanılır. DQL komutları ile verileri filtrelemek, sıralamak, gruplamak ve sonuçları sınırlamak gibi işlemler gerçekleştirilebilir. Bu şekilde, DML, DDL ve DQL kavramları veritabanı işlemlerini tanımlayan üç farklı dilin kısaltmalarını ifade eder. Her bir dil, farklı türde işlemleri gerçekleştirmek için kullanılır. 1.3.1.12. İlişkiler ( Relationships ) Veri tabanları arasında ilişki kurmak için kullanılır. İlişkiler, tablolardaki bir veya daha fazla anahtar sütununa dayanır ve tablolar arasında veri bütünlüğünü sağlar. İlişkisel veritabanında tablolar arasındaki ilişkiler aşağıdaki gibi olabilir: Bire-Bir İlişki (One-To-One Relationship) İki tablo arasındaki ilişki türlerinden biridir. Bu ilişki türünde, birinci tablodaki her bir kayıt yalnızca ikinci tablodaki bir kayıtla eşleşebilir ve aynı şekilde ikinci tablodaki her bir kayıt yalnızca birinci tablodaki bir kayıtla eşleşebilir. Yani her iki tablodaki her kayıt yalnızca tek bir kayıtla eşleştirilir. Bu nedenle, bire bir ilişki de "tek-eşleştirme" ilişkisi olarak da adlandırılır. Bir-bir ilişkisi genellikle, veritabanında tutulan bilgilerin doğruluğunu sağlamak ve tekrarlanan verileri önlemek için kullanılır. Örneğin, bir müşteri kaydı veritabanında, her müşteri yalnızca bir fatura adresine sahip olabilir. Bu durumda, müşteri tablosu ile fatura adresi tablosu arasında bire bir bir ilişki kurulabilir. Bire bir ilişki, birincil anahtar/yabancı anahtar ilişkisi kullanılarak oluşturulur. İlk tablodaki birincil anahtar, ikinci tablodaki yabancı anahtarla eşleştirilir ve böylece iki tablo arasındaki bire bir ilişki kurulmuş olur. Aşağıdaki şekilde bire bir ilişki içeren bir örnek gösterilmiştir. Şekil 1. Bire Bir Tablo Mantıksal Tasarımı Burada Ogrenci tablosundaki (soldaki) bazı bilgileri Ogrenci Detay tablosunda (sağdaki) tutulmuştur. Her bir öğrenci için öğrenci detay tablosunda bir değer bulunabilir çünkü her ikisinin de birincil anahtarı olan OgrID sütunları birbirine ilişkilendirilmiştir. Bire bir tabloların kullanımı hakkında kafalarda soru 6 işareti kalabilir bu neden aynı tablolar için konuşacak olursak diyelimki Ogrenci tablosuna bir kayıt daha eklendi ama öğrencinin adres bilgileri henüz net değil. Şayet biz bu detay bilgilerini öğrenci tablosunda tutsaydık bu alanlar “null” yani boş değer olarak geçilecekti. İleriki bölümlerde değineceğimiz veri türlerinin hafızada kapladığı alan düşünülecek olursa bellek yönetimi açısında bu önemli bir ilişki türüdür. Bire Çok İlişki (One-To-Many Relationship) Bir tablodaki bir kaydın, diğer tabloda birden fazla kayda karşılık geldiği ilişkidir. Bu ilişki türü, birincil anahtar-yabancı anahtar kavramıyla sağlanır ve bir tablo ile diğer tablo arasında bağlantı kurar. Bire çok ilişki, veritabanındaki birçok senaryoda kullanılır. Örneğin, bir müşteri tablosu ile siparişler tablosu arasındaki ilişki bire çok ilişkidedir. Bir müşteri birçok sipariş verebilir, ancak her bir sipariş yalnızca bir müşteriye aittir. Bu ilişki türünde, bir tablodaki birincil anahtar, diğer tablodaki yabancı anahtar olarak kullanılır. Bu sayede, iki tablo arasındaki ilişki tanımlanabilir ve veriler arasındaki tutarlılık sağlanabilir. Bire çok ilişkide, diğer tabloda birincil anahtar olmayan sütunlar da yer alabilir ve bu sütunlar birincil tablodaki kayıtlarla ilişkili olabilir. Aşağıdaki şekilde ise bire çok ilişkiye örnek verilmiştir. Şekil 2. Bire Çok Tablo Mantıksal Tasarımı Burada ise Ogrenci tablosunun VeliID alanı Veli Tablosunun birincil anahtarı olan VeliID alanına bağlandığı için bir velinin birden çok öğrencisi olabileceği anlamına gelmekte ve bire çok ilişkiyi temsil etmektedir. Örneğin 1 numaralı velinin Serdar ve Ahmet isimli öğrencilerin velisi olduğu anlaşılmaktadır. Çoka Çok İlişki ( Many-To-Many Relationship) Birden fazla tablonun birbirine bağlı olduğu, daha karmaşık bir ilişki türüdür. Bu ilişki türünde, her bir tablonun birden fazla kaydı, diğer tablolardaki birden fazla kayıtla ilişkili olabilir. Çoka çok ilişki, veritabanındaki birçok senaryoda kullanılır. Örneğin, bir müzik mağazası, albümler, sanatçılar ve şarkılar tablolarını içerebilir. Albümler tablosu, birçok şarkıya sahip olabilir ve aynı şarkılar farklı albümlerde yer alabilir. Aynı şekilde, bir sanatçı birden fazla albüm yayınlayabilir. Bu ilişki türünde, birincil anahtar-yabancı anahtar kavramı kullanılarak, birleştirme (join) tabloları oluşturulur. Birleştirme tabloları, iki veya daha fazla tablonun ortak noktasını içerir ve bu tablolar arasındaki ilişkiyi sağlar. Örneğin, yukarıdaki müzik mağazası senaryosunda, birleştirme tabloları, albümler ve şarkılar arasındaki ilişkiyi sağlar. Albüm şarkıları (Album Songs) tablosu, her bir albümün içerdiği şarkıları ve her şarkının hangi albüme ait olduğunu içerir. Aynı şekilde, sanatçı albümleri (Artist Albums) tablosu, her bir sanatçının yayınladığı albümleri ve her albümün hangi sanatçıya ait olduğunu içerir. 7 Aşağıdaki şekilde çoka çok ilişkiye örnek verilmiştir. Şekil 3.Çoka Çok Tablo Mantıksal Tasarımı Bu tablolardan OgrDers Tablosu (ortadaki) birleştirme tablosunun ( aynı zamanda pivot tablo olarakta bilinir ) OgrID ve DersID alanları birlikte birincil anahtar olarak belirlenmiştir. Bu nedenle 1-1 diye bir kayıt varken 1-1 olarak ikinci bir kayıt bu tabloya girilemez. Böylelikle tekrarlanan bir kaydın önüne geçilmiş olur. Bu tablolardan anlaşılacağı üzere bir dersi birden çok öğrenci alabiliyorken bir öğrencide birden çok ders alabilir. Özyineli İlişki ( Recursive Relationship ) Bir tablo içindeki kayıtların kendileriyle ilişkili olduğu özel bir ilişki türüdür. Bu tür bir ilişki, ağaç veya hiyerarşi yapısı gibi özellikleri olan verileri modellemek için kullanılır. Recursive ilişkide, bir tablonun birincil anahtar sütunu, aynı tablodaki başka bir kaydın yabancı anahtarı olarak kullanılır. Bu sayede, bir kayıtın kendisiyle ilişkili olduğu bir hiyerarşi oluşturulabilir. Örneğin, bir işyeri çalışanları tablosu, her bir çalışanın bir amire sahip olduğu bir hiyerarşiye sahip olabilir. Bu durumda, her bir çalışanın tablosu, birincil anahtar olarak kendisini içerecek şekilde tasarlanabilir ve her bir kayıtta bir amirin yabancı anahtarını içerebilir. Recursive ilişkilerin uygulanması, bir SQL sorgusu için bazı zorluklar oluşturabilir. Bu nedenle, recursive ilişkiler için bazı veritabanı yönetim sistemlerinde özel sorgu dilindeki (örneğin, Oracle veritabanı için CONNECT BY) özellikler kullanılabilir. Aşağıdaki şekilde bu ilişkiye bir örnek verilmiştir. Şekil 4. Özyineli İlişki Tablo Mantıksal Tasarımı 8 Bu örnekte tablo kendi kendine ilişkilendirilmiştir ve OgrID ile Sinif Baskani alanları birbirine bağlanmıştır. Şu konumda iken bire çok olarak recursive bir ilişkiden söz edilirken çoka çok olarak da recursive ilişki oluşturulabilir. Örneğin Birey tablosunda hem çocukların hem ebeveynlerin olması durumunda ebeveynid gibi bir alan Birey tablosunda bulunması durumu. Bu ilişkiler, veritabanının tasarımında çok önemlidir ve verilerin doğru ve tutarlı bir şekilde saklanmasını sağlar. 1.4. NOSQL VERİTABANI NoSQL veritabanları, yapısal olarak farklı veri tiplerini depolamak için tasarlanmıştır. Veriler, tablo halinde değil, belge, anahtar-değer çifti veya grafik gibi farklı yapılar halinde depolanır. NoSQL veritabanları, genellikle daha ölçeklenebilir ve yüksek performanslıdır. Ayrıca, NoSQL veritabanları, veri işleme hızının yüksek olduğu uygulamalar için idealdir, örneğin sosyal ağlar, büyük veri, IoT (Nesnelerin İnterneti) ve bulut tabanlı uygulamalar. Özetle, ilişkisel veritabanı ve NoSQL veritabanı farklı veri yapıları ve işleme mantığına sahip oldukları için, her biri farklı uygulama senaryoları için daha uygun olabilir. İlişkisel veritabanları daha yapısal ve önceden tanımlanmış veri tipleri için uygunken, NoSQL veritabanları daha esnek ve ölçeklenebilir veriler için daha uygun olabilir. 1.5. VERİTABANINI KİMLER KULLANIR? Birde Veritabanı kullanıcılarından söz etmek gerekir. Bunlar veritabanı yöneticileri, veritabanı uygulama geliştiricileri ve son kullanıcılar olmak üzere 3’e ayrılırlar ve he rbirinin görev ve yetkileri farklıdır. 1.5.1. Veritabanı Yöneticileri Veritabanı yöneticileri, bir veritabanı sistemi üzerindeki işlemleri yöneten ve denetleyen kişilerdir. Bu kişiler, veritabanı yönetimi ve bakımı ile ilgili görevleri yerine getirirler ve veritabanı sistemini oluşturan tüm bileşenlerin sorunsuz çalışmasını sağlarlar. Veritabanı yöneticilerinin görevleri arasında şunlar yer alır: Veritabanı Kurulumu Veritabanı yöneticileri, veritabanı yazılımını kurar ve yapılandırır. Kurulum sırasında, veritabanı yöneticileri, veritabanı sistemini yapılandırmak için gerekli olan parametreleri belirlerler. Veritabanı yedekleme ve geri yükleme Veritabanı yöneticileri, veritabanının düzenli yedeklerini alır ve olası bir veri kaybı durumunda veritabanını geri yüklerler. Güvenlik Yönetimi Veritabanı yöneticileri, veritabanı sistemine erişen kullanıcıların hesaplarını yönetir ve güvenlik politikalarını uygularlar. Bu, veritabanı nesnelerine erişim yetkilerinin atanması ve sınırlanması, parola politikalarının belirlenmesi ve kullanıcı hesaplarının yönetimi gibi konuları içerir. Performans izleme ve Optimizasyonu Veritabanı yöneticileri, veritabanı sistemi performansını izler ve veritabanı nesnelerinin optimize edilmesi için gereken işlemleri gerçekleştirirler. Bu, veritabanı indekslerinin oluşturulması, veri toplama 9 ve istatistiklerin analizi, veritabanı sorgularının optimize edilmesi ve veritabanı sunucusunun fiziksel donanımının izlenmesi gibi konuları içerir. Veritabanı Güncelleme Veritabanı yöneticileri, veritabanı sistemine eklenen yeni özellikleri veya yamaları uygularlar. Veritabanı yöneticileri veritabanı yönetimi konusunda deneyimli kişilerdir ve genellikle bilgisayar bilimleri veya bilgi teknolojileri gibi ilgili alanlarda lisans veya yüksek lisans derecesine sahiptirler. Ayrıca, veritabanı yöneticilerinin, veritabanı yönetimi konusunda sertifikalara sahip olmaları da yaygındır. 1.5.2. Veritabanı Uygulama Geliştiricileri Veritabanı uygulama geliştiricileri, bir yazılım uygulamasının veritabanı ile etkileşimini tasarlayan, geliştiren ve yöneten yazılım mühendisleri veya geliştiricilerdir. Bu kişiler, bir uygulamanın veritabanı tarafındaki ihtiyaçlarını anlayarak, veritabanı şemaları, tablolar, görünümler, depolanan prosedürler, tetikleyiciler ve diğer veritabanı nesnelerini oluştururlar. Veritabanı uygulama geliştiricileri, veritabanı yönetim sistemlerini (DBMS) kullanarak, bir uygulamanın veritabanına veri eklemek, veri sorgulamak, veri güncellemek, veri silmek gibi işlemleri gerçekleştirirler. Ayrıca, bir uygulamanın veritabanı sistemiyle ilgili performans optimizasyonu, veri bütünlüğü, güvenlik ve yedekleme işlemlerini de yürütmekle sorumludurlar. Veritabanı uygulama geliştiricileri, genellikle bir programlama dili (örneğin, Java, C#, Python, vb.) veya bir framework (örneğin,.NET, Laravel, Ruby on Rails, vb.) kullanarak, bir uygulamanın veritabanı tarafındaki gereksinimlerini kodlayarak gerçekleştirirler. Bu kişiler, uygulamanın veritabanı şemasının oluşturulması, veritabanı sorgularının yazılması, depolanan prosedürlerin, tetikleyicilerin ve diğer veritabanı nesnelerinin oluşturulması gibi işlemleri gerçekleştirirler. 1.5.3. Sorgu Dili Kullanıcıları Veri tabanı üzerinde önceden belirlenmiş rutin uygulamalar dışındaki işlemleri gerçekleştirmek için genellikle sorgu dili (SQL) kullanılır. DML ve DDL dilleri sorgu amaçlı olmamalarına rağmen çoğu zaman SQL’in bir parçası olarak görülürler. Sorgu Dili Kullanıcıları DML komutlarını kullanabilir, fakat DDL’i sadece VT Yöneticisi kullanır. SQL doğal dile yakın, kolay öğrenilen ve kolay kullanılan bir dildir (yine de biçimsel bir dildir). Bu dili kullanacak kişinin, veri tabanının ilgili alt şemasının içeriğini (alt şemada hangi çizelgelerin bulunduğunu, çizelgelerin adlarını, her çizelgede hangi niteliklerin bulunduğunu, niteliklerin adları ve özelliklerini,... vb.) ve sorgu dilinin; yapısını bilmesi gerekir. Dolayısıyla sorgu dilini kullanacak kişinin bir bilişim uzmanı olmasına gerek yoktur, ancak veritabanının içeriği ile sorgu dilinin yapısını bilen, bu konularda eğitilmiş, bilinçli bir kişi olması gerekir. Sorgu dili kullanıcıları genellikle yönetimin alt ve orta kademelerinde görev yapan kişilerdir. Bunların dışında, sorgu dilleri sistem çözümleyici, sistem tasarımcı, uygulama programcısı, veri tabanı sorumlusu gibi bilişim teknik personeli tarafından da çok kullanılır. 10 1.5.4. Veritabanı Son Kullanıcıları Son kullanıcılar, uygulamaların kullanıcılarıdır ve uygulama arayüzleri üzerinden veritabanı sistemine erişirler. Bu kullanıcılar, veritabanı yönetimi veya kodlama konularında bilgi sahibi olmayabilirler ancak veritabanı sistemine ilişkin yetkilendirme ve erişim haklarına sahip olabilirler. 1.6. VERİTABANI TASARIMI Öncelikle veritabanı tasarımı üç ana aşamaya ayırabiliriz: kavramsal, mantıksal ve fiziksel tasarım. Bu aşamalar, veritabanı geliştirme sürecinde farklı soyutlama seviyelerinde çalışarak veritabanının yapısını ve işlevselliğini belirlemeye yardımcı olur. ▪ Kavramsal Tasarım (Conceptual Design) Amaç: Veritabanının genel yapısını belirlemek ve kullanıcı gereksinimlerini anlamaktır. Bu aşamada, veriler ve bu veriler arasındaki ilişkiler belirlenir. Araçlar: Kavramsal tasarım için genellikle ER (Entity-Relationship) Diyagramları kullanılır. Özellikler: Verilerin hangi varlıklardan oluştuğu, bu varlıkların hangi özelliklere sahip olduğu ve varlıklar arasındaki ilişkiler tanımlanır. ▪ Mantıksal Tasarım (Logical Design) Amaç: Kavramsal modeli, belirli bir veritabanı yönetim sistemine (DBMS) bağımlı olmayan mantıksal bir yapıya dönüştürmektir. Bu aşama, verilerin nasıl düzenleneceğini belirler. Araçlar: Veritabanı şeması, ilişkisel modelleme bu aşamada kullanılır. Özellikler: Tablolar, sütunlar, anahtarlar (birincil ve yabancı anahtarlar), kısıtlamalar, normalizasyon gibi kavramlar üzerinde çalışılır. ▪ Fiziksel Tasarım (Physical Design) Amaç: Mantıksal tasarımı, veritabanı yönetim sistemine özgü fiziksel bir yapıya dönüştürmektir. Verilerin nasıl depolanacağı ve erişileceği optimize edilir. Araçlar: Fiziksel depolama aygıtları, indeksler, partisyonlama, tampon bellek gibi unsurlar dikkate alınır. Özellikler: Performans optimizasyonu, veri erişim hızı ve depolama verimliliği gibi konulara odaklanılır. Bu üç aşama, veritabanının hem işlevsel hem de performans açısından başarılı bir şekilde tasarlanmasını sağlar. Projenin tasarım aşamasında veri tabanı tasarımı çok iyi yapılmalıdır. Daha sonra yapılacak değişiklikler sorunlar çıkartabilir veya çok zahmetli olabilir. Aşağıda veri tabanı tasarımı yapılırken izlenecek adımlar verilmiştir. 1.7. İLİŞKİSEL VERİTABANININ KAVRAMSAL TASARIMI Kavramsal tasarım, veritabanında tutulacak verilerin daha üst seviyede gösterilmesi için kullanılır. Kavramsal tasarım için en çok kullanılan model ER (Entity Relationship-Varlık İlişki) modelidir. Varlık ilişki modeli bir tür veri modeli olmasına rağmen bugüne kadar hiçbir VTYS'de kullanılamamıştır. Buna 11 karşılık varlık-ilişki modeli kavramsal tasarım için kullanılan en popüler modeldir. Bu model kullanılarak, VTYS'den bağımsız modelleme yapılarak ve ilişkiler tanımlanarak herhangi bir VTYS veritabanına dönüştürülebilir. Varlık-ilişki modelinde kullanılan şekiller veritabanlarının şematik olarak tasarlanması için kullanılır. Varlık-ilişki modelinde temel üç öğe vardır. 1.7.1. Varlık Modelin en temel öğesidir. Var olan ve benzerlerinden ayırt edilebilen her şey varlıktır. Örneğin, kitap, öğrenci, araba birer varlıktır. Birden fazla varlığın oluşturduğu kümeye varlık kümesi denilir. Model içerisinde varlık kümesi dikdörtgen ile gösterilir ve içerisine varlığın ismi yazılır. Veritabanı olarak düşünülürse her bir tablo bir varlık kümesidir. Bir varlık tek bir değere sahipse tek değerli nitelik olarak isimlendirilir ve yukarıda gösterildiği gibi kullanılır. Örneğin, bir öğrencinin numarası bir tanedir bu nedenle öğrenci numarası niteliği tek değerli bir niteliktir. Bazı durumlarda bir nitelik birden fazla değer içerebilir. Örneğin, bir personel birden fazla yabancı dil bilebilir. Bu durumda personel varlık kümesinin yabancı dil niteliği çok değerli bir niteliktir. Çok değerli nitelikler çift çizgili oval ile gösterilir. 1.7.2. Nitelik Varlıkların her bir özelliği bir nitelik olarak ifade edilir. Örneğin öğrencinin numarası ve bölümü öğrenci varlığının nitelikleridir. Model içerisinde nitelikler oval ile gösterilir ve içerisine niteliğin ismi yazılır. Nitelik bağlı olduğu varlığa düz bir çizgi ile birleştirilir. Veritabanı olarak düşünülürse tablonun her bir sütunu bir varlığı gösterir. Bir niteliğin değeri her bir varlık için farklıysa bu nitelik anahtar nitelik olarak belirlenir. Anahtar nitelik şema içerisinde niteliğin altı çizilerek gösterilir. Örneğin, her bir öğrenci varlığı farklı öğrenci numarası niteliklerine sahip olacağı için öğrenci no niteliği anahtar nitelik olarak belirlenebilir. Domain: Niteliklerin alabileceği değer aralığıdır. Örneğin, öğrenci notlarını içeren sınav niteliği için alacağı değerleri 0 ile 100 arasında belirlemek etki alanı oluşturmaktadır. Etki alanı ER şeması içerisinde gösterilmez. 1.7.3. İlişki Farklı varlıklar arasındaki ilişkileri ifade eder. Örneğin, öğrenci ve dersler ayrı varlık kümeleridir ama öğrenciler ders almak zorunda olduğu için iki varlık arasında ders alma ilişkisi vardır. Model içerisinde ilişkiler baklava dilimi ile gösterilir ve içerisine ilişkin isimler yazılır. Baklava dilimi ilişkili olduğu varlıklarla düz çizgi ile bağlanır. Tablolar arasında kurulan ilişkiler (1-n, 1-1, n-m) model içerisinde ilişki olarak geçmektedir. İki varlık kümesi arasında birden fazla ilişki bulunabilir. 12 1.7.4. Varlık İlişki Modeli Şeması İçin Kullanılacak Şekiller Aşağıda varlık ilişki modelinin şemasında kullanılacak olan şekiller gösterilmiştir. 13 1.7.5. Varlık Kümesi Personel Varlık Kümesi. (Personel tek başına varlıktır nitelikleriyle beraber varlık kümesi olarak adlandırılır) Burada Görev Ad Maaş nitelik Yabancı_Dil çok değerli nitelik ve Personel_ID ise anahtar niteliktir. 14 1.7.6. Bire-Bir İlişki ER Diyagramı Aşağıda bire bir ilişki için ER diyagram örneği verilmiştir. Bu ilişki türü için daha önceki bölümlerde detay verilmiştir. Ancak sözel olarak ifade etmek gerekirse bir öğrenci bir tane detaya sahiptir. 1.7.7. Bire Çok İlişki Er Diyagramı Bire çok ilişki için varlık ilişki diyagramı örneği aşağıda verilmiştir. Yukarıda verilen bire çok ilişkide Ogrenci varlığının VeliID niteliği Veli varlığında VeliID niteliği ile ilişkili bir durumdadır ve aynı zamanda yabancıl anahtar olarak tanımlanmıştır. Ve bu ilişki türüne de dayanarak bir veli birden çok öğrenciye sahip olabilir. 15 1.7.8. Çoka Çok İlişki Er Diyagramı Çoka çok ilişki varlık ilişki diyagramı örneği aşağıda verilmiştir. Bu diyagrama göre bir öğrenci birden çok dersi alabiliyorken bir dersi de birden çok öğrenci alabilmektedir. Bu nedenle iki varlık arasında bire çok ilişki oluşmaktadır. 1.7.9. Özyineli İlişki ER Diyagramı Aşağıda özyineli yani recursive ilişki için örnek bir ER diyagramı verilmiştir. Yukarıda verilen varlık ilişki diyagramında Tüm personelin verileri aynı tabloda olduğunu düşünelim ve bu tabloda aynı zamanda ebeveynler ve çocukları odluğunu düşünürsek bir çocuğun bir ebeveyni olabilirken bir ebeveynin birden çok çocuğu olabilir bu nedenle tablo kendi kendine bağlı ve bire çok ilişkili olmalıdır. 16 1.8. İLİŞKİSEL VERİTABANININ MANTIKSAL TASARIMI 1.8.1. Depolanacak Veriler Veritabanı içerisinde tutmak istediğiniz bilgiler belirlenerek, bunlar gruplandırılmalıdır. Aşağıda örnek veritabanı ve tutulacak veri grupları verilmiştir. Bu gruplar tabloları, içerisindeki bilgiler ise sütunları oluşturmak için kullanılacak. Okul Veritabanı: Öğrenciler (no, adı, tenor, bölümü)Kurum Bilgileri(adı, mudur, adres, telefon), Notlar (öğrenci no, dersi, not1, not2), Dersler (ders kodu, ders adı), Bölümler (bölüm kodu, bölüm adı). 1.8.2. Tabloların Oluşturulması Belirtilen veri grupları ve sütunlar doğrultusunda tablolar oluşturulur. Tablo ve sütun isimlerinde Türkçe karakter, fonksiyon ismi kullanılmamalı ve isimler hatırlanacak şekilde belirlenmelidir. Sütunlar, tutulacak veri türüne göre tanımlanmalıdır. 1.8.3. Anahtar Sütunların Belirlenmesi Kayıtların birbirinden ayırt edilebilmesi için anahtar sütun oluşturulur. Anahtar sütunun tanımlama zorunluluğu yoktur ama verilere daha çabuk ulaşmak ve tekrar eden kayıtların önlenmesi için kullanılabilir. 1.8.4. Tabloları Bölme Tabloda tekrar eden kayıtlara karşılaşılacaksa tekrar eden sütun için yeni tablo oluşturulur. Örneğin, öğrenci notlarının olduğu bir tabloda sütun olarak sadece öğrenci no, ders ve not sütunu var ise öğrencinin aynı dersten girmiş olduğu sınav sayısı kadar yeni kayıt oluşur. Âmâ notlar tablosunu tasarlarken öğrenci no, ders, not1 ve not2 şeklinde tasarlanıp dersler de ayrı bir tabloda tutulursa veritabanı daha sağlıklı sonuçlar verecektir ve gereksiz yere tablonun boyutu artmayacaktır. 1.8.5. İlişkilerin Kurulması Projenin büyük kısmında tablolar arasında kesinlikle ilişki oluşturulmaktadır. Oluşturulan tablolar arasında ilişkiler sorgu yardımıyla oluşturulacaksa bu aşamada bir işleme gerek yoktur.MS Access gibi bir veritabanı sisteminde sisteminde şematik olarak oluşturulacaksa tablolardaki sütunlar belirli kurallar çerçevesinde ilişkilendirilir. Örneğin, öğrenci bilgilerinin ve notlarının tutulduğu tablolarda, notlar tablosunda kesinlikle öğrenci no kullanılmıştır. Öğrenci tablosundaki öğrenci no ile notlar tablosundaki öğrenci no sütunu ilişkilendirilmelidir. 1.9. VERİTABANI YÖNETİM SİSTEMLERİNDE (VTYS) FİZİKSEL TASARIM Veritabanı yönetim sistemlerinde (VTYS) fiziksel tasarım, veritabanının donanım seviyesinde nasıl yapılandırılacağını, veri depolama ve erişim stratejilerini belirlemeyi amaçlar. Fiziksel tasarım, veri modellerinin somut bir şekilde fiziksel ortama yerleştirilmesini içerir ve performans, veri bütünlüğü, güvenlik ve veri yönetimi gibi faktörler göz önünde bulundurulur. İşte fiziksel tasarım sürecinde izlenecek temel adımlar: 1.9.1. Tabloların Fiziksel Yapısının Belirlenmesi Veri Tipleri: Her bir kolon için uygun veri tiplerini seçmek önemlidir. Veri tipleri performansı etkiler. Örneğin, sayılar için INT ya da BIGINT, metin verisi için VARCHAR veya TEXT seçilebilir. 17 Kolonların Düzeni: Veri tablosundaki kolonların sıralaması ve yapısı da performansı etkileyebilir. Özellikle büyük tablolar için bu dikkatlice planlanmalıdır. 1.9.2. Depolama Stratejilerinin Belirlenmesi Tabloların ve İndekslerin Fiziksel Depolaması: Veritabanı tabloları ve indeksleri disk üzerinde nasıl depolanacak? Veritabanı yöneticileri (DBA'lar), verilerin fiziksel diskler üzerindeki dağılımını kontrol eder. Bu, depolama cihazları (SSD, HDD) gibi donanım özellikleri göz önünde bulundurularak yapılır. Tabloların Parçalanması (Partitioning): Çok büyük tablolar, farklı bölümlere (partition) ayrılabilir. Bu, erişim performansını artırır ve bakımı kolaylaştırır. Sıkıştırma: Verileri sıkıştırmak, disk alanından tasarruf edebilir, ancak işlem yükünü artırabilir. Hangi tabloların sıkıştırılacağı kararlaştırılmalıdır. 1.9.3. İndeksleme Stratejilerinin Belirlenmesi İndeksler: İndeksler, veri erişim performansını artırmak için kritik öneme sahiptir. Hangi kolonlara indeks ekleneceği belirlenmelidir. Örneğin, birincil anahtar ve yabancı anahtar kolonlarına otomatik olarak indeks eklenir. İndeks Türleri: Farklı indeks türleri bulunur (B-Tree, Hash Index, Bitmap Index vb.). Her biri farklı kullanım durumlarına göre seçilir. 1.9.4. Veri Erişim Yollarının Optimizasyonu Veri Yolu: Verilere nasıl erişileceği ve hangi yollarla en kısa sürede erişim sağlanacağı belirlenir. Verilerin sıkça sorgulandığı durumlarda, sorgu yollarını optimize etmek performansı artırır. Sorgu Optimizasyonu: Veritabanı yönetim sistemleri, sorgu optimizasyonunu otomatik olarak yapar. Ancak indekslerin uygun kullanımı ve veritabanı yapısının doğru tasarımı sorgu süresini büyük ölçüde etkiler. 1.9.5. Yedekleme ve Kurtarma Stratejileri Yedekleme: Verilerin güvenliği ve sürekliliği açısından yedekleme stratejileri belirlenir. Yedeklerin ne sıklıkla alınacağı ve nerede saklanacağı (yerel disk, bulut vb.) tasarlanır. Kurtarma Planları: Veri kaybı durumunda sistemin hızlı bir şekilde kurtarılabilmesi için bir kurtarma stratejisi oluşturulur. 1.9.6. Güvenlik Önlemleri Erişim Yetkilendirme: Hangi kullanıcıların hangi verilere erişeceği ve ne tür işlemler yapabileceği belirlenir. Fiziksel tasarımda, veritabanı güvenliği için kullanıcı rolleri ve izinleri düzenlenir. Şifreleme: Hassas veriler için veri şifreleme kullanılabilir. Hem veri tabanı içinde hem de veri aktarımı sırasında şifreleme stratejileri göz önünde bulundurulmalıdır. 1.9.7. Performans ve İyileştirme Teknikleri Önbellekleme (Caching): Sık kullanılan verilerin önbellekte tutulması, diskten okuma süresini kısaltır ve sorgu hızını artırır. Veri Dağıtımı: Büyük sistemlerde veritabanı yükünü dağıtmak için dikey veya yatay ölçeklendirme kullanılabilir. Bu, verilerin farklı sunuculara bölünmesi anlamına gelir. 18 Tablo Normalizasyonu ve Denormalizasyonu: Normalizasyon, veritabanını en verimli şekilde tasarlamak için kullanılır. Ancak performans gerekçesiyle denormalizasyon da (verilerin tekrarlanması) düşünülebilir. 1.9.8. Güncelleme ve Bakım Planları Tablo İstatistikleri: İstatistikler, veritabanı yönetim sisteminin sorgu optimizasyonu yaparken kullanacağı bilgileri içerir. Fiziksel tasarım sürecinde, bu istatistiklerin nasıl ve ne sıklıkta güncelleneceği planlanmalıdır. Veritabanı Sağlık Kontrolleri: Fiziksel tasarım sonrası, veritabanının performansını izlemek ve iyileştirmek için düzenli bakım yapılmalıdır (indeks yeniden oluşturma, gereksiz verilerin temizlenmesi vb.). 1.9.9. Donanım Kaynaklarının Optimizasyonu Bellek Yönetimi: Veritabanı yönetim sisteminin bellek kullanımı optimizasyonu (örneğin, sorguların çalıştırılması sırasında kullanılan bellek boyutu) önemlidir. Disk Kullanımı: Disklerin doğru bir şekilde bölümlenmesi, RAID yapılandırmaları veya SSD'lerin kullanımı gibi stratejiler veritabanının performansını doğrudan etkiler. 1.10. NORMALİZASYON Veritabanı normalizasyonu, veritabanı tasarımında kullanılan bir süreçtir ve veritabanındaki ilişkisel tabloların yapısını optimize etmeyi amaçlar. Normalizasyon, tabloların gereksiz tekrarlarını, veri tutarsızlıklarını ve veri kaybını en aza indirerek veritabanının tutarlılığını ve bütünlüğünü artırmaya yardımcı olur. Normalizasyon, bir tablonun daha küçük, daha özgün ve daha net alt-tablolara bölünmesi yoluyla gerçekleştirilir. Normalizasyon süreci, ilişkisel veritabanlarının temel bir prensibi olan ilişkisel teorinin uygulanması ile yapılır. Normalizasyon süreci, genellikle birinci normal formdan (1NF) başlayarak başlar ve ardından ikinci normal forma (2NF), üçüncü normal forma (3NF) ve hatta dördüncü normal forma (4NF) gibi daha yüksek seviyelere doğru devam eder. Normalizasyon, veritabanı tasarımında önemli bir adımdır, çünkü bir veritabanının normalizasyon seviyesi, veritabanının performansını, tutarlılığını ve bütünlüğünü etkileyebilir. 1.10.1. Birincil Normal Form (1NF) 1NF (First Normal Form) veya birinci normal form, ilişkisel veritabanı tasarımında kullanılan bir terimdir ve bir veri kümesinin en temel düzeydeki bir normalizasyon seviyesidir. Bir veri kümesinin 1NF olması için şu koşulları sağlaması gerekir: Her hücre tek bir değer içermelidir: Bir hücrede birden fazla değer bulunmamalıdır. Örneğin, bir hücrede "Adı ve Soyadı" gibi iki farklı bilgi tutulmamalıdır. Her sütun bir özellik veya niteliği temsil etmelidir: Bir sütunda farklı türlerde veriler bulunmamalıdır. Örneğin, bir sütunda hem "Telefon Numarası" hem de "Adres" bilgisi bulunmamalıdır. 19 Her satır benzersiz bir kimlik değerine sahip olmalıdır: Her satırda birbirinden farklı bir kimlik değeri (primary key) bulunmalıdır. Bu kimlik değeri, bir satırın diğer satırlardan ayırt edilmesini sağlar. 1NF, veri tabanındaki tekrarlayan verileri ve verilerin kaybolmasını önler, tutarlılığı artırır ve daha karmaşık normalizasyon seviyelerinin uygulanabilmesi için bir temel oluşturur. 1.10.2. İkinci Normal Form (2NF) İkinci Normal Form (2NF), ilişkisel veritabanı tasarımında bir normalizasyon seviyesidir. 1NF koşullarını sağlayan bir veri kümesinin 2NF olabilmesi için iki koşulu daha sağlaması gerekmektedir: Her sütun, anahtar sütunun tamamına bağımlıdır: Bir tablonun birden fazla anahtar sütunu varsa, her diğer sütun bu anahtar sütunlarının tamamına bağımlı olmalıdır. Bu, kısmi bağımlılıkları engelleyerek verilerin tutarlılığını sağlar. Herhangi bir veri alt kümesi birden çok satırda tekrar etmemelidir, Bu tür veri alt kümeleri için yeni tablolar oluşturulmalıdır. Örneğin, bir tabloda "Öğrenci Kimlik Numarası", "Ders Kodu", "Ders Adı" ve "Öğrenci Adı" sütunları olsun. Eğer bu tablonun anahtar sütunu "Öğrenci Kimlik Numarası" ise, "Ders Kodu" ve "Ders Adı" sütunları anahtar sütunun tamamına bağımlıdır. Ancak "Öğrenci Adı" sütunu sadece "Öğrenci Kimlik Numarası" sütununa bağımlıdır. Bu durumda, "Ders Kodu" ve "Ders Adı" sütunları ayrı bir tabloda tutulmalıdır. 2NF, bir veri kümesindeki verilerin tekrarını ve çelişkili verileri önler ve daha karmaşık normalizasyon seviyelerinin uygulanabilmesi için bir temel oluşturur. Ancak, 2NF her zaman gereksiz bir normalizasyon seviyesi olarak kabul edilmeyebilir. Bazı durumlarda, özellikle küçük veritabanlarında, 2NF'ye uyulması performansı olumsuz etkileyebilir ve bu nedenle bazı özel durumlarda 2NF uygulanmayabilir. 1.10.3. Üçüncü Normal Form (3NF) Üçüncül Normal Form (3NF), ilişkisel veritabanı tasarımındaki bir diğer normalizasyon seviyesidir. 2NF'yi sağlayan bir veri kümesinin 3NF olabilmesi için şu koşulların sağlanması gerekmektedir: Her sütun, anahtar sütunun tamamına bağımlı olmalıdır: 3NF'de de 2NF'deki gibi sütunların anahtar sütuna tamamen bağımlı olması gerekmektedir. Transitif bağımlılıklar engellenmelidir: Bir sütunun başka bir sütuna bağımlı olmasına neden olan bir ara sütun varsa, bu durum transitif bağımlılık olarak adlandırılır ve 3NF'ye uymaz. Bu durumda, ara sütun anahtar sütundan ayrı bir tabloda tutulmalıdır. Örneğin, bir tabloda "Müşteri ID", "Müşteri Adı", "Şehir" ve "Bölge" sütunları olsun. Eğer bu tablonun anahtar sütunu "Müşteri ID" ise, "Şehir" sütunu doğrudan anahtar sütuna bağımlıdır ancak "Bölge" sütunu "Şehir" sütununa bağımlıdır. Bu durumda "Bölge" sütunu, "Şehir" sütununun yanı sıra anahtar sütunu da içeren ayrı bir tabloda tutulmalıdır. 3NF, verilerin tekrarını önler ve veritabanındaki verilerin tutarlılığını ve doğruluğunu artırır. Ancak, bazı durumlarda bu seviye gereksiz bir normalizasyon seviyesi olarak kabul edilmeyebilir ve bazı özel durumlarda, özellikle büyük veritabanlarında, 3NF uygulanması performansı olumsuz etkileyebilir. Bu nedenle, 3NF uygulanıp uygulanmayacağı veritabanının büyüklüğü ve karmaşıklığına bağlı olarak karar verilmelidir. 20 1.11. NORMALİZASYON ÖRNEK Aşağıda verilen tablo hiçbir normal forma uymamaktadır. Bu tabloya adım adım normal form kuralları uygulayarak normalizasyonunu gerçekleştirelim. OgrAdiSoyadi HarfNotu DersAdi DersID AdresILAdi AdresILID Serdar KR AA,BB Mat,Fizik 1,2 Kastamonu 37 Ahmet AK BA,BB Biyo,Mat 3,1 Ankara 6 Veli KR AA Mat 1 Kastamonu 37 Tablo 1: Kurallara Uymayan Tablo 1NF için her hücre tek bir değer içermelidir kuralına uymuyor. Bu kuralı uygularsak. OgrAdiSoyadi Harf_Notu Harf_Notu DersAdi1 DersAdi2 DersID DersID AdresILAdi AdresILID 1 2 1 2 Serdar KR AA BB Mat Fizik 1 2 Kastamonu 37 Ahmet AK BA BB Biyo Mat 3 1 Ankara 6 Veli KR AA Mat 1 Kastamonu 37 Tablo 2: 1NF 1. Kuralı uygulandı. 1NF için ikinci kural olan her sütun bir değeri temsil etmiyor Örneğin adsoyad aynı alanda. Birde birincil anahtar sütunu ekliyoruz. 21 OgrID Ogr Ogr Harf_Notu Harf_Notu Ders Ders Ders Ders AdresIL AdresILID Adi Soyadi 1 2 Adi1 Adi2 ID1 ID2 Adi 1 Serdar KR AA BB Mat Fizik 1 2 Kastamonu 37 2 Ahmet AK BA BB Biyo Mat 3 1 Ankara 6 3 Veli KR AA Mat 1 Kastamonu 37 Tablo 3: 1NF 2. Kural 1NF aynı tablo içinde tekrarlanan kolonlar bulunamaz kuralını uygulayalım buda ders için bakacak olursak kurala uymuyor bunları satırlara dağıtıyoruz. OgrId OgrAdi OgrSoyadi Harf_Notu DersAdi DersID AdresILAdi AdresILID 1 Serdar KR AA Mat 1 Kastamonu 37 1 Serdar KR BB Fizik 2 Kastamonu 37 2 Ahmet AK BA Biyo 3 Ankara 6 2 Ahmet AK BB Mat 1 Ankara 6 3 Veli KR AA Mat 1 Kastamonu 37 Tablo 4: 1NF 3. Kural 1NF için kuralları uyguladık şimdi sıra 2NF için kuralları uygulamaya geldi. Öncelikle 1NF uygunmu? Evet uygun, peki herhangi bir veri alt kümesi birden çok satırda tekrarlanmış mı? Evet çoğu alan neredeyse tekrarlanmış durumda bunları aşağıda işaretlenmiş olarak gösterelim. OgrId OgrAdi OgrSoyadi Harf_Notu DersAdi DersID AdresILAdi AdresILID 1 Serdar KR AA Mat 1 Kastamonu 37 1 Serdar KR BB Fizik 2 Kastamonu 37 2 Ahmet AK BA Biyo 3 Ankara 6 2 Ahmet AK BB Mat 1 Ankara 6 3 Veli KR AA Mat 1 Kastamonu 37 Tablo 5: Alt Tabloların Belirlenmesi Aşağıda yeni tablolar verilmiştir. Veri alt kümesi olan öğrenci ile alakalı değerler ayrı bir tabloya aktarılarak tekrarlanan veriler silinecek ve öğrenci tablosu oluşturulacaktır. 22 OgrId OgrAdi OgrSoyadi AdresILAdi AdresILID 1 Serdar KR Kastamonu 37 1 Serdar KR Kastamonu 37 2 Ahmet AK Ankara 6 2 Ahmet AK Ankara 6 3 Veli KR Kastamonu 37 Tablo 6: Oluşan Öğrenci Tablosu OgrId Harf_Notu DersAdi DersID 1 AA Mat 1 1 BB Fizik 2 2 BA Biyo 3 2 BB Mat 1 3 AA Mat 1 Tablo 7: Ana Tabloda Kalan Veriler Şimdi tekrar eden verilerin silinmiş hali ile ana tablo ve öğrenci tablosu arasında ilişkiyi kuralım. Şema 1. 2NF 1. Adım Şimdi ise ana tabloda 2NF kuralları Tekrar uygulanabilir mi diye bakalım. 23 OgrId DersAdi DersID 1 Mat 1 1 Fizik 2 2 Biyo 3 2 Mat 1 3 Mat 1 Tablo 8: Ana Tablodaki Tekrarlanan Alanlar Şimdi ise ana tablodan Ders ile ilgili yeni bir tablo oluşturalım ve ilgili alanları ilişkilendirelim. Ortaya bir adet ders tablosu çıkmıştır ve bu tabloda tekrarlanan matematik dersi verileri silinmiştir. Şema 2. 2NF 2. Adım Şimdi tekrar öğrenci tablosuna 2NF uygulanabilirmi bakalım. Adres il adı ile adres il ıd öğrenci tablosunda adres il adı primary key olarak seçilebilecek bir alan o halde 2NF’in herhangi bir veri alt kümesi birden çok satırda tekrar etmemelidir, Bu tür veri alt kümeleri için yeni tablolar oluşturulmalıdır kuralı gereği yeni bir tabloya dönüştürülmelidir. Burada adres il id yeni oluşacak tablonun birincil anahtarı olabilir. Ayrıca tekrar eden alanlar silinmelidir. 24 Şema 3. 2NF 3. Adım Tablolara son kez bakıldığında Harf Notlarında AA BB değerleri tekrarlanmış gibi görünse de onu ayrıştırarak ve tek başına ifade edecek bu alanla ilgili herhangi bir birincil anahtar bulunmadığı için 2NF burada noktalanmıştır. Şimdi sırada 3NF kurallarını uygulamakta. Öncelikle Anahtarı olmayan hiçbir alan anahtarı olmayan hiçbir alana bağlı olamaz. Bu kural hala ana tabloda ihmal edilmiş durumda çünkü satırlardaki verileri eşsiz kılacak herhangi bir alan söz konusu değil bu nedenle Harf_Notu ile alakalı bir tablo oluşturularak harf notları bu tabloya taşınmalı ve tekraralanan verileri silinerek primary key belirlenmelidir bu noktadan sonra ana tabloya bu birincil anahtar bağlanmalı ve ana tabloda bu birincil anahtar değeri ile ilişkilendirilmelidir. 3NF kuralına uyan son Şema Şema 4’te verilmiştir. Oluşacak olan Harf_Notu tablosuda Tablo 9’ da verilmiştir. Son olarak ana tablonun adı öğrenci sınav sonuç tablosu olarak değiştirilebilir. Harf_Notu_I Harf_Notu D 1 AA 2 BA 3 BB Tablo 9: Harf Notu Tablosu 25 Şema 4. 3NF Uygulanmış Hali 26 1.12. BÖLÜM SONU DEĞERLENDİRME SORULARI 1. Veritabanı yönetim sistemleri (DBMS) aşağıdaki işlemlerden hangisini gerçekleştirmez? a) Verileri depolama b) Veri tablolarını oluşturma c) Veri sorgulama ve manipülasyon d) Veri şifreleme ve güvenlik yönetimi e) Veri iletişimi ve ağ yönetimi 2. Birincil anahtar (primary key) aşağıdakilerden hangisini temsil eder? a) Bir tablodaki tekil satırı tanımlar. b) İki tablo arasında ilişki kurar. c) Bir tablodaki sütunları gruplar. d) Bir tablonun tüm sütunlarını temsil eder. e) Veritabanı sunucusunun anahtar yetkilisini belirler. 3. Dış anahtar (foreign key) nedir? a) İki tablo arasındaki ilişkiyi tanımlayan bir sütun. b) Bir tablodaki tekil satırı tanımlayan bir sütun. c) Bir tablodaki sütunları gruplayan bir sütun. d) Bir tablonun tüm sütunlarını temsil eden bir sütun. e) Veri tabanında olmayan verileri temsil eden bir anahtar. 4. Normalizasyonun amacı nedir? a) Veritabanındaki veri bütünlüğünü korumak. b) Veri tablolarını daha etkili bir şekilde depolamak. c) Veri tablolarını hiyerarşik bir yapıya dönüştürmek. d) Veri tablolarını ilişkilendirmek ve sorgulamak. e) Veritabanı işlemlerini yönetmek ve takip etmek. 27 5. Bir veritabanı indeksi ne işe yarar? a) Sorgu hızını artırır ve veri erişimini optimize eder. b) Verileri güvence altına alır ve şifreler. c) Veri tablolarını ilişkilendirir ve bağlantıları oluşturur. d) Veri tablolarını gruplar ve ilişkilendirir. e) Veritabanı sunucusunun performansını izler ve yönetir. 6. Birleştirme (join) işlemi nedir? a) İki veya daha fazla tabloyu belirli bir sütuna göre ilişkilendirme işlemi. b) Veri tablolarındaki verileri silme işlemi. c) Veri tablolarını farklı sütunlara ayırma işlemi. d) İki tabloyu birleştirerek yeni bir tablo oluşturma işlemi. e) Veri tablolarını veri türüne göre filtreleme işlemi. 7. Veritabanı yedekleme (backup) işlemi neden önemlidir? a) Veritabanının performansını artırır. b) Veri tablolarını normalleştirir. c) Veri kaybını önler ve veri güvenliğini sağlar. d) Veritabanının boyutunu küçültür. e) Veritabanı sorgularını hızlandırır. 8. Veritabanında transaction (işlem) nedir? a) Bir veritabanı tablosunun sütunlarını düzenlemek için kullanılan işlem. b) Veritabanındaki verileri sıralamak için kullanılan işlem. c) Birden fazla veritabanı işlemini bir araya getiren ve atomik bir şekilde gerçekleştiren işlem. d) Veritabanı sunucusunun performansını izlemek için kullanılan işlem. 28 9. Veritabanı ilişkilendirme türleri arasında aşağıdakilerden hangisi yanlıştır? a) Bir-Bir (One-to-One) b) Bir-Çok (One-to-Many) c) Çok-Çok (Many-to-Many) d) Çok-Bir (Many-to-One) e) Birçok (Many-to-Many) 10. Transact-SQL (T-SQL) aşağıdakilerden hangisini ifade eder? a) Veritabanı tablolarını düzenlemek için kullanılan bir dil. b) Veritabanı yönetim sistemi tarafından kullanılan bir programlama dili. c) SQL sorgularını gerçekleştirmek ve veritabanı işlemlerini kontrol etmek için kullanılan bir dil. d) Veritabanı güvenliği için kullanılan bir şifreleme algoritması. e) Veri tabanında yer alan sistem tablolarını yönetmek için kullanılan bir dil. 29 1.13. BÖLÜM SONU DEĞERLENDİRME CEVAPLARI 1. Veritabanı yönetim sistemleri (DBMS) aşağıdaki işlemlerden hangisini gerçekleştirmez? Cevap: e) Veri iletişimi ve ağ yönetimi 2. Birincil anahtar (primary key) aşağıdakilerden hangisini temsil eder? Cevap: a) Bir tablodaki tekil satırı tanımlar. 3. Dış anahtar (foreign key) nedir? Cevap: a) İki tablo arasındaki ilişkiyi tanımlayan bir sütun. 4. Normalizasyonun amacı nedir? Cevap: a) Veritabanındaki veri bütünlüğünü korumak. 5. Bir veritabanı indeksi ne işe yarar? Cevap: a) Sorgu hızını artırır ve veri erişimini optimize eder. 6. Birleştirme (join) işlemi nedir? Cevap: a) İki veya daha fazla tabloyu belirli bir sütuna göre ilişkilendirme işlemi. 7. Veritabanı yedekleme (backup) işlemi neden önemlidir? Cevap: c) Veri kaybını önler ve veri güvenliğini sağlar. 8.Veritabanında transaction (işlem) nedir? Cevap: c) Veritabanı işlemlerinin dört temel özelliğini ifade eden bir kavram. 9. Veritabanı ilişkilendirme türleri arasında aşağıdakilerden hangisi yanlıştır? Cevap: e) Birçok (Many-to-Many) 10. Transact-SQL (T-SQL) aşağıdakilerden hangisini ifade eder? Cevap: c) SQL sorgularını gerçekleştirmek ve veritabanı işlemlerini kontrol etmek için kullanılan bir dil. 30 2. T-SQL İLE VERİTABANI İŞLEMLERİ T-SQL (Transact-SQL), Microsoft tarafından geliştirilen ve Microsoft SQL Server veritabanı yönetim sistemiyle kullanılan bir sorgu dili ve programlama dilidir. T-SQL, ANSI SQL standartlarına uygundur, ancak SQL diline ek olarak bazı ek özelliklere ve genişletmelere sahiptir. T-SQL, SQL Server veritabanında veri tanımlama, veri sorgulama, veri değiştirme ve veri kontrol işlemlerini gerçekleştirmek için kullanılır. T-SQL, veritabanı nesneleri oluşturma ve yönetme, veri sorgulama ve veri manipülasyonu gibi birçok işlemi gerçekleştirmek için kullanılan bir dildir. Aşağıda T-SQL'in bazı temel özelliklerini ve kullanım alanlarını bulabilirsiniz: Veri Tanımlama: T-SQL ile veritabanında tablolar, indeksler, saklama prosedürleri, fonksiyonlar, tetikleyiciler ve diğer veritabanı nesneleri oluşturulabilir ve yönetilebilir. Bu nesnelerin yapıları, özellikleri ve ilişkileri T-SQL kullanılarak tanımlanır. Veri Sorgulama: T-SQL, SELECT ifadesini kullanarak veritabanından veri sorgulamalarını gerçekleştirmek için kullanılır. SELECT ifadesi, tablolardan veri seçmek, filtrelemek, sıralamak, gruplamak ve birleştirmek gibi birçok işlemi yapmanıza olanak sağlar. T-SQL ayrıca JOIN ifadesi ile birden çok tabloyu ilişkilendirmenize ve verileri birleştirmenize olanak tanır. Veri Değiştirme: T-SQL, INSERT, UPDATE ve DELETE ifadelerini kullanarak veritabanında veri ekleme, güncelleme ve silme işlemlerini gerçekleştirmek için kullanılır. Bu ifadeler, veritabanındaki tablolarda kayıt eklemenize, mevcut kayıtları güncellemenize ve silmenize olanak sağlar. Veritabanı Programlama: T-SQL, saklama prosedürleri, fonksiyonlar, tetikleyiciler ve etkinlikler gibi veritabanı programlama öğelerini tanımlamak ve uygulamak için kullanılır. Bu öğeler, veritabanı işlemlerini otomatikleştirmenize, iş mantığı kurallarını uygulamanıza ve daha karmaşık işlemleri gerçekleştirmenize olanak sağlar. İşlem Yönetimi: T-SQL, transaksiyon ifadeleri (BEGIN TRANSACTION, COMMIT, ROLLBACK) kullanarak işlem yönetimini destekler. Bu ifadeler, birden fazla veritabanı işlemini bir arada gruplama, işlemleri başlatma, işlemleri tamamlama veya geri almayı sağlar. SQL (Structured Query Language), ilişkisel veritabanı yönetim sistemlerinde (RDBMS) kullanılan standart bir sorgu diliyken, T-SQL (Transact-SQL), Microsoft SQL Server için geliştirilen bir sorgu dili ve programlama dilidir. İşte SQL ve T-SQL arasındaki bazı temel farklar: T-SQL (Transact-SQL) SQL (Structured Query Language) Microsoft SQL Server'a özgü bir SQL lehçesidir. Genel olarak kullanılan SQL standart dilidir. SQL Server üzerinde veritabanı yönetimi için Veritabanı yönetimi ve sorgulama için genel kullanılır. olarak kullanılır. T-SQL, SQL dilinin bir genişlemesidir ve daha fazla SQL, temel sorgulama ve veritabanı işlemlerini işlevselliğe sahiptir. kapsar. Stored Procedure, Trigger ve Transaction Stored Procedure ve Transaction yönetimi gibi yönetimi gibi gelişmiş özellikleri destekler. özellikleri destekleyebilir, ancak tüm özellikler tüm veritabanı sistemlerinde aynı şekilde desteklenmez. 31 T-SQL komutları, Transact-SQL kod blokları içinde SQL komutları genellikle tek satırlık ifadeler veya kullanılır. betikler halinde kullanılır. T-SQL, Microsoft SQL Server Management Studio SQL, çeşitli veritabanı yönetim araçları ve (SSMS) gibi araçlarla çalışırken kullanılır. platformlarında kullanılabilir. T-SQL, dinamik sorgular, cursor'lar, SQL, daha temel sorgulama ve veritabanı transaction'lar gibi gelişmiş özelliklere sahiptir. işlemlerine odaklanır. T-SQL, bazı özel fonksiyonları ve özellikleri SQL SQL, genel olarak kabul edilen SQL standartlarını diline ekler. takip eder. Tablo 10: T-SQL ile SQL arasındaki temel Farklar Bu farklar göz önüne alındığında, SQL genel bir sorgu dili iken, T-SQL Microsoft SQL Server ile kullanılan bir dil olarak daha geniş bir işlevsellik ve programlama yetenekleri sunar. Maddeler halinde T-SQL'de bulunan ancak genel SQL dilinde bulunmayan bazı özellikler ve fonksiyonlar aşağıdaki şekilde sıralanabilir: Stored Procedures (Depolanan Prosedürler) Triggers (Tetikleyiciler) Transactions (İşlemler) Common Table Expressions (CTE'ler) Table-Valued Parameters (Tablo Değerli Parametreler) TRY...CATCH Blocks (HATA...YAKALA Blokları) Dynamic SQL (Dinamik SQL) Cursors (İşaretçiler) Scalar-Valued Functions (Skaler Değerli Fonksiyonlar) Table-Valued Functions (Tablo Değerli Fonksiyonlar) Bu özellikler ve fonksiyonlar, T-SQL diline özgüdür ve genel SQL dilinde bulunmayabilir veya farklı şekillerde uygulanabilir. Her biri farklı kullanım senaryolarına sahip olabilir ve T-SQL'in veritabanı yönetimi ve programlama yeteneklerini artıran güçlü araçlar olduğunu gösterir. Tüm bu genel tanımlardan sonra T-SQL kullanmadan önce veritabanında kullanabileceğimiz veri türlerini öğrenmeye sıra geldi. 2.1. T-SQL VERİ TÜRLERİ T-SQL Server veri türü, herhangi bir nesnenin veri türlerini belirten bir özniteliktir. Her sütun, değişken ve ifade, SQL Server'da ilgili veri türüne sahiptir. Bu veri tipleri tablolar oluşturulurken kullanılabilir. Gereksinimlerinize göre bir tablo sütunu için belirli bir veri türü seçebilirsiniz. SQL Server, kullanım için diğer veri türleri kategorisi dahil olmak üzere yedi kategori sunar. 32 2.1.1. Tam Sayısal Türler (Exact Numeric Types) Aşağıda bir alan girilebilecek tam sayı veri türü adı ve alabileceği değerleri bir tablo halinde sunulmuştur. Tip Başlangıç Bitiş bigint -9,223,372,036,854,775,808 9,223,372,036,854,775,807 int -2,147,483,648 2,147,483,647 smallint -32,768 32,767 tinyint 0 255 bit 0 1 decimal -10^38 +1 10^38 –1 numeric -10^38 +1 10^38 –1 money -922,337,203,685,477.5808 +922,337,203,685,477.5807 smallmoney -214,748.3648 +214,748.3647 Tablo 11: Tam Sayısal Veri Türleri 2.1.2. Yaklaşık Sayısal Türler ( Approximate Numeric Types ) Aşağıda küsüratlı sayılar için kullanabileceğimiz veri türleri ve alabileceği değer aralıkları verilmiştir. Tip Başlangıç Bitiş Float -1.79E + 308 1.79E + 308 Real -3.40E + 38 3.40E + 38 Tablo 12: Yaklaşık Sayısal Veri Türleri 2.1.3. Tarih ve Saat Türleri ( Date Time Types) Aşağıda tarih ve saat için kullanabileceğimiz veri türleri ve alabileceği aralıklar tabloda verilmiştir. Tip Başlangıç Bitiş datetime Jan 1, 1753 Dec 31, 9999 smalldatetime Jan 1, 1900 Jun 6, 2079 date Jan 1, 0001 Dec 31, 9999 datetimeoffset Jan 1, 0001 Dec 31, 9999 datetime2 Jan 1, 0001 Dec 31, 9999 time 00:00:00.0000000 23:59:59.9999999 Tablo 13: Tarih ve saat veri tipleri 33 2.1.4. Karakter Dizileri (Character Strings) Aşağıda karakter ve karakter dizileri için kullanabileceğimiz veri tipleri ve alabileceği değerler verilmiştir. Sr.N Tip & Açıklama o 1 Char: Fixed-length non-Unicode character data with a maximum length of 8,000 characters. 2 Varchar: Variable-length non-Unicode data with a maximum of 8,000 characters. 3 Varchar (max): Variable-length non-Unicode data with a maximum length of 231 characters (Introduced in SQL Server 2005). 4 Text: Variable-length non-Unicode data with a maximum length of 2,147,483,647 characters Tablo 14: Karakter Dizileri Veri Tipleri 2.1.5. Unicode Karakter Dizileri (Unicode Character Strings) Sr.N Tip & Açıklama o 1 Nchar: Fixed-length Unicode data with a maximum length of 4,000 characters. 2 Nvarchar: Variable-length Unicode data with a maximum length of 4,000 characters. 3 Nvarchar (max): Variable-length Unicode data with a maximum length of 230 characters (Introduced in SQL Server 2005). 4 Ntext: Variable-length Unicode data with a maximum length of 1,073,741,823 characters. Tablo 15: Unicode Karakter Dizileri 2.1.6. İkili Diziler (Binary Strings) Sr.N Tip & Açıklama o 1 Binary: Fixed-length binary data with a maximum length of 8,000 bytes. 2 Varbinary: Variable-length binary data with a maximum length of 8,000 bytes. 3 varbinary(max): Variable-length binary data with a maximum length of 231 bytes (Introduced in SQL Server 2005). 4 İmage: Variable-length binary data with a maximum length of 2,147,483,647 bytes. Tablo 16: İkili Diziler 34 2.1.7. Diğer Veri Tipleri sql_variant: Metin, ntext ve zaman damgası dışında SQL Server tarafından desteklenen çeşitli veri türlerinin değerlerini depolar. timestamp: Her satır güncellendiğinde güncellenen, veritabanı genelinde benzersiz bir sayı depolar. uniqueidentifier: Genel olarak benzersiz bir tanımlayıcı (GUID) depolar. xml: XML verilerini saklar. XML örneklerini bir sütunda veya bir değişkende saklayabilirsiniz (SQL Server 2005'te sunulmuştur). cursor: Bir imleç referansı. table: Daha sonra işlemek için bir sonuç kümesi saklar. hierarchyid: Bir hiyerarşideki konumu temsil etmek için kullanılan değişken uzunluklu, sistem veri türü (SQL Server 2008'de sunulmuştur). 2.2. DEĞİŞKENLER Standart SQL ifadelerinde programlamaya yönelik ifadeleri barındırmadığı için projelerde yetersiz kalmaya başlamıştır. Bunun üzerine MS SQL veritabanları için Microsoft ve Sybase tarafından T-SQL, Oracle veribanıları için Oracle firması tarafından PL/SQL geliştirilmiştir. T-SQL ve PL/SQL sayesinde akış kontroller, değişkenler, fonksyionlar, hata konrolleri gibi programlamaya yönelik ifadeler gelmiştir. 2.2.1. Değişken İsimlendirme Değişken İsimlendirme Kuralları: Türkçe karakter(Ç,ç,Ğ,ğ,ı,İ,Ö,ö,Ş,ş,Ü,ü) ve boşluk kullanılmaz. İlk karakteri harf olmak zorundadır. Diğer karakterler harf, rakam, “_” den oluşabilir. Büyük küçük harf ayrımı yoktur. SQL için kullanılan ifadeler kullanılamaz.(WHERE, LIKE, OR, AND, NOT vb.) T-SQL'de değişken tanımlamak için DECLARE anahtar kelimesini kullanırız. İşte bir değişkenin nasıl tanımlanacağına dair detaylı bir açıklama ve bazı örnekler: 35 2.2.2. Değişken Tanımlama Değişkenin adını ve veri tipini belirtmemiz gerekmektedir. Aşağıdaki örnekte, @name adında bir NVARCHAR(50) tipinde bir değişken tanımlıyoruz: DECLARE @name NVARCHAR(50); Kod Bloğu 1 : Değişken Tanımlama 2.2.3. Değişken Atama Bir değişkene değer atamak için SET veya SELECT INTO ifadelerini kullanabiliriz. SET kullanarak değişkene bir değer atayalım: DECLARE @name NVARCHAR(50); SET @name = 'John Doe'; Kod Bloğu 2 : Değişken Atama 2.2.4. Değişkeni Kullanma Tanımlanan bir değişkeni sorgularda, prosedürlerde veya işlevlerde kullanabiliriz. Aşağıdaki örnekte, tanımlanan @name değişkenini bir SELECT sorgusunda kullanıyoruz: DECLARE @name NVARCHAR(50); SET @name = 'John Doe'; SELECT @name AS FullName; Kod Bloğu 3 : Değişken Kullanma 2.2.5. Değişkeni Birden Fazla Değerle İçerme: Bir değişken, birden fazla değeri saklamak için kullanılabilir. Bu durumda, bir tablo değişkeni veya dizi değişkeni kullanmak daha uygun olabilir. Aşağıdaki örnekte, bir tablo değişkeni kullanarak birden fazla ismi saklıyoruz: DECLARE @names TABLE ( FullName NVARCHAR(50)); INSERT INTO @names (FullName) VALUES ('John Doe'), ('Jane Smith'), ('David Johnson'); SELECT * FROM @names; Kod Bloğu 4 : Birden Fazla Değişken Yukarıdaki örnekler, T-SQL'de değişken tanımlama, atama ve kullanım konularında size bir temel sağlamalıdır. Daha karmaşık senaryolarda, değişkenlerin nasıl kullanıldığına ve kapsamlarına dikkat etmek önemlidir. 36 2.3. USE GO DEYİMİ T-SQL'de "USE" ve "GO" ifadeleri, veritabanı ve toplu işlemler için kullanılan iki farklı kavramdır. İşlevleri şu şekildedir: 2.3.1. USE İfadesi: "USE" ifadesi, çalışmak istediğiniz belirli bir veritabanını seçmenizi sağlar. T-SQL betiklerinde birden fazla veritabanı bulunuyorsa, "USE" ifadesiyle hangi veritabanı üzerinde işlem yapacağınızı belirtmeniz gerekmektedir. Örneğin, "MyDatabase" adında bir veritabanı seçmek için aşağıdaki gibi "USE" ifadesini kullanabilirsiniz: USE MyDatabase Kod Bloğu 5 : Use Deyimi Bu ifadeyi kullanarak, takip eden SQL ifadeleri "MyDatabase" üzerinde çalıştırılacaktır. 2.3.2. GO İfadesi: "GO" ifadesi, T-SQL betiklerinde bir toplu işlemi ayırmak ve ayrı ayrı işlem olarak çalıştırmak için kullanılır. Bu, birden fazla SQL ifadesini bir araya getirerek betiği daha düzenli ve yönetilebilir hale getirmenize olanak sağlar. Örneğin, aşağıdaki gibi "GO" ifadesini kullanarak iki ayrı SQL ifadesini ayırabilirsiniz: SELECT * FROM Customers; GO SELECT * FROM Orders; Kod Bloğu 6 : Go Deyimi İlk "SELECT" ifadesi çalıştırılacak, ardından "GO" ifadesiyle ayırma yapılarak ikinci "SELECT" ifadesi çalıştırılacaktır. Not: "GO" ifadesi T-SQL için bir işlem ayracıdır ve SQL Server Management Studio (SSMS) gibi bazı araçlar tarafından tanınır. Ancak, T-SQL'nin bir parçası değildir ve SQL sunucularının kendisi tarafından yorumlanmaz. Dolayısıyla, başka bir T-SQL uygulamasında "GO" ifadesini kullanırken bazı uyumluluk sorunları ortaya çıkabilir. 37 2.4. OPERATÖRLER 2.4.1. Aritmetik Operatörler Operator Açıklama + Add - Subtract * Multiply / Divide % Modulo Tablo 17: Artimetik Operatörler 2.4.2. Karşılaştırma Operatörleri Operator Açıklama = Equal to > Greater than < Less than >= Greater than or equal to 10 -- Bu bir açıklama satırıdır Kod Bloğu 9 : Tek Satır İçin Açıklama Kullanımı Yukarıdaki örnekte, "--" işaretinden sonraki metin, açıklama olarak kabul edilir ve sorgu tarafından görmezden gelinir. Çok Satırlı Açıklamalar Çok satırlı açıklamalar, birden fazla satırda yer alan açıklamaları eklemek için kullanılır. SQL'de, "/" ve "/" işaretleri arasına yazılan her şey çok satırlı açıklama olarak kabul edilir ve sorgu tarafından görmezden gelinir. Örneğin: SELECT column1, column2 FROM table_name Kod Bloğu 10 : Çok Satır İçin Açıklama Kullanımı Yukarıdaki örnekte, "/" ve "/" işaretleri arasına yazılan her şey, çok satırlı açıklama olarak kabul edilir ve sorgu tarafından görmezden gelinir. Açıklama satırları, SQL kodunu daha anlaşılır ve yönetilebilir hale getirmek için önemli bir araçtır. Kodun anlaşılmasını kolaylaştırmak ve belgeleme amacıyla uygun açıklamalar eklemek iyi bir pratiktir. 2.7. AKIŞ KONTROL MEKANİZMALARI 2.7.1. BEGIN-END T-SQL'de "BEGIN" ve "END" ifadeleri, işlem mantığını gruplamak ve bir blok olarak işaretlemek için kullanılan yapısal bir elemandır. Bu ifadeler, kontrol akışı yapısı içerisinde kullanılarak bir dizi T-SQL ifadesini birlikte çalıştırmak için kullanılır. İşlem mantığının belirli bir blok içinde çalışmasını sağlar ve bir bloğun başlangıcını ve sonunu belirtir. 40 Örneğin, bir "IF" ifadesiyle birlikte "BEGIN" ve "END" ifadeleri kullanabiliriz. İşlem mantığı belirli bir koşula bağlı olarak çalışacaksa, bu bloğu "BEGIN" ve "END" arasına yerleştiririz. İşte bir örnek: IF @IsTrue = 1 BEGIN -- Bu blok, @IsTrue değişkeni 1 olduğunda çalışacak olan ifadeleri içerir PRINT 'IsTrue değişkeni 1 olarak değerlendirildi.' SELECT * FROM TableName END Kod Bloğu 11 : Begin End Örneği Yukarıdaki örnekte, "IF" ifadesi ile @IsTrue değişkeninin değerine bağlı olarak çalışacak bir blok oluşturulmuştur. "BEGIN" ifadesi, bloğun başlangıcını belirtir ve "END" ifadesi, bloğun sonunu belirtir. Bu blok, @IsTrue değişkeni 1 olduğunda, "PRINT" ve "SELECT" ifadelerini içeren kodları çalıştıracaktır. "BEGIN" ve "END" ifadeleri, "IF" ifadelerinin yanı sıra döngüler (WHILE, FOR, vb.), saklı prosedürler (stored procedures), tetikleyiciler (triggers) ve diğer kontrol yapısı ifadeleriyle birlikte kullanılabilir. Bu ifadeler, T-SQL'de kod bloklarını tanımlamak ve belirli bir sırayla çalıştırmak için önemli bir yapısal elemandır. 2.7.2. KOŞULLAR T-SQL'de "IF" ve "ELSE" ifadeleri, koşullu mantıksal işlemler gerçekleştirmek için kullanılır. İşte detaylı bir açıklama ve örnekler: 2.7.2.1. IF İfadesi: "IF" ifadesi, belirli bir koşulun doğru olup olmadığını kontrol etmek için kullanılır. Eğer koşul doğru ise, belirtilen bloktaki ifadelere gidilir. Aksi takdirde, "IF" bloğu atlanır. Aşağıdaki örnekte, "IF" ifadesi kullanılarak bir sayının 10'dan büyük mü, küçük mü veya eşit olduğunu kontrol ediyoruz: DECLARE @number INT; SET @number = 15; IF @number > 10 PRINT 'Sayı 10\'dan büyüktür.'; ELSE IF @number < 10 PRINT 'Sayı 10\'dan küçüktür.'; ELSE PRINT 'Sayı 10\'a eşittir.'; Kod Bloğu 12 : İf koşulu 41 2.7.2.2. ELSE İfadesi: "ELSE" ifadesi, "IF" ifadesindeki koşulun yanlış olduğu durumda çalıştırılacak ifadeleri belirtmek için kullanılır. Aşağıdaki örnekte, "ELSE" ifadesi kullanarak bir sayının pozitif mi, negatif mi veya sıfır olduğunu kontrol ediyoruz: DECLARE @number INT; SET @number = -5; IF @number > 0 PRINT 'Sayı pozitiftir.'; ELSE IF @number < 0 PRINT 'Sayı negatiftir.'; ELSE PRINT 'Sayı sıfırdır.'; Kod Bloğu 13 : Else Koşulu 2.7.2.3. ELSE IF İfadesi: "ELSE IF" ifadesi, birden çok koşulu kontrol etmek ve her biri için farklı işlemler gerçekleştirmek için kullanılır. Birden çok "ELSE IF" ifadesi kullanarak çeşitli koşulların kontrolünü sağlayabilirsiniz. Aşağıdaki örnekte, bir öğrencinin notunu kontrol ederek farklı not aralıklarına göre farklı mesajlar basıyoruz: DECLARE @grade INT; SET @grade = 80; IF @grade >= 90 PRINT 'Notunuz A.'; ELSE IF @grade >= 80 PRINT 'Notunuz B.'; ELSE IF @grade >= 70 PRINT 'Notunuz C.'; ELSE IF @grade >= 60 PRINT 'Notunuz D.'; ELSE PRINT 'Notunuz F.'; Kod Bloğu 14 : Else If Koşulu 42 Yukarıdaki örneklerde, "IF", "ELSE IF" ve "ELSE" ifadelerini kullanarak koşullu işlemleri gerçekleştiriyoruz. Bu şekilde, farklı koşullar altında farklı işlemleri yapabilir ve T-SQL betiklerinizi daha esnek hale getirebilirsiniz. 2.7.3. DÖNGÜLER T-SQL'de döngüler, tekrar eden işlemleri gerçekleştirmek için kullanılır. SQL sunucusunda, genellikle "WHILE" ve "CURSOR" döngüleri kullanılır. İşte bu döngülerin detaylı açıklamaları: 2.7.3.1. WHILE Döngüsü "WHILE" döngüsü, belirli bir koşul doğru olduğu sürece tekrarlanacak işlemleri gerçekleştirmek için kullanılır. "WHILE" ifadesi, koşulun doğru olması durumunda döngü bloğundaki ifadeleri tekrar tekrar çalıştırır. Koşul yanlış olduğunda döngüden çıkılır. Aşağıdaki örnek, "WHILE" döngüsü kullanarak bir değişkenin değerini arttırarak ekrana yazdırmaktadır: DECLARE @counter INT; SET @counter = 1; WHILE @counter

Use Quizgecko on...
Browser
Browser