Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

4. İlişkisel Veri Modeli ve İlişkisel Veritabanı Kısıtları

Benzer bir sunumlar


... konulu sunumlar: "4. İlişkisel Veri Modeli ve İlişkisel Veritabanı Kısıtları"— Sunum transkripti:

1 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) Alan, Nitelik, Kayıt, Varlıklar (Domains, Attributes, Tuples, and Relations) Varlıkların Karakteristiği (Characteristics of Relations) İ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) Alan Kısıtları (Domain Constraints) Anahtar Kısıtları ve NULL Değeri üzerindeki Kısıtlar (Key Constraints and Constraints on NULL Values) İlişkisel Veritabanı ve İlişkisel Veritabanı Şeması (Relational Databases and Relational Database Schemas) Bütünlük, Referans Bütünlüğü, Yabancı Anahtar (Integrity, Referential Integrity and Foreign Keys) 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)

2 4.3.1. Ekleme Operasyonu (The Insert Operation)
Silme Operasyonu (The Delete Operation) Güncelleme Operasyonu (The Update Operation) İş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.

3 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.

4 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. 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 aşağıdadır;

5 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ü 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. şeklinde gösterilen R varlık şeması (örneği), varlık listesinin R isimli bağlantılarından oluşur. R varlık şemasında, her varlık , D domaini tarafından oynanan rolun ismidir. D, nin domainidir ve dom( ) ş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 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 :

6 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 veya r(R) şeklinde gösterilen varlık şemasının r varlık örneği, şeklinde n kayıtlı bir settir. Her n kayıtlı , şeklinde n sıralı değerin listesidir. Burada her değer , 1 ≤ i ≤ n iken dom ( )'nin bir elemanıdır veya NULL değerlidir niteliğine karşılık gelen kayıt t deki i. değer, t[ ] veya ş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ı için değeri bilinmeyen veya olmayan niteliği temsil eder.

7 Bir varlık örneği r(R), matematiksel olarak dom(A1), dom(A2),
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; 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ı; 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.

8 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.

9 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, Ssn numarası olan ve Age değeri 19 olan bir öğrencinin varlığı iddiasındadır.

10 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. İlişkisel Model Gösterimi (Relational Model Notation) Aşağıdaki gösterim kullanacağız: n dereceli varlık şeması R, 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, şeklinde gösterilir. Burada , niteliğine karşı gelen değerdir. Aşağıdaki gösterimde tupleların bileşen değerlerini belirtir; hem t[ ] hem de t , niteliği için tdeki değerini belirtir. Rden nitelikler belirten için, hem t[ ] hem de t.( ), değerlerinin alt küme gibi alt tupleını (subtuple) belirtir.

11 Örneğin; Şekil 3.1de STUDENT varlığından,
tuple t = <‘Barbara Benson’, ‘ ’, ‘(817) ’, ‘7384 Fontana Lane’, NULL, 19, 3.25> t[Name] = <‘Barbara Benson’>, and t[Ssn, Gpa, Age] = <‘ ’,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 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 (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.

12 4.2.1. Alan Kısıtları (Domain Constraints)
Bölüm 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. 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 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.

13 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 uniqueness kısıtı geçerlidir. Fakat bu özellik superkey için gerekli değildir.

14 İ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 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;

15 License_number and Engine_serial_number
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. İ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.

16 Ş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 farklı nitelik isimleri verilmiştir; Ssn ve Super_ssn. Çünkü bunlar aynı varlıktan gelse de farklı anlamlar taşımaktadır.

17 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üğü. 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.

18 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. 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.

19 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.

20 Ş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. 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 ihlal edebileceğine bakacağız.

21 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, ‘ ’, ‘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. Insert <‘Alicia’, ‘J’, ‘Zelaya’, ‘ ’, ‘ ’, ‘6357 Windy Lane, Katy, TX’, F, 28000, ‘ ’, 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. Insert <‘Cecilia’, ‘F’, ‘Kolonsky’, ‘ ’, ‘ ’, ‘6357 Windswept, Katy, TX’, F, 28000, ‘ ’, 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.

22 4.3.2. Silme Operasyonu (The Delete Operation)
İşlem: Insert <‘Cecilia’, ‘F’, ‘Kolonsky’, ‘ ’, ‘ ’, ‘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. 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 = ‘ ’ and Pno = 10. Sonuç: Bu işlem kabul edilir ve bir tuple silinir.

23 ■ İşlem: Delete the EMPLOYEE tuple with Ssn = ‘ ’. Sonuç: Bu işlem kabul edilmez çünkü WORKS_ON tablosunda bu tupleı refere eden bir tuple bulunur. Delete the EMPLOYEE tuple with Ssn = ‘ ’. 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 = ‘ ' 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 = ‘ ’ tuplelarını siler. EMPLOYEE daki Super_ssn = ‘ ve DEPARTMENT daki Mgr_ssn = ‘ ’ 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.

24 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 = ‘ ’ to Sonuç: Kabul edilir. Update the Dno of the EMPLOYEE tuple with Ssn = ‘ ’ to 1. Update the Dno of the EMPLOYEE tuple with Ssn = ‘ ’ to 7. Sonuç: Kabul edilmez, referans bütünlüğünü bozar. ■İşlem: Update the Ssn of the EMPLOYEE tuple with Ssn = ‘ ’ to‘ ’. 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 referans verilen varlıkta geçerli olmasıdır.

25 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.


"4. İlişkisel Veri Modeli ve İlişkisel Veritabanı Kısıtları" indir ppt

Benzer bir sunumlar


Google Reklamları