Bütünlük Kuralları ve Kısıtlamalar

Kısıtlamalar, ilişkisel bir modelde çok önemli bir özelliktir. Aslında ilişkisel model, nitelikler veya tablolar üzerinde iyi tanımlanmış kısıtlamalar teorisini destekler. Kısıtlamalar kullanışlıdır çünkü bir tasarımcının veritabanındaki verilerin semantiğini belirtmesine izin verirler. Kısıtlamalar, VTYS'leri verilerin anlambilimi karşılayıp karşılamadığını kontrol etmeye zorlayan kurallardır.

Etki Alanı Bütünlüğü

Etki alanı, ilişkideki niteliklerin değerlerini kısıtlar ve ilişkisel modelin bir kısıtlamasıdır. Ancak, yalnızca etki alanı kısıtlamaları ile kullanıldığında belirtilemeyen veriler için gerçek dünya semantikleri vardır. Hangi veri değerlerine izin verilip verilmediğini ve bir öznitelik için hangi formatın uygun olduğunu belirtmek için daha spesifik yollara ihtiyacımız var. Örneğin, Çalışan Kimliği (EID) benzersiz olmalıdır veya çalışanın Doğum Tarihi [1 Ocak 1950, 1 Ocak 2000] aralığında olmalıdır. Bu tür bilgiler bütünlük kısıtlamaları adı verilen mantıksal deyimlerde sağlanır.

Aşağıda açıklanan birkaç çeşit bütünlük kısıtlaması vardır.

Varlık bütünlüğü

Varlık bütünlüğünü sağlamak için her tablonun bir birincil anahtarı olması gerekir. Ne PK ne de herhangi bir parçası null değerler içeremez. Bunun nedeni, birincil anahtar için null değerlerin bazı satırları tanımlayamayacağımız anlamına gelmesidir. Örneğin, EMPLOYEE tablosunda, bazı kişilerin telefonu olmayabileceğinden Phone birincil anahtar olamaz.

Referans bütünlüğü

Referans bütünlüğü, bir yabancı anahtarın eşleşen bir birincil anahtara sahip olmasını veya null olmasını gerektirir. Bu kısıtlama iki tablo (üst ve alt) arasında belirtilir; bu tablolardaki satırlar arasındaki yazışmayı korur. Bu, bir tablodaki satırdan diğer tabloya yapılan referansın geçerli olması gerektiği anlamına gelir.

Şirketin Müşteri/Sipariş veritabanındaki referans bütünlüğü kısıtlamalarına örnekler:

  • Müşteri(CustID, CustName)
  • Sipariş(OrderID, CustID, OrderDate)

Sahipsiz kayıt olmadığından emin olmak için referans bütünlüğünü sağlamamız gerekir. Sahipsiz kayıt, yabancı anahtar FK değeri ilgili varlıkta (PK'nın bulunduğu varlık) bulunmayan kayıttır. Tipik bir birleştirmenin bir PK ve FK arasında olduğunu hatırlayın.

Referans bütünlüğü kısıtı, Order tablosundaki müşteri kimliğinin (CustID) Customer tablosundaki geçerli bir CustID ile eşleşmesi gerektiğini belirtir. Çoğu ilişkisel veritabanında bildirimsel referans bütünlüğü vardır. Diğer bir deyişle, tablolar oluşturulduğunda referans bütünlüğü kısıtlamaları ayarlanır.

İşte Kurs/Sınıf veritabanından bir başka örnek:

  • Kurs(CrsCode, DeptCode, Açıklama)
  • Sınıf(CrsCode, Section, ClassTime)

Referans bütünlüğü kısıtı, Sınıf tablosundaki CrsCode'un Kurs tablosundaki geçerli bir CrsCode ile eşleşmesi gerektiğini belirtir. Bu durumda, Class tablosundaki CrsCode ve Section'ın PK'yı oluşturması yeterli değildir, ayrıca referans bütünlüğünü de sağlamalıyız.

Referans bütünlüğünü kurarken, PK ve FK'nın aynı veri türlerine sahip olması ve aynı etki alanından gelmesi önemlidir, aksi takdirde ilişkisel veritabanı yönetim sistemi (RDBMS) birleştirmeye izin vermeyecektir. RDBMS, IBM'in San Jose Araştırma Laboratuvarı'ndan E. F. Codd tarafından tanıtılan ilişkisel modele dayanan popüler bir veritabanı sistemidir. İlişkisel veritabanı sistemlerinin kullanımı ve anlaşılması diğer veritabanı sistemlerine göre daha kolaydır.

Microsoft Access'te referans bütünlüğü

Microsoft (MS) Access'te, Müşteri tablosundaki PK ile Sipariş tablosundaki CustID birleştirilerek referans bütünlüğü kurulur. Bunun MS Access'teki İlişkileri Düzenle ekranında nasıl yapıldığını görmek için aşağıdaki şekle bakın.

Şekil; MS Access'te referans erişimi, A. Watt tarafından.

Transact-SQL (MS SQL Server) kullanarak referans bütünlüğü

Transact-SQL kullanılırken, Order tablosu FK ile oluşturulurken referans bütünlüğü ayarlanır. Aşağıda, Customer tablosundaki PK'ya referans veren Order tablosundaki FK'yı gösteren ifadeler listelenmiştir.

CREATE TABLE Customer
( CustID INTEGER PRIMARY KEY,
CustName CHAR(35) )

CREATE TABLE Orders
( OrderID INTEGER PRIMARY KEY,
CustID INTEGER REFERENCES Customer(CustID),
OrderDate DATETIME )

Yabancı anahtar kuralları

Referans bütünlüğü ayarlanırken, üst öğenin (Müşteri) bir parçası olan PK'ya sahip kayıt silindiğinde veya değiştirildiğinde (güncellendiğinde) alt satırlarla (Siparişler tablosunda) ne yapılacağı gibi ek yabancı anahtar kuralları eklenebilir. Örneğin, MS Access'teki İlişkileri Düzenle penceresi (bkz. yukarıdaki şekil) FK kuralları için iki ek seçenek gösterir: Kademeli Güncelle ve Kademeli Sil. Bunlar seçilmezse sistem, bir alt kayıt varsa üst tablodaki (Müşteri tablosu) PK değerlerinin silinmesini veya güncellenmesini önler. Alt kayıt, eşleşen bir PK değerine sahip herhangi bir kayıttır.

Bazı veritabanlarında, Sil seçeneği seçildiğinde Null Olarak Ayarla adında ek bir seçenek mevcuttur. Bu seçildiğinde, PK satırı silinir, ancak alt tablodaki FK NULL olarak ayarlanır. Bu bir sahipsiz satır oluştursa da kabul edilebilir.

Kurumsal Kısıtlamalar

Kurumsal kısıtlamalar -bazen semantik kısıtlamalar olarak da adlandırılır- kullanıcılar veya veritabanı yöneticileri tarafından belirtilen ek kurallardır ve birden fazla tabloya dayalı olabilir.

İşte bazı örnekler.

  • Bir sınıfta en fazla 30 öğrenci olabilir.
  • Bir öğretmen dönem başına en fazla dört ders verebilir.
  • Bir çalışan beşten fazla projede yer alamaz.
  • Bir çalışanın maaşı, çalışanın yöneticisinin maaşını geçemez.

İş Kuralları

İş kuralları, gereksinimler toplanırken kullanıcılardan elde edilir. Gereksinim toplama süreci çok önemlidir ve sonuçları, veritabanı tasarımı oluşturulmadan önce kullanıcı tarafından doğrulanmalıdır. İş kuralları yanlışsa, tasarım da yanlış olacak ve sonuçta oluşturulan uygulama kullanıcıların beklediği gibi çalışmayacaktır.

Bazı iş kuralı örnekleri şunlardır:

  • Bir öğretmen birçok öğrenciye ders verebilir.
  • Bir sınıfta en fazla 35 öğrenci olabilir.
  • Bir kurs birçok kez verilebilir, ancak yalnızca bir eğitmen tarafından verilebilir.
  • Tüm öğretmenler ders vermez.

Kardinalite ve bağlanabilirlik

İş kuralları, kardinalite ve bağlantıyı belirlemek için kullanılır. Kardinalite, ilgili bir varlığın bir oluşumuyla ilişkili minimum ve maksimum varlık oluşum sayısını ifade ederek iki veri tablosu arasındaki ilişkiyi tanımlar. Aşağıdaki şekilde, kardinalitenin ilişki sembolü üzerindeki en içteki işaretlerle temsil edildiğini görebilirsiniz. Bu şekilde, kardinalite sağda 0 (sıfır) ve solda 1 (bir)'dir.

Şekil; Bağlanabilirlik ve kardinalitenin bir ilişki sembolü üzerindeki konumu, A. Watt.

İlişki sembolünün en dıştaki sembolü ise iki tablo arasındaki bağlantıyı temsil eder. Bağlantı, iki tablo arasındaki ilişkidir, örneğin bire bir veya bire çok gibi. Sıfır olduğu tek zaman FK'nin boş olabileceği zamandır. Katılım söz konusu olduğunda, bu varlıklar arasındaki ilişki için üç seçenek vardır: 0 (sıfır), 1 (bir) veya çok. Örneğin yukarıdaki şekilde, bağlantı bu çizginin dış, sol tarafında 1 (bir) ve dış, sağ tarafında birçoktur.

Aşağıdaki şekil bire çok ilişkiyi temsil eden sembolü göstermektedir.

Aşağıdaki şekilde hem iç (kardinaliteyi temsil eden) hem de dış (bağlantıyı temsil eden) işaretleyiciler gösterilmektedir. Bu sembolün sol tarafı minimum 1 ve maksimum 1 olarak okunur. Sağ tarafta ise minimum 1 ve maksimum çok olarak okunur.

İlişki Türleri

Bir ERD'de iki tabloyu birbirine bağlayan çizgi, tablolar arasındaki ilişki türünü belirtir: tanımlayıcı olan veya tanımlayıcı olmayan. Tanımlayıcı bir ilişki düz bir çizgiye sahip olacaktır (PK'nın FK'yı içerdiği yerde). Tanımlayıcı olmayan bir ilişki kesik bir çizgi ile gösterilir ve PK'da FK içermez. Daha fazla açıklama için önceki bölümde zayıf ve güçlü ilişkilerin tartışıldığı bölüme bakın.

Şekil; Tanımlayıcı ve tanımlayıcı olmayan ilişki, A. Watt.

İsteğe bağlı ilişkiler

İsteğe bağlı bir ilişkide, FK boş olabilir veya üst tablonun karşılık gelen bir alt tablo oluşumuna sahip olması gerekmez. Aşağıdaki şekilde gösterilen sembol, sıfır VEYA çok olarak yorumlanan bir sıfır ve üç çatallı (çokluğu gösteren) bir türü göstermektedir.

Örneğin, aşağıdaki şeklin sağ tarafındaki Sipariş tablosuna bakarsanız, bir müşterinin müşteri olmak için sipariş vermesine gerek olmadığını fark edeceksiniz. Başka bir deyişle, birçok taraf isteğe bağlıdır.

Şekil; Sıfırdan çoğa isteğe bağlı ilişki sembolünün örnek kullanımı, A. Watt tarafından.

Yukarıdaki şekildeki ilişki sembolü aşağıdaki gibi de okunabilir:

  • Sol taraf: Sipariş varlığı, Müşteri tablosunda en az bir ilişkili varlığa sahip olmalı ve en fazla bir ilişkili varlığa sahip olmalıdır.
  • Sağ taraf: Bir müşteri en az sıfır sipariş veya en fazla çok sayıda sipariş verebilir.

Aşağıdaki şekil, sıfır VEYA bir anlamına gelen sıfır ve bir ile başka bir tür isteğe bağlı ilişki sembolünü göstermektedir. Bir tarafı isteğe bağlıdır.

Aşağıdaki şekil, sıfırdan bire sembolünün nasıl kullanılabileceğine dair bir örnek vermektedir.

Şekil; Sıfırdan bire isteğe bağlı ilişki sembolünün örnek kullanımı, A. Watt tarafından.

Zorunlu ilişkiler

Zorunlu bir ilişkide, bir varlık oluşumu karşılık gelen bir varlık oluşumunu gerektirir. Bu ilişkinin sembolü aşağıdaki şekilde gösterildiği gibi bir ve sadece bir tanesini gösterir. Bir taraf zorunludur.

Tek ve sadece bir zorunlu sembolün nasıl kullanıldığına dair bir örnek için aşağıdaki şekle bakınız.

Şekil; Tek ve sadece bir zorunlu ilişki sembolü örneği, A. Watt tarafından.

Aşağıdaki şekil, çoklu tarafın zorunlu olduğu bire çok ilişki sembolünün nasıl göründüğünü göstermektedir.

Birden çoğa sembolünün nasıl kullanılabileceğine dair bir örnek için aşaıdaki şekle bakın.

Şekil; Birden çoğa zorunlu ilişki sembolü örneği, A. Watt tarafından.

Şimdiye kadar bir ilişki sembolünün en iç tarafının (Aşağıdaki şekildeki sembolün sol tarafında) 0 (sıfır) kardinaliteye ve çok sayıda (Aşağıdaki şekildeki sembolün sağ tarafında gösterilmiştir) veya bir (gösterilmemiştir) bağlantıya sahip olabileceğini gördük.

Ancak, aşağıdaki şekilde gösterildiği gibi 0 (sıfır) bağlantıya sahip olamaz. Bağlanabilirlik yalnızca 1 olabilir.

Bağlantı sembolleri maksimumları gösterir. Yani mantıksal olarak düşünürseniz, sol taraftaki bağlantı sembolü 0 (sıfır) gösteriyorsa, tablolar arasında hiçbir bağlantı olmayacaktır.

Aşağıdaki şekildeki gibi bir ilişki sembolünü okumanın yolu aşağıdaki gibidir.

  • Order tablosundaki CustID, Customer tablosunda da en az 0 ve en fazla 1 kez bulunmalıdır.
  • 0, Order tablosundaki CustID'nin null olabileceği anlamına gelir.
  • En soldaki 1 (bağlantıyı temsil eden 0'dan hemen önce), Order tablosunda bir CustID varsa, bunun Customer tablosunda yalnızca bir kez olabileceğini söyler.
  • Kardinalite için 0 sembolünü gördüğünüzde iki şey varsayabilirsiniz: T
    1. Sipariş tablosundaki FK boş değerlere izin verir ve
    2. PK'ler boş değerler içermemesi gerektiğinden FK, PK'nin bir parçası değildir.
Şekil; Müşteri tablosu ile Sipariş tablosu arasındaki ilişki, A. Watt.

Alıştımalar
Aşağıdaki açıklamayı okuyun ve ardından sondaki 1-4 arası soruları yanıtlayın.

Aşağıdaki şekildeki yüzme kulübü veritabanı, yüzme derslerine kayıtlı öğrenciler hakkında bilgi tutmak için tasarlanmıştır. Şu bilgiler saklanmaktadır: öğrenciler, kayıtlar, yüzme sınıfları, sınıfların düzenlendiği havuzlar, sınıflar için eğitmenler ve yüzme sınıflarının çeşitli seviyeleri. 1’den 4’e kadar olan soruları yanıtlamak için aşağıdaki şekli kullanın.
Şekil;1-4 arası sorular için ERD. (Diyagram A. Watt tarafından hazırlanmıştır.)

Birincil anahtarlar aşağıda tanımlanmıştır. Aşağıdaki veri türleri SQL Server’da tanımlanmıştır.

tblLevels 
Level – Identity PK
ClassName – text 20 – nulls are not allowed

tblPool
Pool – Identity PK
PoolName – text 20 – nulls are not allowed
Location – text 30

tblStaff
StaffID – Identity PK
FirstName – text 20
MiddleInitial – text 3
LastName – text 30
Suffix – text 3
Salaried – Bit
PayAmount – money

tblClasses
LessonIndex – Identity PK
Level – Integer FK
SectionID – Integer
Semester – TinyInt
Days – text 20
Time – datetime (formatted for time)
Pool – Integer FK
Instructor – Integer FK
Limit – TinyInt
Enrolled – TinyInt
Price – money

tblEnrollment
LessonIndex – Integer FK
SID – Integer FK (LessonIndex and SID) Primary Key
Status – text 30
Charged – bit
AmountPaid – money
DateEnrolled – datetime

tblStudents
SID – Identity PK
FirstName – text 20
MiddleInitial – text 3
LastName – text 30
Suffix – text 3
Birthday – datetime
LocalStreet – text 30
LocalCity – text 20
LocalPostalCode – text 6
LocalPhone – text 10

Bu şemayı SQL Server veya access’te uygulayın (karşılaştırılabilir veri türleri seçmeniz gerekecektir). ERD’nizin veritabanındaki bir ekran görüntüsünü gönderin.

1. Her bir ilişki için ilişki kurallarını açıklayın (örneğin, tblEnrollment ve tblStudents: Bir öğrenci birçok sınıfa kaydolabilir).

2. Aşağıdaki kuralları varsayarak her bir ilişki için kardinaliteyi belirleyiniz:
—>Bir havuzun sınıfı olabilir de olmayabilir de.
—>Seviyeler tablosu her zaman en az bir sınıfla ilişkilendirilmelidir.
—>Personel masası hiç ders vermemiş olabilir.
—>Tüm öğrencilerin en az bir sınıfa kayıtlı olması gerekmektedir.
—>Sınıfta kayıtlı öğrenciler bulunmalıdır.
—>Sınıf geçerli bir havuza sahip olmalıdır.
—>Sınıfın atanmış bir eğitmeni olmayabilir.
—>Sınıf her zaman mevcut bir seviye ile ilişkilendirilmelidir.

3. Hangi tablolar zayıf ve hangi tablolar güçlüdür (daha önceki bir bölümde ele alınmıştır)?

4. Hangi tablolar tanımlayıcı değildir ve hangileri tanımlayıcıdır?
Önceki Ders: Varlık İlişkisi Veri Modeli
Sonraki Ders: Varlık ilişkisel Modelleme

Yorumlar

Bu blogdaki popüler yayınlar

Gelişim ve Kalıtım Eleştirel Düşünme Soruları

Periodonsiyum Klinik Uygulamalar

Dentin Oluşumu