Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Veri Tabanı Yönetim Sistemleri 1 Ders 10 Veri Sözlüğü ve DDL

Benzer bir sunumlar


... konulu sunumlar: "Veri Tabanı Yönetim Sistemleri 1 Ders 10 Veri Sözlüğü ve DDL"— Sunum transkripti:

1 Veri Tabanı Yönetim Sistemleri 1 Ders 10 Veri Sözlüğü ve DDL
Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü

2 Veri Sözlüğü Veri sözlüğü (sistem kataloğu) veri hakkında veri (metadata) içerdiği için veri tabanının veri tabanı olarak tanımlanabilir. Veri sözlüğünde her ilişki şeması (tablo) için; şemanın ve içerdiği niteliklerin adları, niteliklerin etki alanları, ilişki anahtarı, bütünlük sınırları ve eğer tanımlandıysa görünüm (view) tanımları saklanmaktadır.

3 Veri Sözlüğünde Saklanan Diğer Bilgiler
İlişki şemalarının indeksleri ile ilgili bilgiler (indekslenen özellikler, indeks tipleri) Çoğu sistemde yetkili kullanıcıların adları ve durumları Hiyerarşik veri modeli gibi yüksek düzeyli modellerde her ilişki şemasındaki sıra sayısı ve uygulanan saklama şekli (bloklu-bloksuz)

4 Veri Sözlüğünde Saklanan Fiziksel Bilgiler
Veri öğesinin tipi (sayı, karakter, tarih, …) Karakter ise uzunluğu Sayı ise tipi (tam sayı, ondalıklı sayı, …) Tarih ise biçimi (mm.dd.yyyy, …) Kullanılacak araçlar (disk, teyp, …) Veri tabanının saklanacağı birimler (c:\, …) Erişim denetimi

5 Veri Sözlüğü Örneği sistem-katalog-şeması (şema-adı, niteliklerinin-sayısı) nitelik-şeması (nitelik-adı, şema-adı, etki-alanı-tipi, yeri) kullanıcı-şeması (kullanıcı-adı, şifresi, grubu) indeks-şeması (indeks-adı, tipi, özellikleri) görünüm-şeması (görünüm-adı, tanımı) kullanıcı-grubu-şeması (…)

6 SQL Server’da veri sözlüğü ile ilgili sorgular
select * from sys.databases select * from sysusers select * from sys.tables select * from sysobjects where name in ('Öğrenciler', 'Notlar', 'Dersler') select * from syscolumns where id = (select id from sysobjects where name = 'Öğrenciler') sys.tables altında sadece tablolar, sys.objects altında ise tüm nesneler yer alır. sysobjects ile sys.objects, syscolumns ile de sys.columns farklı kolonlara sahiptirler. Bazı kolonların ise sadece isimleri farklıdır: Yukarıdaki sorguda sys.objects ve sys.columns kullanırsanız id yerine object_id yazmalısınız.

7 SQL Server'da Sistem Veritabanları
Master: Sistem veri sözlüğünün saklandığı vt. Diğer veritabanları ve dosyalar, sistem düzeyinde kullanıcılar, prosedür ve fonksiyonlar gibi bilgiler saklanır. Her instance için ayrı bir master vt vardır. Model: yeni bir vt oluşturulurken örnek alınan vt. MSDB: SQL Server Agent servisinin yaptığı işlemlere ait bilgilerin tutulduğu vt. TempDB: SQL Servisi başlarken model vt örnek alınarak oluşturulan geçici vt. Order by kullanıldığında sıralanacak kayıtlar, indeks oluştururken yapılan ara işlemler, … bu vt altında saklanır.

8 Data Definition Language (DDL)
Veri Tanımlama Dili (Data Definition Language) veritabanındaki nesneleri yaratmak için kullanılan CREATE, yok etmek için kullanılan DROP ve nesne üzerinde değişiklik işlemleri için kullanılan ALTER komutlarını içerir. DDL komutlarını kullanma yetkisi veritabanının ve tüm nesnelerin yaratılmasından sorumlu olan kişilere (DBA gibi) verilir.

9 Önemli Not SQL'de kullanılan SELECT komutu ve DML komutları (INSERT, DELETE, UPDATE) genellikle tüm VTYS’lerde aynı şekilde kullanılır. DDL (CREATE, DROP, ALTER) ve DCL (GRANT, REVOKE) komutlarında ise bazı farklılıklar vardır. Örneğin SQL Server’da önce bir LOGIN nesnesi yaratılır, daha sonra yaratılan bir kullanıcı (USER) bu LOGIN nesnesi ile ilişkilendirilir. Dolayısı ile SQL Server’daki “CREATE USER” komutunun yazımı ile ORACLE’daki yazım farklıdır. Bu derste ve sonraki derslerde verilecek olan tüm DDL ve DCL komutları SQL Server’a göre verilmiştir.

10 Veritabanı İşlemleri Veritabanı yaratma: CREATE DATABASE yeniDB
Veritabanı yok etme: DROP DATABASE yeniDB Veritabanı üzerinde değişiklik yapma: ALTER DATABASE yeniDB SET AUTO_SHRINK OFF Veritabanı model veritabanının kopyası gibi oluşturulur Veritabanı kullanımda ise yok edilemez Veritabanının boyutunun otomatik olarak küçülmesi özelliğini kapatma

11 Tablo Yaratma USE yeniDB; CREATE TABLE Bolumler( BolumNo numeric(2) PRIMARY KEY, BolumAdi varchar(20) NOT NULL, Sehir varchar(20) ) Hangi veritabanı altında tablo yaratılacak ise öncelikle o veritabanı USE komutu ile seçilir Bolumler tablosu dbo şeması altında yaratılır. "dbo.Bolumler" şeklinde de yazılabilirdi. numeric ile decimal veri tipleri aynıdır (ORACLE'da number). Boyut olarak precision (virgülden önce ve sonra toplam basamak sayısı) ve scale (virgülden sonraki kısmı) verilir. Tek değer verildi ise o kadar basamağı olan bir tamsayıyı ifade eder. Precision en fazla 38 olabilir, varsayılan değer ise (18,0)'dır. decimal [ (p[ ,s] )] numeric[ (p[ ,s] )]

12 Bütünlük Kısıtlamaları (Integrity Constraints)
Veri bütünlüğünü sağlamak için 5 farklı bütünlük kısıtlaması tanımlanabilir: Primary Key, Foreign Key, Unique, Not Null, Check Kısıtlamalar tablolar oluşturulurken tanımlanabileceği gibi tablolar oluşturulduktan sonra da tanımlanabilirler. Ancak tabloya önceden girilmiş olan veriler varsa, bu verilerin tanımladığımız kısıtlamaya uyması gerekir.

13 Tablo Yaratma (tüm kısıtlamalar ile)
CREATE TABLE Personel( PerNo numeric CONSTRAINT pk_Personel PRIMARY KEY, Ad varchar(10) CONSTRAINT nn_Ad NOT NULL, Soyad varchar(10) CONSTRAINT nn_Soyad NOT NULL CONSTRAINT upper_Soyad CHECK(Soyad=UPPER(Soyad)), Gorev varchar(9), Yonetici numeric CONSTRAINT fk_yonetici REFERENCES Personel(PerNo), BaslamaTarihi date DEFAULT getdate(), Maas numeric(10,2) CONSTRAINT ck_Maas CHECK(Maas>900), Komisyon numeric(9,0) DEFAULT NULL, BolumNo numeric(2) CONSTRAINT nn_BolumNo NOT NULL CONSTRAINT fk_BolumNo REFERENCES Bolumler(BolumNo) ) Varsayılan değer sistem tarihi Bu örnekte her bütünlük kısıtlamasına isim de verilmiştir. Tabloyu yaratma script'i SQL Server tarafından oluşturulduğunda constraint tanımları sonradan verilir.

14 Tablo ve Sütun Kısıtlamaları
Eğer kısıtlama sütun tanımının yanında verilirse sütun kısıtlaması, tüm sütunlar tanımlandıktan sonra CONSTRAINT ile başlayan ifadede verilirse tablo kısıtlaması olarak adlandırılır. CREATE TABLE Tedarikci_Urun ( TedarikciNo numeric NOT NULL, UrunNo numeric NOT NULL, Miktar numeric NOT NULL DEFAULT 0, CONSTRAINT pk_TedUr PRIMARY KEY (TedarikciNo, UrunNo) ) Column Constraint Table Constraint PK iki sütun ile olacaksa bu şekilde tanımlanması şart. SQL Server tarafından oluşturulan script'ilerde tek sütun bile olsa PK bu şekilde kullanılır.

15 Primary Key Constraint
Birincil anahtar kısıtlayıcısı, bir tabloya girilen her bir kaydın belirtilen sütun değeri olarak diğer kayıtlardan ayırmak üzere tekil ve farklı bir değer girmeye zorlar. Bir tabloda sadece bir tane Primary Key Constraint tanımlanabilir ve bu sütun (veya sütunlar) asla NULL değer kabul etmez.

16 Foreign Key Constraint
Bir tablonun belli sütununa girilecek değerleri başka bir tablonun indekslerle tekilleştirilmiş bir sütunundaki değer kümesi ile sınırlandırmak için kullanılır. CREATE TABLE tablo_ismi ( sütun tanımlamaları..., CONSTRAINT kısıtlama-ismi FOREIGN KEY(sütun-ismi) REFERENCES tablo-ismi(sütun-ismi) ) Personel tablosunu yaratırken yaptığımız gibi, bir sütun tanımından sonra "sütun kısıtlaması" olarak yaparsanız FOREIGN KEY (sütun-ismi) kısmı yazılmaz.

17 Unique Constraint Bazı durumlarda, bir tabloda birincil anahtar alanın yanı sıra başka bazı sütunlardaki verilerin de tekrarlanmaması istenebilir. Bu türden alanlar için Unique Constraint tanımı yapılır. Unique Constraint’i, Primary Key Constraint’ten ayıran en önemli iki özellik, Unique bir tabloda birden fazla olabilir. Ancak Primary Key tablo başına sadece bir adet olabilir (ama çok alandan oluşabilir). Unique Constraint tanımlı bir alan NULL değerler kabul edebilir. Tanımlanması Primary Key ile benzerdir (hem sütun hem de tablo düzeyinde tanımlarken sadece Primary Key yerine Unique yazılması yeterlidir)

18 Not Null Constraint Eğer bir sütun için her zaman veri girilmesi zorunlu olsun isteniyorsa “Boş Olamaz Kısıtlayıcısı” kullanılır. SQL Server tabloyu yaratan scripti oluştururken hem boş olabilenleri hem de olamayanları belirtir (her sütun tanımının yanına ya NULL ya da NOT NULL yazar). CREATE TABLE Personel( PerNo numeric(18, 0) NOT NULL, Ad varchar(10) NOT NULL, Soyad varchar(10) NOT NULL, Gorev varchar(9) NULL, Yonetici numeric(18, 0) NULL, … )

19 Check Constraint Bir sütuna girilebilecek değerleri, belli kıyaslara karşı kontrol eden kısıtlayıcı türüdür ve üç farklı amaç için kullanılabilir: Bir sütuna girilebilecek değerleri belli bir küme ile kısıtlamak için Bir sütuna girilebilecek değerleri belli bir formata uygunluğunu denetlemek için Bir sütuna girilebilecek değerleri, başka sütunlar üstünden bir kıyas ile denetlemek için CREATE TABLE tablo-ismi( sütun tanımlamaları..., CONSTRAINT kısıtlama-ismi CHECK(ifade) FOR sütun-ismi ) Personel tablosunu yaratırken sütun düzeyinde yapmıştık (FOR gereksiz): Maas numeric(10,2) CONSTRAINT ck_Maas CHECK(Maas>900)

20 İndeks Kullanımı İndeksler verilere hızlı erişim amacıyla kullanılır.
OLAP sistemlerde mümkün olduğu kadar çok indeks kullanılır, OLTP’de ise fazlası uygulamaya zarar verebilir (özellikle çok sık güncellenen tablolarda). Primary Key’ler otomatik olarak indekslenir, Foreign Key’ler de genellikle indekslenmesi gereken alanlardır. WHERE koşulu ile seçilen sütunlar, aynı sırada indeks yapılmalıdır.

21 Ne zaman indeks kullanmalı?
Bir veya daha fazla sayıda sütun sıklıkla bir where koşulunda yada tablo birleştirme işleminde kullanılıyorsa indeks kullanmak hızı arttıracaktır. Eğer sorgunun sonucu tablodaki satırların %2 yada daha azı gibi küçük bir bölümünü döndürecek ise indeks kullanımı faydalı olacaktır. Sütundaki değerlerin çoğu NULL ise indeks kullanımı iyi sonuç verir. Sütundaki değerler büyük ölçüde birbirini tekrar eden değerler ise (cinsiyet sütununda sadece iki farklı değer olması gibi) indeks kullanmanın anlamı yoktur. Tablo çok sık güncelleniyorsa, indeksin de güncellenmesi gerekeceği için zaman kaybı yaratır.

22 İndeks Yaratma Aşağıdaki iki indeks aynı anda mevcut olabilir, çünkü sütun sıraları farklıdır. CREATE INDEX Per_index1 ON Personel(Soyad, Gorev); CREATE INDEX Per_index2 ON Personel(Gorev, Soyad);

23 View (Görünüm) Access'teki sorgu nesnesi gibi, gösterdiği veriyi gerçekte saklamayan sadece SELECT ifadesini saklayan nesnedir. Neden view kullanılır? Veri erişimini sınırlamak için Karmaşık sorguları kolay hale getirmek için Veri bağımsızlığını sağlamak için Aynı verinin farklı görünümlerini sunmak için Eğer Primary Key View’da yer alıyorsa DML (insert, delete, update) işlemleri o view üzerinde uygulanabilir.

24 View Yaratma CREATE VIEW Personel_view AS
SELECT PerNo, Ad, Soyad, Maas, Sehir FROM Personel P, Bolumler B WHERE P.BolumNo = B.BolumNo AND B.BolumNo = 10 GO CREATE VIEW Bolum20 AS SELECT Ad, Soyad, Maas*12 [Yıllık Maas] FROM Personel WHERE BolumNo = 20 GO komutu işlem kümesini (batch) bitirip, önceki GO'dan itibaren tüm komutları sunucuya gönderir. SQL Server kendi oluşturduğu scriptlerde her komut sonrası GO kullanır. SQLCMD üzerinde GO kullanımı ifadenin çalıştırılmasını sağlar (ORACLE'da ifadeyi ; ile bitirip Enter'a basma yerine burada GO yazıp Enter'a basma var).

25 Synonym Tablo, view, sequence, procedure, function, package veya başka bir synonym için alternatif bir isimdir. CREATE SYNONYM per FOR Personel;

26 ALTER (Tanımda Değişiklik Yapma)
Tabloya sütun ekleme ALTER TABLE Personel ADD Adres varchar(250) Tabloya kısıtlama ekleme ADD CONSTRAINT fk_BolumNo FOREIGN KEY(BolumNo) REFERENCES Bolumler(BolumNo) ADD sonrasındaki kısıtlama tanımı, tablo seviyesindeki kısıtlama tanımı ile aynıdır

27 DROP (Yok Etme) Tüm veritabanı nesnelerini yok etmek için DROP komutu kullanılır. Sadece nesnenin türü ve adı yazılır: DROP TABLE Personel DROP INDEX Per_index2 ON Personel ALTER içinde ADD'in tersi olarak ta DROP kullanılır: ALTER TABLE Personel DROP COLUMN Adres


"Veri Tabanı Yönetim Sistemleri 1 Ders 10 Veri Sözlüğü ve DDL" indir ppt

Benzer bir sunumlar


Google Reklamları