İlişkisel model - Relational model

İlişkisel model ( RM için) veritabanı yönetimi yönetmek için yaklaşımdır verileri bir kullanarak yapıyı ve tutarlı bir dil birinci dereceden yüklem mantığı ilk İngilizce bilgisayar bilimcisi tarafından 1969 yılında açıklanan, Edgar F. Codd tüm veriler açısından temsil edilir, küpe , ilişkiler olarak gruplandırılmıştır . İlişkisel model açısından düzenlenen bir veritabanı, ilişkisel bir veritabanıdır .

İlişkisel modelin amacı, verileri ve sorguları belirtmek için bildirimsel bir yöntem sağlamaktır : kullanıcılar, veritabanının hangi bilgileri içerdiğini ve ondan hangi bilgileri istediklerini doğrudan belirtir ve veritabanı yönetim sistemi yazılımının, verileri depolamak için veri yapılarını tanımlamaya özen göstermesine izin verir. sorguları yanıtlamak için veri ve geri alma prosedürleri.

Çoğu ilişkisel veritabanları SQL veri tanımlama ve sorgulama dilini kullanır; bu sistemler, ilişkisel modele mühendislik yaklaşımı olarak kabul edilebilecek şeyleri uygular. SQL veritabanı şemasındaki bir tablo , bir yüklem değişkenine karşılık gelir; bir tablonun içeriğinden bir ilişkiye; anahtar kısıtlamalar, diğer kısıtlamalar ve SQL sorguları, yüklemlere karşılık gelir. Bununla birlikte, SQL veritabanları birçok ayrıntıda ilişkisel modelden sapar ve Codd, orijinal ilkeleri tehlikeye atan sapmalara şiddetle karşı çıktı.

genel bakış

İlişkisel modelin ana fikri, bir veritabanını , olası değerler ve değer kombinasyonları üzerindeki kısıtlamaları tanımlayan, sonlu bir yüklem değişkenleri kümesi üzerindeki bir yüklemler topluluğu olarak tanımlamaktır . Herhangi bir zamanda veri tabanının içeriği, veri tabanının sonlu (mantıksal) bir modelidir , yani tüm yüklemlerin karşılanacağı şekilde yüklem değişkeni başına bir ilişki kümesidir . Veritabanından bilgi talebi (bir veritabanı sorgusu ) da bir yüklemdir.

İlişkisel model kavramları.

alternatifler

Diğer modeller şunlardır hiyerarşik modeli ve ağ modeli . Bu eski mimarileri kullanan bazı sistemler , yüksek veri hacmi ihtiyacı olan veya mevcut sistemlerin çok karmaşık ve soyut olduğu ve ilişkisel modeli kullanan sistemlere geçmenin maliyet açısından engelleyici olacağı veri merkezlerinde bugün hala kullanılmaktadır. Ayrıca, daha yeni nesne yönelimli veritabanları da not edilmelidir .

uygulama

Orijinal olarak Codd tarafından tanımlanan ve Date , Darwen ve diğerleri tarafından açıklanan ilişkisel veritabanı modelinin gerçek bir uygulamasını üretmek için birkaç girişimde bulunuldu , ancak şimdiye kadar hiçbiri popüler başarı elde edemedi. Ekim 2015 itibariyle, Rel bunu yapmak için daha yeni girişimlerden biridir.

İlişkisel model, resmi matematiksel terimlerle tanımlanan ilk veritabanı modeliydi. Hiyerarşik ve ağ veritabanları ilişkisel veritabanlarından önce vardı, ancak özellikleri nispeten gayri resmiydi. İlişkisel model tanımlandıktan sonra, farklı modelleri karşılaştırmak ve karşılaştırmak için birçok girişimde bulunuldu ve bu, önceki modellerin daha titiz tanımlarının ortaya çıkmasına yol açtı; hiyerarşik ve ağ veritabanları için veri işleme arayüzlerinin prosedürel doğası, resmileştirme kapsamını sınırladı.

İlişkisel modalite protokollerini kullanan yapısal veritabanı analitiği, yeni girdilerin dahil edilmesiyle hiyerarşik mimari atamalarını sürdürmek için sıklıkla veri dizisi farklarını kullanır. Bu sistemler, konsept olarak bulut veritabanı altyapısının temelini oluşturan alternatif geçiş algoritmalarına benzer .

Tarih

İlişkisel model, genel bir veri modeli olarak Edgar F. Codd tarafından icat edildi ve daha sonra diğerleri arasında Chris Date ve Hugh Darwen tarafından desteklendi . In Üçüncü Manifesto'nun (ilk 1995 yılında yayınlanmıştır) Tarih ve ilişkisel model iddia edilen bazı ağırlayacak göstermek için Darwen girişimi "istenen" nesne yönelimli özellikler.

tartışmalar

1970 modelinin yayınlanmasından birkaç yıl sonra, Codd , eksik bilgilerle başa çıkmak için üç değerli bir mantık (True, False, Missing/ NULL ) versiyonunu önerdi ve The Relational Model for Database Management Version 2 (1990) adlı çalışmasında dört değerli bir mantık (Doğru, Yanlış, Eksik ama Uygulanabilir, Eksik ama Uygulanamaz) versiyonuyla bir adım daha ileri. Bunlar, muhtemelen karmaşıklık nedeniyle hiçbir zaman uygulanmadı. SQL'in NULL yapısının, üç değerli bir mantık sisteminin parçası olması amaçlandı, ancak standarttaki ve uygulamalarındaki mantıksal hatalar nedeniyle yetersiz kaldı.

Konular

Bağıntısal modelin temel varsayım, hepsi bu veriler matematiksel olarak temsil edilir , n - li ilişkileri , bir N bir olmak -ary ilişki alt kümesi arasında Kartezyen ürün arasında n etki. Matematiksel modelde, bu tür veriler hakkında akıl yürütme , iki değerli yüklem mantığında yapılır , yani her önerme için iki olası değerlendirme vardır : ya doğru ya da yanlış (ve özellikle, bilinmeyen ya da uygulanamaz gibi üçüncü bir değer yoktur , bunlardan herhangi biri genellikle NULL kavramıyla ilişkilendirilir ). Veriler, bir ilişkisel hesap veya ilişkisel cebir aracılığıyla çalıştırılır , bunlar ifade gücünde eşdeğerdir .

İlişkisel veri modeli, veritabanı tasarımcısının bilginin tutarlı, mantıksal bir temsilini yaratmasına izin verir . Tutarlılık, genellikle mantıksal şema olarak adlandırılan veritabanı tasarımına beyan edilen kısıtlamalar dahil edilerek sağlanır . Teori, belirli arzu edilen özelliklere sahip bir tasarımın bir dizi mantıksal olarak eşdeğer alternatif arasından seçilebildiği bir veritabanı normalleştirme sürecini içerir . Erişim planları ve diğer uygulama ve operasyon ayrıntıları tarafından işlenir DBMS motoru ve mantıksal modelinde yansıtılmaz. Bu, performans ayarının genellikle mantıksal modelde değişiklik gerektirdiği SQL VTYS'leri için yaygın uygulamayla çelişir .

Temel ilişkisel yapı taşı, günümüzde genellikle tür olarak kısaltılan etki alanı veya veri türüdür . Bir tanımlama grubu sıralı olan dizi ait öznitelik değerleri . Bir öznitelik , sıralı bir öznitelik adı ve ad türü çiftidir . Öznitelik değeri, özniteliğin türü için belirli bir geçerli değerdir. Bu, skaler bir değer veya daha karmaşık bir tür olabilir.

Bir ilişki bir başlık ve bir gövdeden oluşur . Başlık, bir dizi niteliktir. Bir gövde ( n -ary ilişkisinin) bir n -tuple kümesidir. İlişkinin başlığı aynı zamanda her bir demetinin başlığıdır.

Bir ilişki, bir olarak tanımlanan dizi arasında , n -tuples. Hem matematikte hem de ilişkisel veritabanı modelinde, bazı VTYS'ler verilerine bir düzen dayatmasına rağmen , bir küme benzersiz, yinelenmeyen öğelerin sırasız bir koleksiyonudur. Matematikte, bir demetin bir sırası vardır ve çoğaltmaya izin verir. E.  F. Codd, orijinal olarak bu matematiksel tanımı kullanarak tanımlama gruplarını tanımladı. Daha sonra, ilişkilere dayalı bir bilgisayar dilinde (genel olarak) bir sıralama yerine öznitelik adlarını kullanmanın daha uygun olacağı E.  F. Codd'un büyük içgörülerinden biriydi. Bu anlayış bugün hala kullanılmaktadır. Konsept değişse de, "tuple" adı değişmedi. Bu ayırt edici özelliğin dolaysız ve önemli bir sonucu, ilişkisel modelde Kartezyen çarpımının değişmeli hale gelmesidir .

Bir tablo bir ilişkinin bir kabul görsel bir temsilidir; Tuple, satır kavramına benzer .

Bir relvar , belirli bir ilişki türünün adlandırılmış bir değişkenidir ve her zaman bu türden bir ilişkinin atandığı, ancak ilişki sıfır demet içerebilir.

İlişkisel modelin temel ilkesi Bilgi İlkesi'dir : tüm bilgiler ilişkilerde veri değerleri ile temsil edilir. Bu Prensip uyarınca, ilişkisel bir veritabanı bir dizi relvardır ve her sorgunun sonucu bir ilişki olarak sunulur.

İlişkisel bir veritabanının tutarlılığı, onu kullanan uygulamalarda yerleşik kurallar tarafından değil , mantıksal şemanın bir parçası olarak bildirilen ve VTYS tarafından tüm uygulamalar için zorunlu kılınan kısıtlamalar tarafından zorlanır . Genel olarak, kısıtlamalar ilişkisel karşılaştırma operatörleri kullanılarak ifade edilir, bunlardan sadece biri "(⊆)'nin alt kümesidir, teorik olarak yeterlidir. Uygulamada, en önemlileri aday anahtar (gerçekten, superkey ) ve yabancı anahtar kısıtlamaları olan birkaç yararlı kısayolun mevcut olması beklenir .

Tercüme

İlişkisel veri modelini tam olarak anlamak için , bir ilişkinin amaçlanan yorumunu anlamak önemlidir .

Bir ilişkinin gövdesine bazen uzantısı denir. Bu bir temsili olarak yorumlanmalıdır çünkü uzantısı bazı yüklemi , bu doğru seti olarak önermeler her değiştirerek oluşturulabilir serbest değişken bir isim (bir şey atar bir terim) tarafından bu yüklem.

Bir yoktur bire-bir yazışma yüklemi serbest değişkenler ve ilişki başlığının özellik adları arasında. İlişki gövdesinin her bir demeti, serbest değişkenlerinin her birini değiştirerek yüklemi somutlaştırmak için öznitelik değerleri sağlar. Sonuç, demetin ilişki gövdesindeki görünümü nedeniyle doğru kabul edilen bir önermedir. Tersine, başlığı bağıntınınkine uyan, ancak vücutta görünmeyen her demet yanlış kabul edilir. Bu varsayım kapalı dünya varsayımı olarak bilinir : pratik veritabanlarında genellikle ihlal edilir, burada bir demetin yokluğu, karşılık gelen önermenin doğruluğunun bilinmediği anlamına gelebilir. Örneğin, bir dil becerileri tablosunda demetin ('John', 'İspanyolca') olmaması, John'un İspanyolca konuşmadığının kanıtı olarak kabul edilemez.

Bu fikirlerin resmi bir açıklaması için aşağıdaki Küme-teorik Formülasyon bölümüne bakın.

Veritabanlarına uygulama

Tipik bir ilişkisel veritabanında kullanıldığı şekliyle bir veri türü , tamsayılar kümesi, karakter dizileri kümesi, tarih kümesi veya iki boole değeri true ve false vb. olabilir. Bu türlere karşılık gelen tür adları "int", "char", "date", "boolean" vb. dizeler olabilir. Bununla birlikte, ilişkisel kuramın hangi türlerin destekleneceğini dikte etmediğini anlamak önemlidir; aslında, günümüzde , sistem tarafından sağlanan yerleşik olanlara ek olarak, kullanıcı tanımlı türler için hükümlerin mevcut olması beklenmektedir .

Nitelik , teoride yaygın olarak sütun olarak adlandırılan şey için kullanılan terimdir. Benzer şekilde, tablo , teorik terim ilişkisi yerine yaygın olarak kullanılır(ancak SQL'de terim hiçbir şekilde ilişki ile eşanlamlı değildir). Bir tablo veri yapısı, her biri benzersiz bir sütun adı ve bu sütun için izin verilen değerlerin türünü belirten sütun tanımlarının bir listesi olarak belirtilir. Bir özellik değeri , örneğin "John Doe" veya "35" gibi belirli bir sütun ve sıra giriş vardır.

Bir tanımlama grubu temelde aynı şeydir satırda arka arkaya sütun değerleri sıralanır bir SQL DBMS, dışında,. (Defterler sıralanmaz; bunun yerine, her bir nitelik değeri yalnızca nitelik adıyla tanımlanır ve hiçbir zaman tanımlama grubu içindeki sıradaki konumuyla tanımlanır.) Bir nitelik adı "ad" veya "yaş" olabilir.

Bir ilişki a, tablo verileri bu yapıda görünen ile birlikte yapı tanımı (sütun tanımların bir gurubu). Yapı tanımı başlıktır ve içinde görünen veriler bir dizi satır olan gövdedir . Bir veritabanı relvarı (ilişki değişkeni) yaygın olarak temel tablo olarak bilinir . Herhangi bir zamanda atanan değerinin başlığı, tablo bildiriminde belirtildiği gibidir ve gövdesi, en son kendisine bazı güncelleme operatörleri (tipik olarak, INSERT, UPDATE veya DELETE) çağrılarak atanan değerdir . Bazı sorguların değerlendirilmesi sonucu ortaya çıkan tablonun başlığı ve gövdesi, o sorgunun ifadesinde kullanılan operatörlerin tanımları ile belirlenir. (SQL'de başlığın her zaman yukarıda açıklandığı gibi bir sütun tanımları kümesi olmadığını unutmayın, çünkü bir sütunun adı olmaması ve ayrıca iki veya daha fazla sütunun aynı ada sahip olması mümkündür. Ayrıca, gövde her zaman değildir. bir dizi satır çünkü SQL'de aynı satırın aynı gövdede birden fazla görünmesi mümkündür.)

SQL ve ilişkisel model

Başlangıçta ilişkisel veritabanları için standart dil olarak itilen SQL, birkaç yerde ilişkisel modelden sapar. Mevcut ISO SQL standardı, ilişkisel modelden bahsetmez veya ilişkisel terimler veya kavramlar kullanmaz. Ancak, belirli SQL özellikleri kullanılmazsa, SQL kullanarak ilişkisel modele uygun bir veritabanı oluşturmak mümkündür.

SQL'de ilişkisel modelden aşağıdaki sapmalar not edilmiştir. Birkaç veritabanı sunucusunun tüm SQL standardını uyguladığını ve özellikle bu sapmaların bazılarına izin vermediğini unutmayın. NULL her yerde bulunurken, örneğin, bir tablo veya anonim sütunlar içinde yinelenen sütun adlarına izin verilmesi nadirdir.

Yinelenen satırlar
Aynı satır, bir SQL tablosunda birden fazla görünebilir. Aynı demet bir ilişkide birden fazla görünemez .
anonim sütunlar
SQL tablosundaki bir sütun isimsiz olabilir ve bu nedenle ifadelerde referans alınamaz. İlişkisel model, her özniteliğin adlandırılmasını ve referans verilmesini gerektirir.
Yinelenen sütun adları
Aynı SQL tablosunun iki veya daha fazla sütunu aynı ada sahip olabilir ve bu nedenle bariz belirsizlik nedeniyle referans alınamaz. İlişkisel model, her özniteliğin referans verilebilir olmasını gerektirir.
Sütun sırası önemi
Bir SQL tablosundaki sütunların sırası tanımlanmış ve önemlidir; bunun bir sonucu, SQL'in Kartezyen çarpım ve birleşim uygulamalarının her ikisinin de değişmeli olmamasıdır. İlişkisel model, bir ilişkinin niteliklerinin herhangi bir sıralanmasının hiçbir önemi olmamasını gerektirir.
KONTROL SEÇENEĞİ olmayan görünümler
CHECK OPTION olmadan tanımlanan bir görünüme yapılan güncellemeler kabul edilebilir, ancak sonuçta veritabanında yapılan güncellemenin hedef üzerinde belirtilen etkiye sahip olması gerekmez. Örneğin, INSERT çağrısı kabul edilebilir ancak eklenen satırların tümü görünümde görünmeyebilir veya UPDATE çağrısı görünümden satırların kaybolmasına neden olabilir. İlişkisel model, görünümün bir temel relvarmış gibi aynı etkiye sahip olması için bir görünümde güncellemeler gerektirir.
Tanınmayan sütunsuz tablolar
SQL, her tablonun en az bir sütuna sahip olmasını gerektirir, ancak sıfır dereceli ( bir ve sıfır kardinalitesi ) iki ilişki vardır ve bunlar, serbest değişken içermeyen yüklemlerin uzantılarını temsil etmek için gereklidir.
BOŞ
Bu özel işaret, SQL'de bir değerin görünebildiği her yerde, özellikle bazı satırlarda bir sütun değeri yerine, bir değer yerine görünebilir. İlişkisel modelden sapma bu uygulama aslında doğar geçici SQL kavramının kullanımını gerektirir üç değerli mantık kendisiyle NULL karşılaştırılması verim vermez altında, gerçek bunun yerine üçüncü verir doğruluk değeri , bilinmeyeni ; benzer şekilde, NULL'un kendisinden başka bir şeyle karşılaştırılması false sağlamaz, bunun yerine bilinmeyen verir . Karşılaştırmalarda bu davranış nedeniyle NULL, bir değerden ziyade bir işaret olarak tanımlanır. İlişkisel model , doğru olmayan her şeyin yanlış ve yanlış olmayan her şeyin doğru olduğu dışlanmış orta yasasına bağlıdır ; ayrıca bir ilişki gövdesindeki her demetin, o ilişkinin her niteliği için bir değere sahip olmasını gerektirir. E.  F. Codd'un kendisi sonunda özel işaretlerin ve 4 değerli bir mantığın kullanılmasını savunduğu için , bazıları tarafından bu özel sapmaya karşı çıkılır, ancak bu, birinin bir Bu tür mantıkların kullanımına karşı çıkanları daha belirgin nedenler keşfetmeye yönlendiren bir değer yerine özel işaret ve 21 değerli bir mantık gerektiren en az 19 tane not edilmiştir. SQL'in kendisi, "bilinmeyen değeri" temsil etmek dışında çeşitli amaçlar için NULL kullanır. Örneğin, boş kümenin toplamı NULL'dur, yani sıfır anlamına gelir, boş kümenin ortalaması NULL'dur, yani tanımsız anlamına gelir ve LEFT JOIN'in sonucunda görünen NULL, "değer yok çünkü eşleşen satır yok" anlamına gelebilir. sağ işlenen". NULL gereksiniminden kaçınmak için tablolar tasarlamanın yolları vardır, tipik olarak kabul edilebilecek veya yüksek derecede veritabanı normalleştirmesine benzeyen şey , ancak çoğu bunu pratik bulmuyor. Çok tartışılan bir konu olabilir.

ilişkisel işlemler

Kullanıcılar (veya programlar), ilişkisel bir veritabanından , genellikle SQL'in bir lehçesi olan özel bir dilde yazılmış bir sorgu göndererek veri ister . SQL başlangıçta son kullanıcılar için tasarlanmış olsa da, SQL sorgularının daha kolay bir kullanıcı arayüzü sağlayan yazılımlara gömülmesi çok daha yaygındır. Wikipedia gibi birçok Web sitesi, sayfa oluştururken SQL sorguları gerçekleştirir.

Bir sorguya yanıt olarak, veritabanı yalnızca yanıtları içeren satırların bir listesi olan bir sonuç kümesi döndürür. En basit sorgu, yalnızca bir tablodaki tüm satırları döndürmek içindir, ancak daha sık olarak, satırlar, yalnızca istenen yanıtı döndürmek için bir şekilde filtrelenir.

Çoğu zaman, birden çok tablodan alınan veriler, bir join yapılarak tek bir tablo halinde birleştirilir . Kavramsal olarak, bu, tüm olası satır kombinasyonlarını ( Kartezyen çarpım ) alarak ve ardından cevap dışındaki her şeyi filtreleyerek yapılır. Uygulamada, ilişkisel veritabanı yönetim sistemleri , çeşitli teknikleri kullanarak daha hızlı gerçekleştirmek için sorguları yeniden yazar (" optimize eder ").

Birleştirmeye ek olarak bir dizi ilişkisel işlem vardır. Bunlar arasında proje (bazı sütunların ortadan kaldırılması süreci), kısıtlama (bazı satırların ortadan kaldırılması süreci), birleşim (benzer yapılara sahip iki tabloyu birleştirmenin bir yolu), fark (bir tablodaki satırları listeleyen) bulunur. diğerinde bulunamadı), kesişim (her iki tabloda bulunan satırları listeler) ve ürün (yukarıda bahsedilen, bir tablonun her satırını diğerinin her satırıyla birleştiren). Başka hangi kaynaklara başvurduğunuza bağlı olarak, birçoğu yukarıda listelenenlere göre tanımlanabilen bir dizi başka operatör vardır. Bunlara yarı birleştirme, dış birleştirme ve dış birleştirme gibi dış operatörler ve çeşitli bölme biçimleri dahildir. Ardından, sütunları yeniden adlandırmak ve operatörleri özetlemek veya toplamak için operatörler vardır ve ilişki değerlerinin nitelikler (ilişki değerli nitelik) olarak izin verirseniz , grup ve grubu çöz gibi operatörler vardır. SQL'deki SELECT ifadesi, grup ve grup çözme operatörleri dışında tüm bunları işlemeye hizmet eder.

İlişkisel veritabanlarının esnekliği, programcıların veritabanı tasarımcıları tarafından beklenmeyen sorgular yazmasına olanak tanır. Sonuç olarak, ilişkisel veritabanları, orijinal tasarımcıların öngörmediği şekillerde birden fazla uygulama tarafından kullanılabilir; bu, özellikle uzun süre (belki de birkaç on yıl) kullanılabilecek veritabanları için önemlidir. Bu, ilişkisel veritabanlarının fikrini ve uygulamasını işletmeler arasında çok popüler hale getirdi.

Veritabanı normalleştirme

İlişkiler , savunmasız oldukları anormallik türlerine göre sınıflandırılır. İçinde olan bir veritabanı ilk normal formda alanı / anahtar, normal formda bir veritabanı hiçbir modifikasyon anomalileri sahipken, anomaliler her türlü savunmasızdır. Normal formlar doğada hiyerarşiktir. Yani, en düşük seviye ilk normal formdur ve veri tabanı, daha düşük normal formların tüm gereksinimlerini karşılamadan daha yüksek seviyeli normal formların gereksinimlerini karşılayamaz.

Örnekler

Veri tabanı

Bazı relvarların ( ilişki değişkenleri) ve niteliklerinin tanımının idealleştirilmiş, çok basit bir örneği :

  • Müşteri ( Müşteri Kimliği , Vergi Kimliği, Ad, Adres, Şehir, Eyalet, Posta Kodu, Telefon, E-posta, Cinsiyet)
  • Sipariş ( Sipariş No , Müşteri Kimliği , Fatura No , Verilme Tarihi, Söz Verilme Tarihi, Şartlar, Durum)
  • Sipariş Satırı ( Sipariş No , Sipariş Satır No , Ürün Kodu , Adet)
  • Fatura ( Fatura No , Müşteri Kimliği , Sipariş No , Tarih, Durum)
  • Fatura Satırı ( Fatura No , Fatura Satır No , Ürün Kodu , Sevk Edilen Adet)
  • Ürün ( Ürün Kodu , Ürün Açıklaması)

Bu tasarımda altı relvarımız var: Müşteri, Sipariş, Sipariş Hattı, Fatura, Fatura Hattı ve Ürün. Kalın, altı çizili nitelikler aday anahtarlardır . Kalın olmayan, altı çizili nitelikler yabancı anahtarlardır .

Genellikle bir aday anahtar , birincil anahtar olarak adlandırılmak üzere seçilir ve daha sonra alternatif anahtarlar olarak adlandırılan diğer aday anahtarlara göre tercih edilir .

Bir aday anahtar bir tektir tanımlayıcı hayır zorlama tanımlama grubu çoğaltılmış olacak; bu, kümenin temel tanımını ihlal ederek ilişkiyi başka bir şeye, yani bir çantaya dönüştürür . Hem yabancı anahtarlar hem de süper anahtarlar (aday anahtarları içerir) bileşik olabilir, yani birkaç öznitelikten oluşabilir. Aşağıda, Müşteri relvar örneğimizin bir ilişkisinin tablo şeklinde bir tasviri bulunmaktadır; bir ilişki, bir relvar'a atfedilebilecek bir değer olarak düşünülebilir.

Müşteri ilişkisi

Müşteri Kimliği Vergi numarası İsim Adres [Daha fazla alan…]
1234567890 555-5512222 Rameş 323 Güney Caddesi
2223344556 555-5523232 Adem 1200 Ana Cadde
3334445563 555-5533323 Şweta 871 Rani Jhansi Yolu
4232342432 555-5325523 Sarfaraz 123 Mevlana Azad Sarani

Biz teşebbüs ederse eklemek kimliğine sahip yeni bir müşteri 1234567890 , çünkü bu relvar tasarımını ihlal edeceği Müşteri Kimliği bir olan birincil anahtar ve biz zaten bir müşteri var 1234567890 . DBMS bir reddetmek zorundadır işlem böyle render bunun bu şekilde veritabanı bir ihlali tutarsız bütünlük kısıtlaması .

Yabancı anahtarlar vardır bütünlük kısıtları olduğunu zorlama değeri arasında nitelik kümesinden bir çekilmektedir aday anahtarının başka ilişki . Örneğin, Sipariş ilişkisinde Müşteri Kimliği özniteliğibir yabancı anahtardır. Bir katılmak olduğunu operasyon üzerinde çizer bilgi aynı anda birden ilişkiler. Yukarıdaki örnekteki relvarları birleştirerektüm Müşteriler, Siparişler ve Faturalar için veritabanını sorgulayabiliriz . Yalnızca belirli bir müşteri için demetleri isteseydik, bunu bir kısıtlama koşulu kullanarak belirtirdik.

Biz Müşteri için Siparişleri tümünü almak istiyorsa 1234567890 , biz olabilir sorgulamak ile al, tablodaki her satır döndürmek için veritabanını Müşteri Kimliği 1234567890 dayalı Sipariş Hattı masaya Sipariş tablosu ve katılmak Sipariş No .

Yukarıdaki veritabanı tasarımımızda bir kusur var . Fatura relvarı bir Sipariş No özniteliği içerir. Bu nedenle, Fatura relvarındaki her bir Tuple bir Sipariş No'ya sahip olacaktır, bu da her Fatura için tam olarak bir Sipariş olduğu anlamına gelir. Ancak gerçekte, birçok siparişe karşı veya aslında belirli bir sipariş için bir fatura oluşturulabilir. Ek olarak, Sipariş relvarı, her Siparişin karşılık gelen bir Faturası olduğunu ima eden bir Fatura No özniteliği içerir. Ama yine bu gerçek dünyada her zaman doğru değildir. Bir sipariş bazen birden fazla fatura ile ödenirken, bazen de faturasız olarak ödenir. Yani Sipariş Başına Çok Fatura ve Fatura Başına Çok Sipariş olabilir. Bu bir sayıda çoğa (aynı zamanda denilen Düzen ve Fatura arasındaki ilişki spesifik olmayan ilişki ). Bu ilişkiyi veritabanında temsil etmek için, rolü Siparişler ve Faturalar arasındaki yazışmayı belirtmek olan yeni bir relvar tanıtılmalıdır :

OrderInvoice (Order No, Invoice No)

Şimdi, Sipariş relvarı, Fatura relvarında olduğu gibi OrderInvoice tablosuyla bir -çok ilişkisine sahiptir. Belirli bir Düzen her Fatura almak istiyorsak, tüm siparişler için sorgulayabilir Sipariş No Sipariş bağlantılı olarak eşittir Sipariş No OrderInvoice içinde ve nerede Fatura No OrderInvoice içinde eşit Fatura No Faturada.

Küme-teorik formülasyon

İlişkisel modeldeki temel kavramlar, ilişki adları ve öznitelik adlarıdır . Bunları "Kişi" ve "ad" gibi dizeler olarak temsil edeceğiz ve genellikle değişkenleri ve bunların üzerinde menzili kullanacağız . Diğer bir temel kavram, sayılar ve diziler gibi değerleri içeren atomik değerler kümesidir .

İlk tanımımız , bir tabloda satır veya kayıt kavramını resmileştiren Tuple kavramıyla ilgilidir :

demet
Tuple, öznitelik adlarından atomik değerlere kısmi bir işlevdir .
başlık
Başlık, sonlu bir öznitelik adları kümesidir.
Projeksiyon
Tuple projeksiyon bir üzerinde sonlu kümesi özelliklerin olduğunu .

Sonraki tanım , ilişkisel modelde tanımlandığı gibi bir tablonun içeriğini resmileştiren ilişkiyi tanımlar .

ilişki
Bir ilişki, başlık ve gövde içeren bir demet , tümü etki alanına sahip bir demet kümesidir .

Böyle bir ilişki , burada yüklemdeki yerleri öznitelik adlarıyla tanımlamamız dışında , genellikle birinci dereceden mantıkta bir yüklemin uzantısı olarak adlandırılan şeye yakından karşılık gelir . Genellikle ilişkisel modelde bir veritabanı şemasının bir dizi ilişki adından, bu adlarla ilişkili başlıklardan ve veritabanı şemasının her örneği için tutması gereken kısıtlamalardan oluştuğu söylenir .

ilişki evreni
Bir başlık üzerindeki bir ilişki evreni , başlık ile boş olmayan bir ilişkiler kümesidir .
ilişki şeması
Bir ilişki şeması bir başlık oluşur ve bir yüklem tüm ilişkiler için tanımlanan başlıkla . Bir ilişki , başlığı varsa ve tatmin ediyorsa, bir ilişki şemasını karşılar .

Anahtar kısıtlamalar ve işlevsel bağımlılıklar

İlişki en basit ve en önemli türlerinden biri kısıtlamaları olan anahtar kısıtı . Bize, belirli bir ilişkisel şemanın her örneğinde, demetlerin belirli nitelikler için değerleriyle tanımlanabileceğini söyler.

süper anahtar

Süper anahtar, birleştirilmiş bu sütunların değerlerinin tüm satırlarda benzersiz olduğu bir dizi sütun başlığıdır. Resmi olarak:

Bir süper anahtar, sonlu bir öznitelik adları kümesi olarak yazılır.
Bir superkey aşağıdaki durumlarda bir ilişkide bulunur :
  • ve
  • öyle iki ayrı tuple yoktur .
Bir süper anahtar, içindeki tüm ilişkilerde geçerliyse, bir ilişki evreninde de geçerlidir .
Teorem: Bir SuperKey bir ilişki evrende tutar üzerinden ancak ve ancak ve içinde tutan .
aday anahtarı

Aday anahtar, başka bir süper anahtar oluşturmak üzere daha fazla bölünemeyen bir süper anahtardır.

Bir SuperKey bir ilişki evren için aday anahtarı olarak tutan o bir SuperKey olarak dayanırsa ve hiçbir orada öz alt kümesidir ait olduğu da bir SuperKey olarak tutar .
fonksiyonel bağımlılık

Fonksiyonel bağımlılık, bir tanımlama grubundaki bir değerin, o tanımlama grubundaki başka bir değerden türetilebilmesi özelliğidir.

İşlevsel bir bağımlılık (kısaca FD) olarak yazılır için özellik adları sonlu kümeler.
Aşağıdaki durumlarda bir ilişkide işlevsel bir bağımlılık vardır :
  • ve
  • demetler ,
İşlevsel bir bağımlılık , içindeki tüm ilişkilerde geçerliyse , bir ilişki evreninde de geçerlidir .
Önemsiz işlevsel bağımlılık
İşlevsel bir bağımlılık, bir başlık altında , tüm evrenler arasındaki ilişkide geçerliyse , önemsizdir .
Teorem: Bir FD bir başlık altında önemsizdir ancak ve ancak .
kapatma
Armstrong aksiyomları : şeklinde yazılan bir başlık altındaki bir dizi FD'nin kapanışı , aşağıdakilerin en küçük üst kümesidir :
  • (yansıma)
  • (geçişlilik) ve
  • (büyütme)
Teorem: Armstrong'un aksiyomları sağlam ve eksiksizdir; Bir başlık verilmiş ve bir dizi yalnızca alt kümeleri içermesi FDS arasında , ancak ve ancak her yerinde ilişki evrenlerde tutan hangi tüm FDS in beklemeye.
tamamlama
Sonlu bir FD kümesi altında sonlu bir öznitelik kümesinin tamamlanması , şu şekilde yazılan en küçük üst kümedir :
Bir öznitelik setinin tamamlanması, bir dizi FD'nin kapanışında belirli bir bağımlılığın olup olmadığını hesaplamak için kullanılabilir.
Teorem: Bir dizi FD verildi, ancak ve ancak .
indirgenemez kapak
Bir dizi FD'nin indirgenemez bir örtüsü , aşağıdaki gibi bir dizi FD'dir:
  • öyle bir şey yok
  • bir singleton kümesidir ve
  • .

İşlevsel bağımlılıklardan aday anahtarları türetmek için algoritma

algorithm derive candidate keys from functional dependencies is
    input: a set S of FDs that contain only subsets of a header H
    output: the set C of superkeys that hold as candidate keys in
            all relation universes over H in which all FDs in S hold

    C := ∅         // found candidate keys
    Q := { H }      // superkeys that contain candidate keys
    while Q <> ∅ do
        let K be some element from Q
        Q := Q – { K }
        minimal := true
        for each X->Y in S do
            K' := (K – Y) ∪ X   // derive new superkey
            if K' K then
                minimal := false
                Q := Q ∪ { K' }
            end if
        end for
        if minimal and there is not a subset of K in C then
            remove all supersets of K from C
            C := C ∪ { K }
        end if
    end while

Ayrıca bakınız

Referanslar

daha fazla okuma

Dış bağlantılar