The Relational Data Model and Relational Database Constraints

advertisement
4. İlişkisel Veri Modeli ve İlişkisel Veritabanı Kısıtları
(The Relational Data Model and Relational Database Constraints)
4.1. İlişkisel Model Kavramı (Relational Model Concepts)
4.1.1. Alan, Nitelik, Kayıt, Varlıklar (Domains, Attributes, Tuples, and Relations)
4.1.2. Varlıkların Karakteristiği (Characteristics of Relations)
4.1.3. İlişkisel Model Gösterimi (Relational Model Notation)
4.2. İlişkisel Model Kısıtları ve İlişkisel Veritabanı Şeması
(Relational Model Constraints and Relational Database Schemas)
4.2.1. Alan Kısıtları (Domain Constraints)
4.2.2. Anahtar Kısıtları ve NULL Değeri üzerindeki Kısıtlar
(Key Constraints and Constraints on NULL Values)
4.2.3. İlişkisel Veritabanı ve İlişkisel Veritabanı Şeması
(Relational Databases and Relational Database Schemas)
4.2.4. Bütünlük, Referans Bütünlüğü, Yabancı Anahtar
(Integrity, Referential Integrity and Foreign Keys)
4.2.5. Kısıtların Diğer Çeşitleri (Other Types of Constraints)
4.3. Güncelleme Operasyonu, İşlemler ve Kısıtlama İhlallerinin Çözülmesi
(Update Operations, Transactions and Dealing with Constraint Violations)
1
4.3.1. Ekleme Operasyonu (The Insert Operation)
4.3.2. Silme Operasyonu (The Delete Operation)
4.3.3. Güncelleme Operasyonu (The Update Operation)
4.3.4. İşlem Kavramı (The Transaction Concept)
!!!!! Bu ünitede dikkat etmemiz gereken, üniteyi anlamamızı kolaylaştıracak bir uyarıda bulunalım;
Ünitede geçen Relation/ Relational ifadesi İlişki/İlişkisel şeklinde sözlük anlamı vardır. Fakat bu
ünitede bu kavramı bildiğimiz varlıklar arasındaki ilişki (relationship) olarak algılamamalıyız.
Burada bahsedilen varlık veya varlıkların tablolara dökülmüş hali olarak algılamalıyız. Detaylı
tanımlama ileride verilmiştir. Başlıklarda ilişkisel kavramı kullanılmış fakat konu anlatımında varlık
ismi ile kullanılmıştır.
2
4. İlişkisel Veri Modeli ve İlişkisel Veritabanı Kısıtları (The
Relational Data Model and Relational Database Constraints)
İlişkisel veri modeli ilk olarak 1970 yılında IBM Araştırmada Ted Codd (Codd 1970) tarafından tanıtıldı,
kolaylığından ve matematiksel temelinden dolayı hemen dikkat çekti. Model, değerlerin tablosu gibi görünen,
temel yapıtaşı küme teorisi ve birinci dereceden mantık kuramı olan matematiksel ilişki kavramını kullanır. Bu
bölümde modeli ve kısıtlamaların temel özelliklerini tartışacağız.
İlişkisel modelin ilk ticari uygulamaları, 1980'lerin başında kullanılabilir hale geldi. Bu örnekler IBM ve
ORACLE DBMS leri olarak geldi. O zamandan beri, model ticari sistemlerde çok sayıda uygulanmıştır. Güncel
ilişkisel DBMSler (RDBMS), DB2 and Informix Dynamic Server (from IBM), Oracle and RDB (from Oracle),
Sybase DBMS (from Sybase) and SQLServer and Access (from Microsoft). Buna ek olarak, MySQL ve
PostgreSQL gibi birçok açık kaynak sistemleri de mevcuttur.
İlişkisel modelin öneminden dolayı, bu bölüm tüm bu model ve onunla ilişkili bazı diller için ayrılmıştır.
Bundan sonraki bölümlerde ilişkisel DBMSler için bir standart olan SQL sorgu dilini inceleyeceğiz.
İlk olarak ilişkisel model olarak sunulan veri modeli, hiyerarşik ve network modelini içerir. Bunlar 1960larda
ortaya atılmış, 60ların sonunda ve 70lerin başında uygulanmaya başlanmıştır. Bu modeller ve sistemler artık eski
veri tabanı sistemleri olarak adlandırılır.
3
4.1. İlişkisel Model Kavramı (Relational Model Concepts) (İlişki/varlık/tablo)
İlişkisel model, varlıkların bir koleksiyonu olan bir veritabanını temsil eder. Her varlık bir ölçüde değerler
tablosunu veya kayıtların yatay/düz dosyasını (flat file) andırır. Her kayıt, basit bir doğrusal (linear) ya da
yatay/düz (flat) bir yapıya sahip olduğundan yatay/düz dosya adı verilir. Örneğin, şekil 1.2 de dosyaların
veritabanı, ilişkisel model gösterimine benzer. Ancak yakında göreceğimiz gibi varlık ve dosyalar arasında önemli
farklar bulunur.
Bir varlık, değerler tablosu olarak düşünüldüğünde, tablodaki her satır ilgili veri değerlerinin bir koleksiyonunu
temsil eder. Bir satır genellikle gerçek dünya varlığı ya da ilişkisine karşılık gelen bir gerçeği ifade etmektedir.
Tablo adı ve sütun adları her satırda değerlerin anlamını yorumlamaya yardımcı olmak için kullanılmaktadır.
Örneğin, STUDENT olarak adlandırılan şekil 1.2nin ilk tablosundaki her satır, belirli bir öğrenci varlığı
hakkındaki gerçekleri temsil eder. Name, Student_number, Class, and Major gibi sütun isimleri her satırdaki veri
değerlerini nasıl yorumlayacağımızı belirtir. Sütundaki her değer aynı veri tipindedir.
İlişkisel model terminolojisinde, bir satır bir tuple'ı(Kayıt Demeti), her sütun başlığı bir niteliği ve her tablo bir
varlığı ifade eder. Her sütunda görünebilen değerlerin türlerini açıklayan veri türü, olası değerlerin domaini (alanı)
tarafından temsil edilir. Şimdi bu terimleri açıklayalım.
4.1.1. Alan, Nitelik, Kayıt Demeti , Varlıklar (Domains, Attributes, Tuples, and Relations)
Bir domain D, atomik değerlerin (ilişkisel model söz konusu olduğunda daha fazla bölünemeyen anlamındadır)
kümesidir. Domain belirlemek için kullanılan yaygın metod, veri türünü belirler. Domain için bazı örnekler
4
aşağıdadır;
•Usa_phone_numbers; Amerikada geçerli olan 10 digit rakam değer seti.
•Local_phone_numbers; Amerikada geçerli belirli yerleşim kodu için 7 digit rakam değer seti.
•Social_security_numbers; Amerikada geçerli sosyal güvenlik numarası için 9 digit rakam değer seti.
Yukarıdakiler domainin mantıksal tanımlarıdır. Bir veri türü (data type) ya da biçimi (format) her bir domain
için belirtilir. Örneğin, Usa_phone_numbers domain için veri türü string karakter formu olarak (ddd)ddddddd
şeklinde gösterilebilir. Burada her d nümerik (decimal) digit ve ilk üç digit alan kodudur. Employee_ages için
veri türü 15-80 arası integerdır. Böylece domain; ad, veri türü ve formatı verir. Domainin değerini yorumlamak
için ek bilgiler de verilebilir ; örneğin Person_weights gibi nümerik domain, kilogram gibi ölçü birimlerine
sahip olmalıdır.
R(A1 , A2 , ...,A n ) şeklinde gösterilen R varlık şeması (örneği), A1 , A2 , ...,A n varlık listesinin R isimli
bağlantılarından oluşur. R varlık şemasında, her varlık A i , D domaini tarafından oynanan rolun ismidir. D, A i
nin domainidir ve dom( A i ) şeklinde gösterilir. Bir varlık şeması ilişki tanımlamak için kullanılır; R, bu varlığın
ismidir. Bir varlığın derecesi varlık şemasının niteliklerinin sayısıdır. Üniversite öğrencileri hakkında bilgi
depolayan yedi dereceli bir varlık, her öğrenciyi açıklayan yedi niteliği içerecektir. Aşağıdaki gibi;
STUDENT(Name, Ssn, Home_phone, Address, Office_phone, Age, Gpa)
Her niteliğin veri türünü kullanarak, tanım aşağıdaki gibi yazılabilir:
STUDENT(Name: string, Ssn: string, Home_phone: string, Address: string,Office_phone:
string, Age: integer, Gpa: real)
Bu varlık şeması için, STUDENT yedi nitelikli varlığın adıdır. Yukarıdaki tanımda, niteliklere string veya 5
integer gibi veri türleri ataması yapıldı. Daha doğrusu, STUDENT varlığı niteliklerinin bazıları için aşağıdaki
gibi önceden tanımlanmış domainleri belirtebiliriz :
dom(Name) = Names;
dom(Ssn) = Social_security_numbers;
dom(HomePhone) =USA_phone_numbers,
dom(Office_phone) = USA_phone_numbers,
dom(Gpa) =Grade_point_averages.
Varlık içinde bulundukları konuma göre bir varlık şemasının niteliğine işaret etmesi de mümkündür; bu nedenle
STUDENT varlığının ikinci niteliği SSN, dördüncü niteliği Address'tir. R(A1 , A2 , ...,A n ) veya r(R) şeklinde
gösterilen varlık şemasının r varlık örneği, r  {t1 , t2 , ..., tm } şeklinde n kayıtlı bir settir. Her n kayıtlı t  {v1, v2 , ..., vm }
, şeklinde n sıralı değerin listesidir. Burada her değer vi , 1 ≤ i ≤ n iken dom ( A i )'nin bir elemanıdır veya
NULL değerlidir. A i niteliğine karşılık gelen kayıt t deki i. değer, t[ A i ] veya t.Ai şeklinde gösterilir.
Şekil 3.1, STUDENT şemasına karşılık gelen STUDENT varlığının bir örneğidir. Varlıktaki her kayıt belirli bir
öğrenci varlığını temsil eder.
Varlığı, her kaydın bir satıra ve
her niteliğin bu sütundaki
değerlerin rol ya da yorumunu
gösteren bir sütun başlığına
karşılık geldiği bir tablo olarak
görüntüleriz. NULL değeri, bazı
bireysel STUDENT kayıtları
6
için değeri bilinmeyen veya
olmayan niteliği temsil eder.
Bir varlık örneği r(R), matematiksel olarak dom(A1), dom(A2), ..., dom(An) üzerinde n. derece varlık ihtiva
eder. Burada domainlerin kartezyen çarpımı kullanılır;
r  R   (dom  A1   dom  A2   ...  dom  An )
Kartezyen çarpım, domainden gelen değerlerin tüm olası kombinasyonlarını belirtir. Bu nedenle, domain D
üzerinde |D| olarak (tüm alan adları sonlu olduğunu varsayarsak) , değerlerin toplam sayısı veya önem oranını
gösterirsek, kartezyen çarpımdaki toplam kayıt sayısı;
|dom(A1 )|  dom(A2 )|  ...  dom(A n )|
Tüm domainlerin çarpımları, varlık örneği r(R)de var olabilecek kayıt ve örneklerin mümkün olan toplam
sayısını gösterir. Tüm bu olası kombinasyonların, verilen zamandaki varlık örneği, sadece kayıtları yansıtır.
Genel olarak, gerçek dünyanın örnekleri değiştiğinden dolayı varlık örnekleri başka örneklere dönüşür. Ancak R
şeması nispeten durağan ve değişiklikler seyrek gelişir.
Bazı niteliklerin aynı domaine sahip olması mümkündür. Nitelik isimleri, domain için farklı rolleri veya
yorumları gösterebilir. Örneğin; STUDENT varlığında, öğrencilerin ev telefonlarını gösteren
USA_phone_numbers ve öğrencilerin
ofis numaralarını gösteren
Office_phone aynı domaine sahiptir.
7
4.1.2. Varlıkların Karakteristiği (Characteristics of Relations)
Varlıkların tanımı bir dosya veya bir tablodan farklı bir varlık kurma gibi belirli özellikleri içerir. Şimdi bazı
karakteristik özellikleri inceleyeceğiz.
Varlıktaki kayıtların düzenlenmesi; varlık kayıtların bir seti olarak tanımlanır. Matematiksel olarak, Bir setin
elemanları arasında hiçbir düzen yoktur. Bu nedenle varlıktaki kayıtlar belirli bir düzene sahip değildir. Diğer bir
deyişle, bir varlık kayıtların düzenlenmesine duyarlı değildir. Ancak, kayıtlar fiziksel olarak diskte
depolanır.(veya bellekte), bu yüzden kayıtlar arasında bir düzen vardır. Bu birinci, ikinci. n.inci ve son kayıt diye
düzen içerir. Benzer şekilde, bir varlığı tablo olarak gösterdiğimizde, kayıtlar belli bir sıralama ile gösterilir.
Kayıt demetinin sıralanması varlık tanımının bir parçası değildir, çünkü varlık mantıksal ve soyut seviyede
temsile çalışır. Birçok kayıt sıralaması aynı varlık üzerinde belirtilebilir. Örneğin, şekil 3.1de STUDENT
varlığındaki kayıtlar Name,SSN, Age veya başka niteliklere göre sıralanabilir. Varlığın tanımı herhangi bir
sıralama belirtmez; birini diğerinin önüne geçirmek için herhangi bir önceliğimiz yoktur. Bu nedenle, Şekil 3.2'de
gösterilen varlık da Şekil 3.1.de gösterilene denk kabul edilir. Bir varlık bir dosya olarak uygulandığında ya da bir
tablo olarak gösterildiğinde, belirli bir sıralama dosyanın kayıtları veya tablonun satırları üzerinde belirtilebilir.
Kayıtların Değer Sıralaması ve Alternatif Varlık Tanımlama; Önceki varlık tanımlamamıza göre, n-kayıt
demeti n değerin listesi olarak listelenir, bu yüzden değerlerin (dolayısıyla varlık şemasındaki niteliklerin)
sıralanması önemlidir. Ancak, daha soyut düzeyde, nitelikler ve değerler arasındaki uygunluk (benzeşme) devam
ettiği sürece niteliklerin ve değerlerin sıralaması önemli değildir.
8
Değeri bilinmeyen veya değeri olmayan (kayıt içinde uygulanamayan) NULL değeri önemli bir kavramdır.
Örneğin şekil 3.1de bazı STUDENT kayıt demetleri ofis numaraları için NULL değerine sahiptir. Genel olarak,
NULL değerinin bir çok anlamı vardır; bilinmeyen, olmayan veya uygulanamayan değerdir.Örneğin, yabancı
öğrenciler için TCN yoktur, bu yüzden bu alan NULL değerini alır.
İki NULL değerinin karşılaştırılması belirsizliğe yol açar, eğer A ve B müşterinin adres değeri NULL ise bunun
anlamı ikisinin de aynı adrese sahip olduğudur. Veritabanı tasarımı sırasında, mümkün olduğunca NULL
değerleri kaçınmak en iyisidir.
Varlığın yorumlanması (Anlamı); Varlık şeması açıklama veya bir tür iddia olarak yorumlanabilir.Örneğin;
şekil 3.1deki STUDENT varlığının şeması genel olarak öğrenci varlığının Name, Ssn, Home_phone, Address,
Office_phone, Age, and Gpa gibi özelliklere sahip olduğunu iddia eder. Varlıktaki her bir tuple bir gerçek veya
belirli bir iddia olarak yorumlanabilir. Örneğin şekil 3.1 deki ilk tuple, Benjamin Bayer isminde, 305-61-2435
Ssn numarası olan ve Age değeri 19 olan bir öğrencinin varlığı iddiasındadır.
9
Bir varlık şemasının alternatif yorumlanması bir hüküm bildirir, her tupledaki değerler, hüküm belirten değerler
olarak yorumlanır. Örneğin; STUDENT hükmü (Name, Ssn, ...) şekil 3.1deki STUDENT varlığındaki 5 tuple için
geçerlidir. Bu tuplelar gerçek dünyadaki 5 farklı önermeyi yada gerçeği temsil eder.
4.1.3. İlişkisel Model Gösterimi (Relational Model Notation)
Aşağıdaki gösterim kullanacağız:
•n dereceli varlık şeması R, R(A1 , A2 , ...,A n ) ile gösterilmiştir.
•Büyük harf Q, R, S varlık adlarını belirtir.
•Küçük harf q, r, s ilişki örneklerini/durumlarını belirtir.
•t, u, v harfleri tupleları belirtir.
•Genelde, STUDENT(Name, Ssn, ...) sadece varlık şemasını belirtirken,
STUDENT gibi varlık şemalarının ismi, bu varlıktaki mevcut tuple setini belirtir. Bir A nesnesi R.A şeklinde
gösterim yapılarak R varlık ismi ile yetkilendirilebilir.Örneğin STUDENT.Name yada STUDENT.Age gibi.
Çünkü aynı isim farklı varlıklardaki 2 nitelik için kullanılabilir. Fakat belirli varlıklardaki tüm nitelik isimleri ayrı
olmalıdır.
•Varlık r(R) deki n-tuple t, t  {v1 , v2 , ..., vm } şeklinde gösterilir. Burada vi , A i niteliğine karşı gelen değerdir.
Aşağıdaki gösterimde tupleların bileşen değerlerini belirtir; hem t[ A i ] hem de t. A i , A i niteliği için tdeki vi
değerini belirtir.
•Rden nitelikler belirten Au , A w , ...,A z için, hem t[ Au , A w , ...,A z ] hem de t.( Au , A w , ...,A z ), vu , vw , ...,vz
10
değerlerinin alt küme gibi alt tupleını (subtuple) belirtir.
Örneğin; Şekil 3.1de STUDENT varlığından,
tuple t = <‘Barbara Benson’, ‘533-69-1238’, ‘(817)839-8461’, ‘7384 Fontana Lane’, NULL, 19, 3.25>
t[Name] = <‘Barbara Benson’>, and t[Ssn, Gpa, Age] = <‘533-69-1238’,3.25, 19>.
4.2. İlişkisel Model Kısıtları ve İlişkisel Veritabanı Şeması (Relational Model Constraints
and Relational Database Schemas)
Şimdiye kadar, tekil varlıkların özelliklerinden bahsettik. İlişkisel veritabanında, genellikle birçok varlıklar
olacaktır ve bu varlıklardaki tuplelar genellikle çeşitli şekillerde ilişkilidir. Tüm databasein durumu, zaman içinde
belirli bir noktada bütün varlıkların durumuna karşılık gelecektir. Bir veritabanı gerçek değerleri üzerinde
genellikle çok sayıda kısıtlama veya sınırlamalar vardır. Bölüm 1.6.8 de tartiştiğimiz gibi bu kısıtlar databasein
temsil ettiği miniworlddeki kurallardan ortaya çıkmıştır. Bu bölümde, ilişkisel database üzerinde tanımlanmış
dataların üzerindeki çeşitli kısıtları göreceğiz. Veritabanları üzerindeki kısıtlamalar genellikle üç ana kategoriye
ayrılabilir:
1. Kısıtlar veri modelinin doğasından ileri gelir. Bunlara içsel/doğuştan model tabanlı kısıtlamalar (inherent
model-based constraints) veya örtülü kısıtlar (implicit constraints) denir.
2. Veri modelin şemasında doğrudan belirtilen ve DDL ile tanımlanan kısıtlardır. Bunlara şema tabanlı kısıtlar
11
(schema-based constraints) veya açık kısıtlar (explicit constraints) diyoruz.
3. Veri modelin şemasında doğrudan belirtilmeyen ve dolayısıyla uygulama programı tarafından uygulanması
gereken kısıtlardır. Bunlara uygulama tabanlı veya anlamsal kısıtlar veya iş kuralları denir.
Bölüm 4.1.2 de tartıştığımız varlık özellikleri ilişkisel modelin doğal/yapısal kısıtlamalarıdır ve birinci
kategoriye aittir. Örneğin; tekrarlanmış tuplelara sahip varlık kısıtı doğal/yapısal kısıt olarak kabul edilemez. Bu
bölümde ikinci kategorideki yani DDL sayesinde ilişkisel şemada gösterilen kısıtları göreceğiz. Üçüncü
kategorideki kısıtlar daha geneldir, varlık anlamları yanı sıra niteliklerin davranışları ilgilidir ve veri modeline
uygulamak daha zordur. Bu yüzden genellikle uygulama programı içinde yer alır.
Kısıtların diğer önemli kategorisi, fonksiyonel bağımlılığı ve çok değerli bağımlılığı içeren veri bağımlılığıdır.
Bunlar ilişkisel databasein dizaynının "goodness" (iyilik/kullanışlılık) ını test etmemize olanak sağlar.
Normalization (normalizasyon) da kullanılır. (Kitaptaki bölümü 15,16) Şema-tabanlı kısıtlar domain kısıtı,
anahtar kısıtı, NULL değeri üzerindeki kısıtları, varlık bütünlüğü kısıtlamaları, bilgi tutarlılığı kısıtlamaları
içerir.
4.2.1. Alan Kısıtları (Domain Constraints)
Domain kısıtları, her bir tuple'ın içinde, A niteliğinin her bir değeri domain dom(A)dan bir atomic değer olmak
zorunda şeklinde belirtilmiştir. Bölüm 4.1.1 de domainin tanımlama yollarını belirtmiştik. Domaine karşılık
gelen veri türleri integer için standart nümerik veri türü (short integer, integer, and long integer gibi) ve reel
number (float and doubleprecision float) içerir. Characters, Booleans, fixed-length strings, and variable-length
strings gibi veri türleri tarih, saat, para yada diğer özel veri türleri için uygundur.
12
4.2.2. Anahtar Kısıtları ve NULL Değeri üzerindeki Kısıtlar (Key Constraints and Constraints
on NULL Values)
İlişkisel modelde, varlık tupleların kümesi olarak tarif edilir. Tanım gereği, kümenin tüm elemanları ayrık/farklı
(distinct) olduğundan, varlıktaki tüm tuplelar da ayrık/farklı olmalıdır. Bunun anlamı, iki tuple tüm nitelikler
için aynı değerler kombinasyonuna sahip olamaz. Genellikle, "R varlık şemasının hiçbir iki r varlık örneği aynı
değer kombinasyonuna sahip olamaz" özelliği ile R varlık şemasının niteliklerinin altkümesi vardır. SK ile
tanımlanmış bir nitelik altkümesi düşünelim; R nin r varlık örneklerinde t1 ve t2 farklı tupleları için;
t1[SK] ≠ t2[SK]
SK niteliğinin her bir kümesi, R varlık şemasının superkey (super anahtarı) olarak adlandırılır. Süper anahtar
SK, , "R varlık şemasının hiçbir iki r varlık örneği aynı değer kombinasyonuna sahip olamaz" olarak verilen
uniqueness (benzersizlik) kısıtını tanımlar. Her varlık en az bir default super anahtara sahiptir. Superkey
gereksiz niteliklere sahip olabilir fakat en kullanışlı düşünce gereksiz niteliklere sahip olmayan anahtardır. R
varlık şemasının K anahtarı, A niteliğini K dan kaldırarak ek özelliklerle beraber Rnin superkeyi olabilir.
Anahtar iki özelliği karşılar;
1.Herhangi bir varlık örneğindeki iki ayrık tupleın , anahtar içindeki tüm nitelik değerleri aynı olamaz. Bu aynı
zamanda superkeyi de sağlar.
2. Buna minimal (asgari) superkey denir. Superkeyin herhangi bir niteliğini silemeyiz ve hala birinci şarttaki
13
uniqueness kısıtı geçerlidir. Fakat bu özellik superkey için gerekli değildir.
İlk özellik hem anahtar hem super anahtarı sağlamasına rağmen, ikinci özellik sadece anahtarı sağlar. Anahtar
superkey olabilir ama tersi her zaman doğru değildir. Şekil 3.1 deki STUDENT varlığını düşünün. {SSN}
nitelik kümesi STUDENT'ın anahtarıdır. Çünkü 2 öğrenci tuple'ı aynı SSN değerini alamaz. Herbir SSNi içeren
nitelik seti {Ssn, Name, Age} superkeydir. Fakat superkey {Ssn, Name, Age} STUDENTın anahtarı değildir.
Çünkü Name ve Age nitelikleri superkey setinden çıkarılabilir. Genel olarak, tek bir nitelikle oluşturulan
SuperKey da bir anahtardır. Birden fazla niteliğe sahip bir anahtar, uniqueness özelliğine sahip nitelikler
gerektirir.
Anahtar niteliğin değeri, varlıktaki her bir tupleı benzersiz bir şekilde tanımlamamızı sağlar. Örneğin; Ssn 30561-2435 değeri, STUDENT varlığındaki Benzjamin Bayere benzersizce karşılık gelir. Anahtara karşılık gelen
nitelik kümesinin, varlık şemasının bir özelliği olduğuna dikkat edilmelidir ; şemadaki her bir geçerli varlık
durumunu sağlaması gereken bir kısıttır. Anahtar, niteliğin anlamından belirlenir ve bu özellik time-invarianttır.
(zamanla değişmeyen); varlığa yeni tuplelar eklendiğinde bu durum devam etmelidir. Örneğin; şekil 3.1de
STUDENT varlığındaki name niteliğini anahtar olarak belirleyemeyiz. Çünkü bir zamanda iki öğrencinin aynı
ismi alabileceği unutulmamalıdır.
Genelde, varlık şeması birden fazla
anahtara sahiptir. Bu durumda her
bir anahtar candidate key (aday
anahtar)dır. Şekil 3.4 de CAR
varlığı iki aday anahtara sahiptir;
14
License_number and Engine_serial_number. Aday anahtarlardan birini varlığın primary keyi (birincil anahtarı)
olarak belirlemek yaygındır. Şekil 3.4 teki gibi, varlık şemasındaki primary key lerin altı çizilir kuralı
uygulanmıştır. Aday anahtarlar içinden primary key seçiminin keyfi olduğu unutulmamalıdır. Ancak, tekil
niteliği veya az karakterli niteliği seçmek genellikle daha iyidir.
Diğer bir kısıt NULL değerine izin verilip verilmeyeceğidir. Örneğin; her geçerli STUDENT tupleı Name
niteliğine sahip olmalı yani Name niteliği NULL olmamalıdır.
4.2.3. İlişkisel Veritabanı ve İlişkisel Veritabanı Şeması (Relational Databases and Relational
Database Schemas)
Şimdiye kadar ki tanımlamalar ve kısıtlar tekil varlık ve onların nitelikleri içindi. İlişkisel database genellikle
çeşitli yollarla ilişkili birçok varlık ve tuplelar içerir. Bu bölümde ilişkisel databasei ve ilişkisel database
şemasından bahsedeceğiz.
S ilişkisel database şeması, S = {R1, R2, ..., Rm} varlık şemalarının setidir ve integrity constraintslerin IC
(bütünlük kısıtlarının) setidir. S'in ilişkisel database durumu DB, DB = {r1, r2, ..., rm} varlık örneklerinin setidir.
Burada bütünlük kısıtını sağlayan her bir ri, Rinin bir durumu/örneğidir.
15
Şekil 3.5 COMPANY ilişkisel database şemasını gösterir.
Şekil 3.6 COMPANY ilişkisel databasein durumunu gösterir.
İlişkisel database dediğimizde bu iki şekil düşünülmelidir; İlişkisel database şeması ve ilişkisel database durumu.
Tüm bütünlük kısıtlarına uymayan durum geçersiz (invalid) durum, tersine ise valid (geçerli) durum denir.
Şekil 3.5de, departman numarasını veren Dnumber niteliği hem DEPARTMENT hem DEPT_LOCATIONS için
kullanılır. Aynı şekilde EMPLOYEE deki Dno ve PROJECTteki Dnum dan aynı düşüncenin ürünüdür. Farklı
isimlerle aynı gerçek dünya nesnesini niteleyebileceğini görürüz. Aynı isimle farklı nesneyi de tanımlayabilir.
Örneğin PROJECT için Pname ve
DEPARTMENT için Dname. İlişkisel
modelin bazı erken sürümlerinde,
aynı gerçek dünya kavramının tüm
varlıklarda aynı nitelik ismini alması
varsayımı yapıldı. Fakat bu aynı
varlıkta farklı bir rol ile kullanıldığında
problem yarattı. Örneğin sosyal
güvenlik numarası kavramı şekil 3.5
deki EMPLOYEE varlığında iki defa
yer alır. Biri employee'nin SSN'i biri
supervisor'un SSN. Böylece bu ikisine
16
farklı nitelik isimleri verilmiştir;
Ssn ve Super_ssn. Çünkü bunlar aynı
varlıktan gelse de farklı anlamlar taşımaktadır.
Her ilişkisel DBMS, ilişkisel database şemasını tanımlamak için DDL'e sahip olmalıdır. Güncel ilişkisel
DBMSler çoğunlukla bu amaç için SQL kullanırlar.
Bütünlük kısıtlamaları bir veritabanı şeması belirtilir ve bu şemanın her geçerli veritabanı durumuna uyması
beklenir. Ek olarak domain, anahtar
ve NOT NULL kısıtları ilişkisel
modelin bir parçası olarak
düşünülür; varlık bütünlüğü
ve referans bütünlüğü.
4.2.4. Varlık Bütünlüğü,
Referans Bütünlüğü, Yabancı
Anahtar (Entity Integrity,
Referential Integrity and
Foreign Keys)
Varlık bütünlüğü kısıtı, primary
key'in NULL değer alamayacağını
belirtmektedir. Çünlü varlıktaki her
bir tuple'ı bireysel olarak refere
etmek durumundadır. NULL değerli
primary key hangi tuple'ı işaret
edeceğini bilemez.
17
Anahtar kısıtlamaları ve varlık bütünlüğü
kısıtlamaları teker teker varlıklar
üzerinde tanımlanır. Referans bütünlüğü
kısıtı iki varlık arasında tanımlanır ve bu
varlıklardaki tupleların tutarlığını
korumak için kullanılır. Referans
bütünlüğü, bir varlıktaki tuple'ın başka
bir varlıkta var olan bir tuple'ı refere
etmesi gerektiğine dayanır. Örneğin
Şekil 3.6da, EMPLOYEE nin Dno
niteliği her çalışanın çalıştığı departman
numarasını verir. Böylece
DEPARTMENT varlığında bir tupleı
işaret etmiş olur.
Referans bütünlüğünü iyi anlayabilmek
için foreign key (yabancı anahtarı) tanımlamamız gerekir. Yabancı anahtar için aşağıda verilen koşullar, R1 ve
R2 varlık şemaları arasındaki referans bütünlüğü kısıtını belirtir. R1 varlık şemasındaki nitelik seti FK, R2
varlığını aşağıdaki kullarla refere eden R1 varlığının yabancı anahtarıdır:
1-FK daki nitelikler R2nin PK birincil anahtar niteliği ile aynı domaine sahiptirler.
18
2-R1deki r1 in t1 tuple'ındaki FKnın değeri, R2deki r2nin t2 sindeki PK değerini vermelidir. t1[FK] = t2[PK]
tuple t1 tuple t2 yi refere eder denir.
Böylece şekil 3.6 daki EMPLOYEE varlığındaki Dno, DEPARTMENT varlığını referans ettiğinden yabancı
anahtar olur. Bunun anlamı Dno daki her bir değer DEPARTMENT varlığındaki bir tuple.ı gösterecek olmasıdır.
Örneğin şekil 3.6da EMPLOYEEden ‘John Smith’ için olan tuple, DEPARTMENT varlığında ‘Research’
departmanını refere eder.
Yabancı anahtarın kendi varlığını
refere ettiği unutulmamalıdır.
Örneğin EMPLOYEE daki
Super_ssn niteliği o çalışanın
supervisorununu ve bu kişi de bir
çalışan olduğundan yine
EMPLOYEE varlığındaki ssn
niteliğini refere eder. Böylece
Super_ssn de yabancı anahtar olur.
Şekil 3.6 daki ‘John Smith’
çalışanının tuple ı supervisoru olan
‘Franklin Wong' tupleını işaret eder.
Şekil 3.7, Şekil 3.5deki şemaları
referans bütünlüğü kısıtını
diyagramlar yardımıyla gösterir.
19
Şekil 3.7, Şekil 3.5deki şemaları referans bütünlüğü kısıtını diyagramlar yardımıyla gösterir. Tüm referans
bütünlüğü kısıtlarını ilişkisel database şemasında belirtmeliyiz. Tüm bu anahtar, varlık ve referans bütünlüğü
gibi kısıtları DDL ile birlikte tanımlarız.
4.2.5. Kısıtların Diğer Çeşitleri (Other Types of Constraints)
Bazı database'e özel kısıt örneği; bir çalışanın maaşı onun supervisorunun maaşını geçemez veya bir çalışanın
haftalık çalışma saati 56 nın üstünde olamaz gibidir. Bu tür kısıtlar uygulama içinde de belirtilebilir. Triggers ve
assertion (iddia) gibi mekanizmalarda kullanılabilir.SQLde, CREATE ASSERTION ve CREATE TRIGGER
komutları bunlar için kullanılır.
Diğer bir çeşit ise Transition (değişme) kısıtıdır. Örneğin çalışan maaşları yalnızca artabilir gibi.
4.3. Güncelleme Operasyonu, İşlemler ve Kısıtlama İhlallerinin Çözülmesi
(Update Operations, Transactions and Dealing with Constraint Violations)
Bu bölüm, veritabanı modification (değişiklik) ve update işlemleri üzerinde yoğunlaşmaktadır. Veritabanında
varlıkların durumlarını değiştirebilir üç temel işlem şunlardır: Insert (Ekleme), Delete (Silme) ve Update
(Güncelleme). Yeni veri insert edilir, eski veri silinir ve var olan veri update edilir. İnsert varlığa/ tabloya bir veya
daha fazla tuple ekler, Delete tuple siler ve Update tupledaki bir veya daha fazla değeri değiştirir. Tüm bu
işlemler yapılırken bütünlük kısıtları ihlal edilmemelidir. Bu işlemleri tartışırken, teker teker hangi kısıtları nasıl
20
ihlal edebileceğine bakacağız.
4.3.1. Ekleme Operasyonu (The Insert Operation)
Insert operasyonu, R varlığı/tablosu içine nitelik değerleri listesinden oluşan yeni tuple tler ekler.
Insert, geçen bölümde tartıştığımız 4 çeşit kısıttan bir tanesini ihlal edebilir.
Eğer eklenen değerler uygun domainde değilse veya veri türü farklı ise domain kısıtı ihlal edilebilir.
Eğer eklenen bir tupledaki anahtar değer zaten başka bir tupleda mevcutsa anahtar kısıtı ihlal edilir.
Eğer yeni tupledaki primary key niteliğine NULL değeri atanırsa varlık bütünlüğü bozulur.
Eğer yeni tupledaki yabancı anahtar referans verilen tabloda mevcut değilse referans btünlüğü bozulmuş olur.
■ İşlem:
Insert <‘Cecilia’, ‘F’, ‘Kolonsky’, NULL, ‘1960-04-05’, ‘6357 Windy Lane, Katy, TX’, F, 28000, NULL, 4> into
EMPLOYEE.
Sonuç: Bu ekleme varlık bütünlüğü kısıtını ihlal eder. (birincil anahtar Ssn'e NULL değeri atanmış.), yani
reddedilir.
■ İşlem:
Insert <‘Alicia’, ‘J’, ‘Zelaya’, ‘999887777’, ‘1960-04-05’, ‘6357 Windy Lane, Katy, TX’, F, 28000,
‘987654321’, 4> into EMPLOYEE.
Sonuç: Bu ekleme anahtar kısıtını ihlal ediyor. Çünkü aynı Ssn değeri başka bir tupleda yer almaktadır. Yani
reddedilir.
■ İşlem:
Insert <‘Cecilia’, ‘F’, ‘Kolonsky’, ‘677678989’, ‘1960-04-05’, ‘6357 Windswept, Katy, TX’, F, 28000,
21
‘987654321’, 7> into EMPLOYEE.
Sonuç:Bu ekleme referans bütünlüğü kısıtını ihlal eder. Çünkü 7 numarasına karşılık gelen bir DEPARTMENT
yoktur.
İşlem:
Insert <‘Cecilia’, ‘F’, ‘Kolonsky’, ‘677678989’, ‘1960-04-05’, ‘6357 Windy Lane, Katy, TX’, F, 28000, NULL,
4> into EMPLOYEE.
Sonuç: Bu ekleme tüm kısıtları sağlar, bu yüzden kabul edillir.
Bir ekleme bir veya daha fazla kısıtlamaları ihlal ediyorsa, varsayılan (default) seçenek işlemin reddedilmesidir.
Bu durumda, DBMSin kullanıcıya bir neden sunması yararlı olacaktır. İşlem neden reddedildi? Başka bir durum
ise red nedeninin ortadan kaldırılması girişimidir; fakat bu genelde insert işleminden kaynaklanan ihlaller için
kullanılmaz. Daha çok delete ve update işlemleri için kullanılır.
İlk işlemde DBMS Ssn değerini kullanıcıya sorar, eğer geçerli bir Ssn ise kabul edilir. 3. işlemde kullanıcıya
geçerli bir Dno ile değiştirmesi gerektiği veya NULL değeri girilebileceği belirtilir.Başka bir seçenek ise
DEPARTMENT tablosuna Dnumber = 7 olacak şekilde yeni bir tupleın eklenebileceğidir. Bu eklemenin de yine
tüm kısıtları sağlaması gerekir.
4.3.2. Silme Operasyonu (The Delete Operation)
Delete işlemi sadece referans bütünlüğü kısıtını bozabilir. Silinen tuple başka bir tuple tarafıdan yabancı anahtar
olarak referans alınan bir tuple ise referans bütünlüğü bozulur.
■ İşlem:
Delete the WORKS_ON tuple with Essn = ‘999887777’ and Pno = 10.
Sonuç: Bu işlem kabul edilir ve bir tuple silinir.
22
■ İşlem:
Delete the EMPLOYEE tuple with Ssn = ‘999887777’.
Sonuç: Bu işlem kabul edilmez çünkü WORKS_ON tablosunda bu tupleı refere eden bir tuple bulunur.
■ İşlem:
Delete the EMPLOYEE tuple with Ssn = ‘333445555’.
Sonuç: Bu silme işlemi gerçekleşirse bir önceki işlemden çok daha büyük ihlallere sebep olacaktır. Çünkü bu ssn
EMPLOYEE, DEPARTMENT; WORKS_ON, DEPENDENT varlıklarında referans olarak gösterilir.
Bir delete işlemi ihlale neden olursa çeşitli seçenekler mevcuttur; ilk seçenek silme işleminin reddedilmesidir.
İkinci seçenek, cascade yada proragate (dalga dalga yayılma) denilen ; referans verilen tüm tupleların
silinmesidir. Örneğin 2. işlemde; DBMS otomatik olarak WORKS_ON daki Essn = ‘999887777' satırını da siler.
3. seçenek ise referans verilen tuple değerlerine NULL veya default değer atamak olarak belirtilir. Tabi burada
eğer referans verilen tuple primary key ise NULL değeri atanamaz.
Bu üç seçeneğin kombinasyonları da mümkündür. Örneğin; bu 3 ihlal düzeltici seçeneği uygulamak zorunda
kalmamak için, DBMS otomatik olarak WORKS_ON ve DEPENDENT daki tüm Essn = ‘333445555’ tuplelarını
siler. EMPLOYEE daki Super_ssn = ‘333445555 ve DEPARTMENT daki Mgr_ssn = ‘333445555’ tuplelarına da
NULL değeri veya başka geçerli değer atar.
Genelde referans bütünlüğü kısıtı DDL ile belirlendiğinde, DBMS database tasarımcısına bu seçenekleri
belirleme imkanı verir. Bunu SQL ve DDL içinde nasıl sağlayacağı sonraki bölümde gösterilmiştir.
23
4.3.3. Güncelleme Operasyonu (The Update Operation)
Update işlemi bir tupledaki bir veya daha fazla nitelik değerinin değiştirilmesi işlemi için kullanılır. Bu işlemde
hangi tupleın hangi niteliği için değiştirme işlemi yapılacağını belirtmek için koşul koymak büyük önem taşır.
■ İşlem:
Update the salary of the EMPLOYEE tuple with Ssn = ‘999887777’ to 28000.
Sonuç: Kabul edilir.
■ İşlem:
Update the Dno of the EMPLOYEE tuple with Ssn = ‘999887777’ to 1.
Sonuç: Kabul edilir.
■ İşlem:
Update the Dno of the EMPLOYEE tuple with Ssn = ‘999887777’ to 7.
Sonuç: Kabul edilmez, referans bütünlüğünü bozar.
■İşlem:
Update the Ssn of the EMPLOYEE tuple with Ssn = ‘999887777’ to‘987654321’.
Sonuç: Kabul edilmez, çünkü primary keyin unique özelliğini bozar. Bu değer başka bir tupleda birincil anahtar
olarak zaten mevcuttur.
Birincil veya yabancı anahtar niteliğine dokunmayan güncellemeler de genelde sorun yaşanmaz. Sadece DBMSin
veri türünü ve domaini kontrol etmesi gerekir. Birincil anahtarı değiştirmek birincil anahtarlı tuplelarda yapılan
silme ve ekleme işlemlerine benzer. Yabancı anahtarın değiştirimesinde ise dikkat edilmesi gereken yeni değerin
24
referans verilen varlıkta geçerli olmasıdır.
4.3.4. İşlem Kavramı (The Transaction Concept)
Transaction databaseden okuma, databasee yazma veya inserti update, delete gibi bazı database işlemleri içeren
yürütme programıdır. Transaction'un sonunda database geçerli ve tüm kısıtlara uygun şekilde kalmalıdır. Tek bir
transaction işlemi birden fazla yukarda sayılan işlemlerden içerebilir.
Örneğin; bir bankamatikte kullanıcının müşteri numarasını ve şifresini databaseden okuyarak kontrol eder ve
sonra hesap bakiyesini update eder. Bu işlemler bir transactiondur.
Online transaction processing (OLTP) gibi sistemlerde bu transaction işlemleri saniyede birkaç yüze ulaşır.
25
Download