HAFTA 3 Veritabanı Tasarımı" Yaşar GÖZÜDELİ ygozudeli@verivizyon.com http://blog.verivizyon.com/ygozudeli «BM364» Veritabanı Uygulamaları
Konu Akışı Veritabanı Tasarımı Kuramlar Veritabanı Nesnesini Yapılandırmak Tabloları Tasarlamak Veri Bütünlüğünü Tasarlamak 2
Veritabanını Modellemek Süreç İşlem Sonuç Kavramsa Model Mantıksal Model Fiziksel Model Gerçekleme Nasıl-Niçin? USE CASE USER REQUIREMENTS Ne İsteniyor? Teknik Kuramlarla Düşünün. Normalizasyon-İlişkili Tablolar vs. Nasıl çalışan bir şey yapılacak? Hayata geçirmek temel nokta. Ne nasıl gerçeklenecek? Denormalizasyon vs. Müşteri ne ister? Onun bakış açısından Teknik ekip ne yapacak? Teknik bakış açısında geçirilmiş hali Gerçek ortamda veritabanı nasıl olacak? Projenin çalışan hali ve üstünde yapılan küçük değişiklikler 3
Kavramsal Model Use Case Diyagramlar ORM modelleme aklaşımı ER Yaklaşımı UML Yaklaşımı 4
Use Case Aktör ve Sistemin etkileşimi Üye sisteme giriş yapar. Sistem Aktör 5
ORM Diyagram Urun (urun kodu) Aittir Reyon (Reyon Kod) Sahibidir Sahibidir Sahibidir Sahibidir Liste fiyat Urun Ad Batis Kuru reyon ad ORM - 1 6
E-R Diyagramlar UrunKod ReyonKod Urun Urun-Reyon Reyon SatisKuru ListeFiyat Urunad ReyonAd 7
UML Diyagram urun Reyon 0...1 AnaReyon urunkod urunad listefiyat satiskuru * * reyonkod Reyonad AltReyon 0...* urunreyon siralama UML - 1 8
Mantıksal Model Normalizasyon Kuralları 1.NF: Varlik Ozellikleri 2.NF: PK 3.NF: Geçiş Bağımlılıkları olmamalı Neden Normalizasyon? Tekrarlı Depolama: Bazı bilgiler birden fazla tekrarlar Güncelleme Anomalileri: Bir bilgiyi güncellemek için birden fazla yerde bulma ve değiştirme yapmak gerekir. Ekleme Anomalileri: Bir veri eklemek için birden fazla tabloya veri eklemek gerekir. Silme Anomalileri: Bir veriyi silmek için birden fazla tabloda veriyi bulup silmek gerekir. 9
Kayıtların İlişkilendirilmesi 1-1 İlişki 1-N İlişki Rekürsif İlişkili N-N İlişki 10
1-1 (Bire Bir İlişki) 1-1 11
1-N(Bire Çok İlişki) 12
Rekürsif İlişki 13
N-N(Çoka Çok İlişki) N-N: Desteklenmez! 1-N ve N-1 iki tablo Araya 3.tablo: Junction table( en az her iki tablonun PK değeri FK) 14
Konu Akışı Veritabanı Tasarımı Kuramlar Veritabanı Nesnesini Yapılandırmak Tabloları Tasarlamak Veri Bütünlüğünü Tasarlamak 15
Veritabanı Nesnesi Dosya ve Dosya Grupları Şema Kavramı Veritabanı Seçenekleri Veritabanını Gözlemlemek 16
Veritabanı Özellikleri 17
Dosya ve Dosya Grupları 18
Şema Kavramı Tablo, stored procedure, view gibi nesneleri bir grup içerisinde ele almak Yetki vermek-yetki almak Sunucu veritabanı endpoint route SQL server login veritabanı - 3 veritabanı - 2 veritabanı 1 uygulama rolü Assembly Key Sertifika User Mesaj Servis Şema - 2 Şema 1 Default Sequnece Fonksiyon Prosedür Kuyruk Tablo View Trigger Synonym 19
Veritabanlarını Gözemlemek DBCC SHRINKDATABASE (veritabani_ismi,truncateonly) 20
Veritabanlarını Silmek DROP DATABASE YEDEKLEMEK? ATTACH RESTORE 21
Konu Akışı Veritabanı Tasarımı Kuramlar Veritabanı Nesnesini Yapılandırmak Tabloları Tasarlamak Veri Bütünlüğünü Tasarlamak 22
Tabloları Tasarlamak Veri Tipleri Otomatik Sayı Üretme Tablo Oluşturmak Tablo Değiştirmek Geçici Tablolar Nesnelerin T-SQL Scriptlerini Almak 23
Veri Tipleri Metin Sayı Tarih Parasal Diğer UNIQUEIDENTIFIER XML BINARY GEOGRAPHY,GEOMETRIC 24
Otomatik Sayı Üretmek Sipariş Numarası, Hasta Numarası, Araç Sıra No Üç Yöntem IDENTITY() fonksiyonu ve Ardışık Sayılar Sequence Nesneleri ve Ardışık Sayılar(SQL Server 2012 +) NEW_ID() ve UNIQUE IDENTIFIER 25
Tablo Oluşturmak T-SQL CREATE TABLE tabloadi (kolon_adi1 veri_tipi[not NULL][, kolon_adi2 veri_tipi[not NULL],...]) 26
Tabloları Değiştirmek T-SQL ALTER TABLE tablo_ismi ADD COLUMN sutun_ismi sutun_ozellikleri 27
Geçici Tablolar 1. Yöntem: Oturum boyunca geçerli geçici tablolar oluşturmak için kullanılır. CREATE TABLE #tablo_adi( Alan1 tur1[(boyut1)] [[NOT] NULL][,...] ) CREATE TABLE #kitap( KitapNo INT, KitapAdi VARCHAR(55), ISBNo CHAR(16) ) 2. Yöntem: tempdb adlı veritabanında bir tablo açmak. SQLServer kapatıldığında silinir. CREATE TABLE tempdb..tablo_adi( Alan1 tur1[(boyut1)] [[NOT] NULL][,...] ) CREATE TABLE tempdb..kitap( KitapNo INT, KitapAdi VARCHAR(55), ISBNo CHAR(16) ) 28
Nesnelerin T-SQL Scriptleri 29
Konu Akışı Veritabanı Tasarımı Kuramlar Veritabanı Nesnesini Yapılandırmak Tabloları Tasarlamak Veri Bütünlüğünü Tasarlamak 30
Veri Bütünlüğünü Tasarlamak Veri Bütünlüğü Kavramı Veri Bütünlüğünü Gerçeklemek Constraint Yönetimi 31
Veri Bütünlüğü Kavramı Tablolara dağılmış verilerin kendi içinde ve tablolar arası tutarlılığının sağlanmasını amaçlar Tanımsal(Declerative) Veri Bütünlüğü Constraints(PKC,UC,DC, CC, FKC) Defaults Rules Programatik Veri Bütünlüğü Triggers Stored Procedures 32
Tanımsal Veri Bütünlüğü Tanımsal Bütünlük Domain Bütünlüğü (Domain Integrity) Varlık Bütünlüğü (entity Integrity) Referans Bütünlüğü (Reference l Integrity) Öğe Check Constraint veya Rule Nesnesi Default Constraint veya Default Nesnesi Primary ve Foreign Key Constraint Çifti Primary Key Constraint Unique Constraint Check Constraint Veya Rule Foreign Key Constraint Açıklama Bir sütuna girilebilecek değerleri grup veya şart olarak sınırlandırmak için kullanılır. INSERT işlemi esnasında bir sütun için, değer belirtilmemişse, alması için bir default değer tanımlamada kullanılır. Bir sütuna girilen değerlerin başka bir tablonun başka bir sütunundan geliyor olması kuralını koyar. Bir satırın bir alanı için, satırını temsil et-mek üzere, diğer satırlar ile karışmamak üzere tekil bir değer girilmeye zorlar. Vekillik yapan sütunun dışındaki sütularda da, diğer varlıklara ait verilerle karışıklığı önlemek üzere, tekrarlanamazlık kısıtı koyar. Ancak Unique sütun NULL kalabilir. Bir tablonun bir sütununa girilen değerin tablonun kendi içerisindeki başka sütunları ile kontrol edilmesini sağlar. Bir tabloya girilen verilerin geçerliliğini, başka bir tablonun tekilleştirilmiş (unique indeks ile) anahtar değerleri ile eşitliğini kontrol eden kısıtlama. 33
Veri Bütünlüğünü Gerçeklemek Primary Key Constraint Unique Key Constraint Defaut Constraint Check Constraint Foreign Key Constraint 34
Primary Key Constraint Her tabloda bir tane! Hangi NF? CREATE TABLE tablo_ismi( Primary_key_sutun veri_tipi CONSTRAINT constraint_ismi PRIMARY KEY [CLUSTERED NONCLUSTERED], Diger_sutun_tanimlari ) CREATE TABLE tbldoviz ( dovizkod CHAR(5), dovizad VARCHAR(50), dovizoran DECIMAL(18,4), CONSTRAINT PKC_dovizKod PRIMARY KEY(dovizKod) ) 35
Unique Key Constraint Bir tabloda birden fazla olabilir CREATE TABLE tablo_ismi( Sütun tanımları..., CONSTRAINT constraint_ismi UNIQUE [CLUSTERED NONCLUSTERED] (sutun_ismi) ) ALTER TABLE tblkullanici ADD CONSTRAINT PK_tblKullanici PRIMARY KEY CLUSTERED (kullanicikod), CONSTRAINT UCkullaniciAd_tblKullanici UNIQUE(kullaniciAd), CONSTRAINT UCemail_tblKullanici UNIQUE (email), CONSTRAINT UCvergiNo_tblKullanici UNIQUE(vergiNo) 36
Default Costraint Default Değerler üretmek için CREATE TABLE tablo_ismi( Sütun tanımları..., CONSTRAINT constraint_ismi DEFAULT deger (sutun_ismi) ) ALTER TABLE tblkullanici ADD CONSTRAINT DC_Aktif DEFAULT 1 FOR aktifmi 37
Check Constraint Bir sütuna girilebilecek degerleri: belli bir küme ile kisitlamak belli bir formata uygunlugunu denetlemek baska sütunlar üstünden bir kiyas ile denetlemek için CREATE TABLE tablo-ismi( Sütun tanımlamaları..., CONSTRAINT constraint-ismi CHECK(ifade) FOR sutun-ismi ) CREATE TABLE test ( isim VARCHAR(12), CONSTRAINT CHC_LEN CHECK(LEN(isim)>4) ) GO INSERT INTO test VALUES('Ali') 38
Foreign Key Constraint Ardışık Bütünlük (Cascading Integrity) Anne silinirse, çocuk nasıl davransın? CREATE TABLE tablo_ismi( sütun tanımlamaları..., CONSTRAINT constraint-ismi FOREIGN KEY(sutun-ismi) REFERENCES tablo-ismi(sutun-ismi) ) ALTER TABLE tblurun ADD CONSTRAINT FK_tblProduct_tblMarka FOREIGN KEY (markakod) REFERENCES tblmarka(markakod) ON UPDATE CASCADE 39
Contraint Yönetimi Geçici olarak kapatılıp açılabilir! Örneğin veri yüklerken ALTER TABLE tablo-ismi NOCHECK CONSTRAINT ALL constraint-ismi ALTER TABLE tablo-ismi CHECK CONSTRAINT ALL constraint-ismi 40
Sonuç Veritabanı Nasıl tasarlanır Teoremler Yöntemler Veri Bütünlüğü 41