Professional Documents
Culture Documents
Bolum07 - 6th Edition2-Sunum
Bolum07 - 6th Edition2-Sunum
Bölüm 7 - Amaçlar
SQL standardı tarafından desteklenen Veri
türleri.
SQL bütünlük geliştirme özelliğinin amacı.
SQL kullanılarak bütünlük kısıtlamaları nasıl
tanımlanır.
CREATE ve ALTER TABLE deyimlerinde
bütünlük geliştirme özelliği nasıl kullanılır.
1
Bölüm 7 - Amaçlar
Görünümlerin Amacı.
SQL kullanılarak görünümler nasıl oluşturulur
ve silinir.
VTYS görünümlerde işlemleri nasıl
gerçekleştirir.
Ne koşullar altında görünümler
güncellenebilir.
Görünümlerin avantajları ve dezavantajları.
ISO hareket (transaction) modeli nasıl çalışır.
Bir güvenlik düzeyi olarak GRANT ve REVOKE
deyimleri nasıl kullanılır. 3
2
Bütünlük Geliştirme Özelliği (IEF)
Bütünlük kısıtlamalarının beş türü:
gerekli veri
alan kısıtlamaları
varlık bütünlüğü
referansiyel bütünlük
genel kısıtlamalar.
Alan kısıtlamaları
(a) CHECK
cinsiyet CHAR NOT NULL
CHECK (cinsiyet IN (‘M’, ‘F’))
3
Bütünlük Geliştirme Özelliği
(b) CREATE DOMAIN
CREATE DOMAIN DomainName [AS] dataType
[DEFAULT defaultOption]
[CHECK (searchCondition)]
Örneğin:
CREATE DOMAIN CinsiyetTip AS CHAR
CHECK (VALUE IN (‘M’, ‘F’));
cinsiyet CinsiyetTip NOT NULL
4
IEF - Varlık Bütünlüğü
Bir tablonun birincil anahtarı her satır için
benzersiz, null olmayan bir değer içermelidir.
ISO standardı, CREATE ve ALTER TABLE
deyimlerinde PRIMARY KEY cümleciğini
destekler:
PRIMARY KEY(staffNo)
PRIMARY KEY(clientNo, propertyNo)
Tablo başına sadece bir PRIMARY KEY
cümleciği olabilir. UNIQUE kullanılarak
alternatif anahtarlar için benzersizlik
sağlanabilir:
UNIQUE(telNo) 9
10
5
IEF - Referansiyel Bütünlük
Ebeveynde CK değeri ile eşleşmeyen, çocuk
tabloda FK değeri oluşturmak için çalışan
herhangi bir INSERT/UPDATE reddedilir.
Aksiyon, çocuk satırlarla eşleşen ana tablodaki
bir CK değerini güncellemek/silmek için
çalışırken, ON UPDATE ve ON DELETE
cümlecikleri kullanılarak belirtilen referansiyel
aksiyona bağımlıdır:
CASCADE - SET NULL
SET DEFAULT - NO ACTION
11
6
IEF - Referansiyel Bütünlük
FOREIGN KEY (staffNo) REFERENCES Staff
ON DELETE SET NULL
FOREIGN KEY (ownerNo) REFERENCES Owner
ON UPDATE CASCADE
13
14
7
IEF - Genel Kısıtlamalar
CREATE ASSERTION StaffNotHandlingTooMuch
CHECK (NOT EXISTS (SELECT staffNo
FROM PropertyForRent
GROUP BY staffNo
HAVING COUNT(*) > 100))
15
Veri Tanımlama
SQL DDL; şemalar, alanlar, tablolar,
görünümler ve indeksler gibi veritabanı
nesnelerinin oluşturulup, yok edilmesini
sağlar.
Ana SQL DDL deyimleri şunlardır:
CREATE SCHEMA DROP SCHEMA
CREATE/ALTER DOMAIN DROP DOMAIN
CREATE/ALTER TABLE DROP TABLE
CREATE VIEW DROP VIEW
8
Veri Tanımlama
İlişkiler ve diğer veritabanı nesneleri bir ortam
(environment) içinde bulunur.
Her ortam, bir ya da daha fazla katalog içerir
ve her katalog şemalar kümesinden oluşur.
Şema, ilgili veritabanı nesnelerinin
koleksiyonudur.
Bir şemanın nesneleri; tablolar, görünümler,
alanlar ve karakter setleri olabilir. Hepsinin
sahibi aynıdır.
17
CREATE SCHEMA
CREATE SCHEMA [Name |
AUTHORIZATION CreatorId ]
DROP SCHEMA Name [RESTRICT | CASCADE ]
• RESTRICT (default) ile kullanıldığında,
schema boş olmalıdır, yoksa işlem başarısız
olur.
• CASCADE ile kullanıldığında, yukarıda
tanımlanan sırayla şema ile ilgili tüm
nesnelerin düşmesi için işlem
basamaklanır. Bu işlemlerden herhangi biri
başarısız olursa, DROP SCHEMA başarısız
olur. 18
9
CREATE TABLE
CREATE TABLE Tabloİsmi
{(sütunİsmi veriTipi [NOT NULL] [UNIQUE]
[DEFAULT varsayılanDeğer]
[CHECK aramaKoşulu] [,...]}
[PRIMARY KEY (sütunlarınListesi),]
{[UNIQUE (sütunlarınListesi),] […,]}
{[FOREIGN KEY (FKsütunlarınListesi)
REFERENCES EbeveynTabloİsmi [(CK sütunlarınListesi)],
[ON UPDATE referansiyelAksiyon]
[ON DELETE referansiyelAksiyon]] [,…]}
{[CHECK (aramaKoşulu)] [,…] })
19
CREATE TABLE
Belirtilen veriTipinde bir veya daha fazla sütun
içeren bir tablo oluşturur.
NOT NULL ile kullanıldığında, Sistem sütunda
bir null ekleme girişimini reddeder.
Sütun için DEFAULT değeri belirtilebilir.
Birincil anahtarlar her zaman NOT NULL olarak
belirtilmelidir.
FOREIGN KEY cümleciği referansiyel aksiyon
ile birlikte FK’yı belirtir.
20
10
Örnek 7.1 - CREATE TABLE
CREATE DOMAIN OwnerNumber AS VARCHAR(5)
CHECK (VALUE IN (SELECT ownerNo FROM PrivateOwner));
CREATE DOMAIN StaffNumber AS VARCHAR(5)
CHECK (VALUE IN (SELECT staffNo FROM Staff));
CREATE DOMAIN PNumber AS VARCHAR(5);
CREATE DOMAIN PRooms AS SMALLINT;
CHECK(VALUE BETWEEN 1 AND 15);
CREATE DOMAIN PRent AS DECIMAL(6,2)
CHECK(VALUE BETWEEN 0 AND 9999.99);
21
22
11
ALTER TABLE
Bir tabloya yeni bir sütun ekler.
Bir tablodan bir sütun siler.
Yeni bir tablo kısıtlaması ekler.
Bir tablo kısıtını siler.
Bir sütun için varsayılanı ayarlar.
Bir sütun için varsayılanı siler.
23
24
12
Örnek 7.2(b) - ALTER TABLE
PropertyForRent tablosundan, Personelin bir
seferde 100'den fazla özelliği işlemesi için izin
verilmez kısıtlamasını silin. Client (Müşteri)
tablosuna yeni bir sütun ekleyin.
25
DROP TABLE
DROP TABLE Tabloİsmi [RESTRICT | CASCADE]
26
13
Görünümler (Views)
View
Başka bir ilişkiyi üretmek için, temel ilişkiler
üzerinde çalışan, bir veya daha fazla ilişkisel
işlemin dinamik sonucudur.
27
Views
Bir görünümün içeriği bir veya daha fazla
temel ilişki üzerine bir sorgu olarak
tanımlanır.
Görünüm çözünürlüğü ile, görünüm üzerinde
herhangi bir işlem, türetildiği ilişkiler
üzerindeki operasyonlara otomatik olarak
dönüştürülür.
Görünüm maddileştirme ile, görünüm bir
geçici tablo olarak depolanır, altta yatan
temel tablolar güncellenmiş olarak tutulur.
28
14
SQL - CREATE VIEW
CREATE VIEW Görünümİsmi [ (yeniSütunİsmi [,...]) ]
AS subselect
[WITH [CASCADED | LOCAL] CHECK OPTION]
29
15
Örnek 7.3 – Yatay Görünüm Oluşturma
Şube B003 Yöneticisinin sadece kendi ofisinde
çalışan personel ayrıntılarını görmesi için bir
görünüm oluşturun.
CREATE VIEW Manager3Staff
AS SELECT *
FROM Staff
WHERE branchNo = ‘B003’;
31
32
Pearson Edcation © 2014
16
Örnek 7.5 - Gruplandırılmış ve Birleştirilmiş
Görünümler
Kiralık emlakları yöneten personelin çalıştığı
şube numarası, personel numarası ve
yönettikleri emlak sayısını gösteren bir
görünüm oluşturun.
CREATE VIEW StaffPropCnt (branchNo, staffNo, cnt)
AS SELECT s.branchNo, s.staffNo, COUNT(*)
FROM Staff s, PropertyForRent p
WHERE s.staffNo = p.staffNo
GROUP BY s.branchNo, s.staffNo;
33
34
17
SQL - DROP VIEW
DROP VIEW Görünümİsmi [RESTRICT | CASCADE]
35
36
18
Görünüm Çözünürlüğü
Şube B003’de her üye tarafından yönetilen
emlakların sayısı.
37
Görünüm Çözünürlüğü
(a) SELECT listesindeki görünüm sütun adları,
tanımlanan sorguda karşılık gelen sütun
adlarına çevrilir:
SELECT s.staffNo As staffNo, COUNT(*) As cnt
(b) FROM’daki görünüm isimleri, tanımlanan
sorgunun ilişkili FROM listesi ile değiştirilir:
FROM Staff s, PropertyForRent p
38
19
Görünüm Çözünürlüğü
(c) Kullanıcısorgusundaki WHERE, AND kullanılarak
tanımlanan sorgudaki WHERE ile birleştirilir:
WHERE s.staffNo = p.staffNo AND branchNo = ‘B003’
(d) GROUP BY ve HAVING cümlecikleri tanımlanan
sorgudan kopyalanır:
GROUP BY s.branchNo, s.staffNo
(e) ORDER BY tanımlanan sorgu sütun adına
çevrilmiş, görünüm sütun adı ile sorgudan
kopyalanır
ORDER BY s.staffNo
39
Görünüm Çözünürlüğü
(f) Nihai birleştirilmiş sorgu artık sonuç üretmek
için yürütülür:
SELECT s.staffNo AS staffNo, COUNT(*) AS cnt
FROM Staff s, PropertyForRent p
WHERE s.staffNo = p.staffNo AND
branchNo = ‘B003’
GROUP BY s.branchNo, s.staffNo
ORDER BY s.staffNo;
40
20
Görünümlerin Kısıtlamaları
SQL, görünümlerin oluşturulması ve
kullanımına ilişkin çeşitli kısıtlamalar getirir.
41
Görünümlerin Kısıtlamaları
Örneğin, aşağıdaki sorgu başarısız olur:
SELECT COUNT(cnt)
FROM StaffPropCnt;
42
21
Görünümlerin Kısıtlamaları
(b) Gruplu görünüm, temel tablo veya görünüm
ile asla birleştirme yapılamaz.
43
Görünüm Güncelleştirilebilme
Temel tablodaki tüm güncellemeler, temel
tabloyu kapsayan tüm görünümlerde
yansıtılır.
Benzer şekilde, görünüm güncellendiğinde,
temel tablo(lar) değişikliği yansıtmalı diye
beklenebilir.
44
22
Görünüm Güncelleştirilebilme
Ancak, StaffPropCnt görünümünü tekrar ele
alalım.
Eğer şube B003 de, SG5 2 emlak yönetir diye
kayıt eklemek için çalışırsak:
INSERT INTO StaffPropCnt
VALUES (‘B003’, ‘SG5’, 2);
Görünüm Güncelleştirilebilme
Görünüm tanımı değiştirilirse ve gerçek emlak
numaraları ile sayı değiştirilirse:
CREATE VIEW StaffPropList (branchNo,
staffNo, propertyNo)
AS SELECT s.branchNo, s.staffNo, p.propertyNo
FROM Staff s, PropertyForRent p
WHERE s.staffNo = p.staffNo;
46
23
Görünüm Güncelleştirilebilme
Şimdi kayıt eklemeye çalışıldığında:
INSERT INTO StaffPropList
VALUES (‘B003’, ‘SG5’, ‘PG19’);
47
Görünüm Güncelleştirilebilme
ISO görünümün güncelleştirilebilir olduğunu
ancak ve ancak şu şartlar için belirtir:
- DISTINCT belirtilmemişse.
- Tanımlayan Sorgunun SELECT listesinde her eleman bir sütun
adıdır ve hiçbir sütun birden fazla olamaz.
- FROM cümleciğinde; bir birleştirme, birleşim, kesişim veya
farka dayalı herhangi bir görünüm hariç, yalnızca bir tablo
belirtilir.
- Dış tabloya başvuran hiçbir iç içe SELECT olamaz.
- GROUP BY veya HAVING cümlecikleri olamaz.
- Ayrıca, görünüme eklenen her satır, temel tablonun
bütünlük kısıtlamalarını ihlal etmemelidir.
48
24
Güncellenebilir Görünüm
Görünümün güncelleştirilebilir olması için,
VTYS herhangi bir satır veya sütunu, geriye
doğru onun kaynak tablodaki satır veya
sütunu olarak takip edebilmesi gerekir.
49
25
WITH CHECK OPTION
LOCAL/CASCADED görünüm hiyerarşilerine
uygulanır.
LOCAL ile, görünümde herhangi bir satır
ekleme/güncelleme ve doğrudan veya dolaylı
olarak bu görünüm üzerinde tanımlanan
herhangi bir görünüm, satır türetilmiş
görünüm/tablodan kaybolmadığı sürece, satırın
görünümden kaybolmasına neden olmamalıdır.
CASCADED (default) ile, görünümde herhangi bir
satır ekleme/güncelleme ve doğrudan veya
dolaylı olarak bu görünüm üzerinde tanımlanan
herhangi bir görünüm, satırın görünümden
kaybolmasına neden olmamalıdır. 51
52
26
Örnek 7.6 - WITH CHECK OPTION
Aşağıdaki örneği düşünün:
27
Örnek 7.6 - WITH CHECK OPTION
Eğer HighSalary WITH CASCADED CHECK
OPTION ile belirtilmiş olsaydı, satır
HighSalary’den kaybolacağından, maaşın
9500 veya 8000 yapılması reddedilecekti.
Bu gibi anormallikleri önlemek için, her
görünüm WITH CASCADED CHECK OPTION
kullanılarak oluşturulmalıdır.
55
Görünümlerin Avantajları
Veri bağımsızlığı
Geçerlilik
Geliştirilmiş güvenlik
Azaltılmış karmaşıklık
Kolaylık
İsteğe göre düzenleme
Veri bütünlüğü
56
28
Görünümlerin Dezavantajları
Güncelleme kısıtlaması
Yapı kısıtlaması
Performans
57
Görünüm Gerçekleme
Görünüm çözünürlüğü mekanizması, eğer
görünüm sık erişiliyorsa, yavaş olabilir.
Görünüm ilk sorgulandığında, Görünüm
gerçekleme geçici tablo olarak görünümü
depolar.
Bundan sonra, gerçeklenmiş görünüme dayalı
sorgular, her zaman, yeniden hesaplanan
görünümden daha hızlı olabilir.
Sorun, Temel tablolar güncellenirken,
görünümün geçerliliğinin sürdürülmesidir.
58
29
Görünüm Bakımı
Görünüm bakımı, görünümü güncel tutmak
için gerekli değişiklikleri uygulamayı hedefler.
Aşağıdaki görünümü düşünün:
CREATE VIEW StaffPropRent(staffNo)
AS SELECT DISTINCT staffNo
FROM PropertyForRent
WHERE branchNo = ‘B003’ AND
rent > 400;
59
Görünüm Gerçekleme
PropertyForRent içine Kira <= 400 ile satır eklenirse,
görünüm değişmeyecektir.
emlak PG24 için şube B003 de StaffNo=SG19 ve kira=550
ile satır eklenirse, satır gerçeklenen görünümde görünür.
emlak PG54 için şube B003 de StaffNo=SG37 ve kira=450
ile satır eklenirse, yeni satırın gerçeklenen görünüme
eklenmesi gerekmez.
PG24 özelliği Silinirse, satır gerçeklenen görünümden
silinmelidir.
PG54 özelliği Silinirse, PG37 için satır silinmemelidir
(emlak PG21 mevcut olduğundan).
60
30
Hareketler (Transactions)
SQL, COMMIT ve ROLLBACK’e dayalı hareket
modeli tanımlar.
Hareket, kurtarmaya uyarak, bir veya daha
fazla SQL deyiminin atomik olmasını garanti
eden, işin mantıksal birimidir.
Bir SQL hareketi otomatik olarak işlem
başlatan SQL deyimi ile başlar (örneğin
SELECT, INSERT).
Hareket tamamlanıncaya kadar, hareket
tarafından yapılan değişiklikler, diğer
eşzamanlı yürütülen hareketlere görünmez.
61
Hareketler (Transactions)
Bir hareketin dört temel özelliği vardır:
62
31
Hareketler (Transactions)
Atomsallık: Bir hareket ya bütünüyle gerçekleştirilir ya da
sistem hareket başlamadan önceki durumuna döner.
Hareketin gerçekleşmesi, onun başlangıcı ve bitimi arasındaki
tüm işlemlerin başarıyla gerçekleşmesine bağlıdır. Atomsallık
özelliği harekete kaynak olan amacın geçekleşmesini garanti
eder.
Tutarlılık: Sistem (ya da harekete konu olan veriler) ya yeni
ve anlambilimsel açıdan geçerli bir duruma geçer ya da eski
geçerli durumunu korur. Böylelikle verilerin doğruluğu ve
bütünlüğü güvence altına alınır. Sistemde tutarlılığı sağlayan
kurallara bütünlük kısıtları adı verilir.
63
Hareketler (Transactions)
Yalıtılmışlık: İşlemlerin gerçekleşmesi sırasında hareket diğer
tüm hareketlerden bağımsız olarak cereyan eder. İdeal olarak
ardışık işlemler ve hareketler yalıtılmışlığı garanti altına alırsa
da, eşzamanlı işlemler sistem performansını yükseltir.
Devamlılık: Sistem bir başarısızlık durumunda dahi geçerli
durumda bulunur. Bir hareketin gerçekleşmesi sırasında
sistem çökerse, veriler hareket başlamadan önceki geçerli
değerlerine geri döner. Bir hareket bittikten sonra sistem
çökerse, veriler kalıcı hale gelmiş bulunduklarından hareket
bittiğinde aldıkları değerleri korurlar.
64
32
Hareketler
Hareket dört yoldan biri ile tamamlanabilir:
- COMMIT hareket başarıyla biter,
değişiklikleri kalıcı hale getirir.
- ROLLBACK hareket iptal edilir, hareket
tarafından yapılan herhangi bir değişiklik geri
alınır.
- Programlı SQL için, başarılı bir program
sonlandırma olduğunda, COMMIT
çalıştırılmasa bile, hareket başarılı bir şekilde
biter.
- Programlı SQL için, anormal bir program
sonlandırma, hareketi iptal eder. 65
33
Kullanıcı Tanımlama
Oracle:
CREATE USER john IDENTIFIED BY abcd1234;
PostgreSQL:
CREATE USER john WITH PASSWORD ‘abcd1234’;
Yetkiler
Kullanıcıya temel tablo veya görünümde
yürütme için izin verilen Eylemler:
SELECT Bir tablodan veri almak.
INSERT Bir tabloya yeni satırlar eklemek.
UPDATE Bir tablodaki veri satırlarını
değiştirmek.
DELETE Bir tablodan veri satırlarını silmek.
REFERENCES Bütünlük kısıtlamalarında
belirtilen tablonun referans sütunları.
USAGE Alan, tanımlama ve karakter kümeleri
kullanmak. 68
34
Yetkiler
Sütunlar INSERT/UPDATE/REFERENCES ile
kısıtlanabilir.
Tablonun sahibinin GRANT deyimini kullanarak
diğer kullanıcılara gerekli yetkileri vermesi
gerekir.
Görünüm oluşturmak için, kullanıcı görünümü
oluşturan tüm tablolar üzerinde SELECT
ayrıcalığına ve belirtilen sütunlarda
REFERENCES ayrıcalığına sahip olmalıdır.
69
GRANT
GRANT {YetkiListesi | ALL PRIVILEGES}
ON Nesneİsmi
TO {YetkiIdList | PUBLIC}
[WITH GRANT OPTION]
70
35
GRANT
PUBLIC tüm mevcut ve gelecekteki yetkili
kullanıcılara erişim verilmesini sağlar.
Nesneİsmi Bir temel tablo, görünüm, alan,
karakter kümesi olabilir.
WITH GRANT OPTION yetkilerin üzerine
geçirilmesine izin verir.
71
36
Örnek 7.9 - PUBLIC‘e Specifik Yetkiler Verme (GRANT )
GRANT SELECT
ON Branch
TO PUBLIC;
73
REVOKE
REVOKE, GRANT ile verilen yetkileri geri alır.
REVOKE [GRANT OPTION FOR]
{YetkiListesi | ALL PRIVILEGES}
ON Nesneİsmi
FROM {YetkiIdList | PUBLIC}
[RESTRICT | CASCADE]
• ALL PRIVILEGES kullanıcı iptal etme yetkileri
ile bir kullanıcıya verilen tüm yetkileri ifade
eder.
74
37
REVOKE
GRANT OPTION FOR, GRANT’ın WITH GRANT
OPTION yoluyla geçen yetkilerin ayrı iptal
edilmesini sağlar.
CASCADE anahtar kelimesi belirtilmediği
sürece, REVOKE geri bırakılan görünüm gibi bir
nesneye neden olursa başarısız olur.
Diğer kullanıcılar tarafından bu kullanıcıya
verilen yetkiler etkilenmez.
75
REVOKE
76
38
Örnek 7.10/11 - Spesifik Yetkileri Geri Alma
(REVOKE )
Tüm kullanıcılardan Branch tablosu üzerindeki
SELECT yetkisini geri alın.
REVOKE SELECT
ON Branch
FROM PUBLIC;
Staff tablosunda Director ‘e verilen tüm
yetkileri geri alın.
REVOKE ALL PRIVILEGES
ON Staff
FROM Director;
77
39