Download as pdf or txt
Download as pdf or txt
You are on page 1of 39

Bölüm 7

SQL – Veri Tanımlama (Data Definition)

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

ISO SQL Veri Tipleri

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.

Bütünlük Geliştirme Özelliği


Gerekli veri

pozisyon VARCHAR(10) NOT NULL

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

Bütünlük Geliştirme Özelliği


searchCondition bir tablo araması içerebilir:
CREATE DOMAIN BranchNo AS CHAR(4)
CHECK (VALUE IN (SELECT branchNo
FROM Branch));

Alanlar DROP DOMAIN kullanılarak silinebilir:


DROP DOMAIN DomainName
[RESTRICT | CASCADE]

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

IEF - Referansiyel Bütünlük


FK sütun veya sütunlar kümesidir; FK içeren
çocuk tablodaki her satırı, eşleşen PK içeren
ana tablonun satırına bağlar.
Referansiyel Bütünlük; FK bir değer içeriyorsa,
bu değer ana tabloda var olan satıra
başvurmalıdır, anlamına gelir.
ISO standardı, CREATE ve ALTER TABLE
deyimlerinde FOREIGN KEY cümleciğini
destekler:
FOREIGN KEY(branchNo) REFERENCES Branch

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

IEF - Referansiyel Bütünlük


CASCADE: Basamaklı bir şekilde, ebeveynden
satır silinir ve çocukta eşleşen satırlar silinir.
SET NULL: Ebeveynden satır silinir ve çocuğun FK
sütun(ları) NULL yapılır. Sadece FK sütunları null
değilse geçerlidir.
SET DEFAULT: Ebeveynden satır silinir ve
çocuktaki FK’nın her bileşeni belirtilen varsayılan
değere ayarlanır. Sadece FK sütunları için
DEFAULT belirtilmişse geçerlidir.
NO ACTION: Ebeveynden silme reddedilir.
Varsayılandır.
12

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

IEF - Genel Kısıtlamalar


CREATE ve ALTER TABLE’da CHECK/UNIQUE
kullanılabilir.
CHECK cümleciğine benzeyen, ayrıca:
CREATE ASSERTION AssertionName
CHECK (searchCondition)

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

Birçok VTYS ayrıca şunları sağlar:


CREATE INDEX DROP INDEX
16

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

Örnek 7.1 - CREATE TABLE


CREATE TABLE PropertyForRent (
propertyNo PNumber NOT NULL,
rooms PRooms NOT NULL DEFAULT 4,
rent PRent NOT NULL DEFAULT 600,
ownerNo OwnerNumber NOT NULL,
staffNo StaffNumber
Constraint StaffNotHandlingTooMuch ….
branchNo BranchNumber NOT NULL,
PRIMARY KEY (propertyNo),
FOREIGN KEY (staffNo) REFERENCES Staff
ON DELETE SET NULL ON UPDATE CASCADE ….);

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

Örnek 7.2(a) - ALTER TABLE


Pozisyon sütunu için 'Asistan' varsayılanını
silerek ve cinsiyet sütunu için varsayılan
olarak kadın ('F') ayarlayarak, Staff
(Personel) tablosunu değiştirin.
ALTER TABLE Staff
ALTER pozisyon DROP DEFAULT;
ALTER TABLE Staff
ALTER cinsiyet SET DEFAULT ‘F’;

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.

ALTER TABLE PropertyForRent


DROP CONSTRAINT StaffNotHandlingTooMuch;
ALTER TABLE Client
ADD prefNoRooms PRooms;

25

DROP TABLE
DROP TABLE Tabloİsmi [RESTRICT | CASCADE]

Ör. DROP TABLE PropertyForRent;


Tabloyu ve içindeki tüm satırları siler (kaldırır).
RESTRICT ile kullanıldığında, herhangi diğer
nesnelerin devam varlığı, bu tablonun varlığına
bağlı ise, SQL isteğe izin vermez.
CASCADE ile kullanıldığında, SQL tüm bağımlı
nesneleri siler (ve bu nesneler üzerinde
bağımlı diğer nesneleri).

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.

• Aslında veritabanında yok ama, istek anında,


istek üzerine üretilen sanal ilişkidir.

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]

• Görünümlerde her sütuna bir ad atanabilir.


• Sütun adları listesi belirtilirse, bunun subselect
(altSorgu) tarafından üretilen sütun öğeleri ile
aynı sayıda olması gerekir.
• Belirtilmezse, her sütun subselect sütununa
karşılık gelen adı alır.

29

SQL - CREATE VIEW


Bir sütun adında herhangi bir belirsizlik varsa
sütunListesi belirtilmelidir.
Subselect tanımlayan sorgu olarak bilinir.
WITH CHECK OPTION eğer bir satır,
tanımlayan sorgunun WHERE cümleciğini
sağlamakta başarısız olursa, altta yatan temel
tabloya eklenmemesini sağlar.
subselect’de başvurulan tüm tablolarda
SELECT ayrıcalığına ve başvurulan sütunlarda
kullanılan herhangi bir alanda USAGE
ayrıcalığına ihtiyaç var.
30

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

Örnek 7.4 – Dikey Görünüm Oluşturma


Maaşlar hariç şube B003’deki personel
ayrıntıları için görünüm oluşturun.
CREATE VIEW Staff3
AS SELECT staffNo, fName, lName, position, sex
FROM Staff
WHERE branchNo = ‘B003’;

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

Örnek 7.5 - Gruplandırılmış ve Birleştirilmiş


Görünümler

34

17
SQL - DROP VIEW
DROP VIEW Görünümİsmi [RESTRICT | CASCADE]

Görünüm tanımını veritabanından silmeye


neden olur.
Örneğin:
DROP VIEW Manager3Staff;

35

SQL - DROP VIEW


CASCADE ile, ilgili tüm bağımlı nesneler silinir;
yani görünüm üzerinde tanımlanan herhangi
bir görünüm düşürülür.
RESTRICT (default) ile, eğer başka nesnelerin
varlığı, silinecek görünümün varlığının
devamına bağlı ise, komut reddedilir.

36

18
Görünüm Çözünürlüğü
Şube B003’de her üye tarafından yönetilen
emlakların sayısı.

SELECT staffNo, cnt


FROM StaffPropCnt
WHERE branchNo = ‘B003’
ORDER BY staffNo;

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.

(a) Görünümde sütun bir küme fonksiyonunu


esas alıyorsa:
Görünüme erişmek için; Sütun, sorguların sadece
SELECT ve ORDER BY cümleciklerinde görünebilir.
Sütun WHERE’de ve görünüme dayalı herhangi bir
sorguda bir küme fonksiyonuna argüman olarak
kullanılamaz.

41

Görünümlerin Kısıtlamaları
Örneğin, aşağıdaki sorgu başarısız olur:
SELECT COUNT(cnt)
FROM StaffPropCnt;

Benzer şekilde, aşağıdaki sorgu da başarısız


olur:
SELECT *
FROM StaffPropCnt
WHERE cnt > 2;

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.

• Örneğin, StaffPropCnt görünümü bir


gruplandırılmış görünümdür, bu yüzden
başka bir tablo veya görünüm ile bu
görünümü birleştirmeye çalışan herhangi bir
girişim başarısız olur.

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);

• PropertyForRent içine SG5’in yönettiği 2


kaydı eklemek zorunda. Ancak, hangi
emlaklar olduğu bilinmiyor; yani birincil
anahtarları bilinmiyor!
45

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’);

• Hala sorun var, çünkü PropertyForRent içinde


posta kodu/staffNo dışındaki tüm sütunlarda
null değerlere izin verilmez.
• Ancak, geri kalan null olmayan sütunlara
değerlerini verecek yol yoktur.

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

WITH CHECK OPTION


Tanımlanan sorgunun WHERE koşulunu
karşılayan Satırlar bir görünümde var olur.
Bir satır değiştiğinde ve artık koşulu
sağlamıyorsa, görünümden kaybolur.
Görünümde ekleme/güncelleme yapıldığında,
WHERE şartını sağlayan yeni satırlar
görünümde görünür.
Bir görünüme yeni giren veya çıkan satırlara,
göç eden satırlar denir.
WITH CHECK OPTION bir satırın görünüm
dışına göçünü yasaklar.
50

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

Örnek 7.6 - WITH CHECK OPTION


CREATE VIEW Manager3Staff
AS SELECT *
FROM Staff
WHERE branchNo = ‘B003’
WITH CHECK OPTION;
Satır B003’ ün şube numarası B002’ye
güncellenemez. Bu görünümden satır göçüne
neden olur.
Ayrıca şube numarası B003’e eşit olmayan bir
satır görünüme eklenemez.

52

26
Örnek 7.6 - WITH CHECK OPTION
Aşağıdaki örneği düşünün:

CREATE VIEW LowSalary


AS SELECT * FROM Staff WHERE salary > 9000;
CREATE VIEW HighSalary
AS SELECT * FROM LowSalary
WHERE salary > 10000
WITH LOCAL CHECK OPTION;
CREATE VIEW Manager3Staff
AS SELECT * FROM HighSalary
WHERE branchNo = ‘B003’;
53

Örnek 7.6 - WITH CHECK OPTION


UPDATE Manager3Staff
SET salary = 9500
WHERE staffNo = ‘SG37’;

• Bu güncelleştirme başarısız olur: güncelleme


HighSalary’de satır kaybolmasına neden olsa
da, satır LowSalary’de kaybolmaz.
• Ancak, güncelleştirme maaşı 8000’e
ayarlamaya çalışırsa, güncelleştirme başarılı
olur, çünkü satır artık LowSalary’nin parçası
değildir.
54

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:

Bu özellikler ACID; A: atomicity; C: consistency; I: isolation;


D: durability) özellikleri olarak bilinir. Hareket işlem
sistemlerinin bu dört özelliği sağlayabilmesi, hareketlerin her
koşulda geçerliliğini ve sonuçlarının öngörülebilirliğini sağlar;
yönetim ve denetim yükünü azaltı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

Erişim Kontrolü - Yetkilendirme Tanımlayıcıları ve Sahiplik

Yetkilendirme tanımlayıcı bir kullanıcının


kimliğini belirlemek için kullanılan normal bir
SQL tanımlayıcıdır. Genellikle ilişkili bir şifreye
sahiptir.
Kullanıcı hangi nesnelere başvurabilir ve hangi
işlemleri bu nesneler üzerinde yapabilir
belirlemek için kullanılır.
SQL’de oluşturulan her nesnenin, ait olduğu
şemanın AUTHORIZATION cümleciğinde
tanımlandığı gibi, bir sahibi vardır.
Sahibi onun hakkında bilen tek kişidir.
66

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]

YetkiListesi yukarıdaki yetkilerdan bir veya


daha fazlasından (virgülle ayırarak) oluşur.
ALL PRIVILEGES Bir kullanıcıya tüm yetkileri
verir.

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

Örnek 7.7/8 - GRANT


Yöneticiye Staff (personel) tablosunun tüm
yetkilerini verin.
GRANT ALL PRIVILEGES
ON Staff
TO Manager WITH GRANT OPTION;

Personnel ve Director kullanıcılarına Staff


tablosunda SELECT ve salary sütununda
UPDATE yetkisi verin.
GRANT SELECT, UPDATE (salary)
ON Staff
TO Personnel, Director; 72

36
Örnek 7.9 - PUBLIC‘e Specifik Yetkiler Verme (GRANT )

Tüm kullanıcılara Branch (Şube) tablosunda


SELECT yetkisi verin.

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

You might also like