• İlişkisel veritabanları. ilişkisel veritabanı modeli

    İLİŞKİLİ VERİTABANI VE ÖZELLİKLERİ. İLİŞKİ TABLOLARI ARASINDAKİ İLİŞKİ TÜRLERİ

    İlişkisel veritabanı her biri belirli bir türdeki nesneler hakkında bilgi içeren birbiriyle ilişkili tablolar kümesidir. Bir tablo satırı, bir nesne (örneğin, bir ürün, bir müşteri) hakkında veriler içerir ve tablo sütunları, çeşitli özellikler bu nesneler - nitelikler (örneğin, ad, ürün kodu, müşteri bilgileri). Kayıtlar, yani tablo satırları aynı yapıya sahiptir - nesne niteliklerini depolayan alanlardan oluşurlar. Her alan, yani sütun, nesnenin yalnızca bir özelliğini tanımlar ve kesin olarak tanımlanmış bir veri tipine sahiptir. Tüm kayıtlar aynı alanlara sahiptir, yalnızca nesnenin farklı bilgi özelliklerini gösterirler.

    İlişkisel bir veritabanında, her tablonun bir birincil anahtarı, tablodaki her satırı benzersiz şekilde tanımlayan bir alan veya alan kombinasyonu olmalıdır. Anahtar birkaç alandan oluşuyorsa, bileşik olarak adlandırılır. Anahtar benzersiz olmalı ve girişi benzersiz şekilde tanımlamalıdır. Anahtarın değerine göre tek bir giriş bulunabilir. Anahtarlar, veri tabanındaki bilgileri düzenlemek için de kullanılır.

    İlişkisel veritabanı tabloları, ilişkisel normalleştirme gereksinimlerini karşılamalıdır. İlişkilerin normalleştirilmesi, yinelemeyi ortadan kaldırmanıza izin veren, veritabanında depolananların tutarlılığını sağlayan ve veritabanını korumak için işçilik maliyetlerini azaltan, tabloların oluşumunda resmi bir kısıtlama aygıtıdır.

    Grup numarası, tam adı, kayıt numarası, doğum tarihi, uzmanlık adı, fakülte adı alanlarını içeren Öğrenci tablosunu oluşturalım. Böyle bir bilgi depolama organizasyonunun bir takım dezavantajları olacaktır:

    • bilgilerin çoğaltılması (uzmanlık ve fakülte adı her öğrenci için tekrarlanır), bu nedenle veri tabanının hacmi artacaktır;
    • tablodaki bilgileri güncelleme prosedürü, her birini düzenleme ihtiyacı nedeniyle zordur. tablo girişleri.

    Tablo normalleştirme, bu eksiklikleri gidermek için tasarlanmıştır. Mevcut üç normal ilişki biçimi.

    Birincil normal form. Bir ilişkisel tablo, ancak ve ancak satırlarının hiçbiri alanlarında birden fazla değer içermiyorsa ve anahtar alanlarından hiçbiri boş değilse ilk normal forma indirgenir. Bu yüzden Öğrenci tablosundan öğrencinin adına göre bilgi almak istiyorsanız o zaman Tam Ad alanı Soyadı, Adı, Patronimik bölümlerine ayrılmalıdır.

    İkinci normal form. Bir ilişkisel tablo, birinci normal formun gereksinimlerini karşılıyorsa ve birincil anahtarda yer almayan tüm alanları işlevsel olarak birincil anahtara tamamen bağımlıysa, ikinci normal formda tanımlanır. Tabloyu ikinci normal forma getirmek için alanların işlevsel bağımlılığını belirlemek gerekir. Alanların işlevsel bağımlılığı, bilgi nesnesi örneğinde tanımlayıcı özniteliğin yalnızca bir değerinin anahtar özniteliğinin belirli bir değerine karşılık geldiği bir bağımlılıktır.

    Üçüncü normal form. Bir tablo, ikinci normal formun gereksinimlerini karşılıyorsa ve anahtar olmayan alanlarının hiçbiri işlevsel olarak diğer anahtar olmayan alanlara bağımlı değilse, üçüncü normal formdadır. Örneğin, Öğrenci tablosunda (grup numarası, tam ad, kayıt defteri numarası, Doğum tarihi, Muhtar) üç alan - kayıt defteri numarası, grup numarası, Muhtar geçişli bağımlılıktadır. Grup numarası kayıt defteri numarasına, Muhtar da grup numarasına bağlıdır. Geçişli bağımlılığı ortadan kaldırmak için Student tablosundaki bazı alanların başka bir Group tablosuna aktarılması gerekir. Tablolar şu şekilde olacaktır: Öğrenci (Grup No., Ad Soyad, Defter No., Doğum Tarihi), Grup (Grup No., Muhtar).

    İlişkisel tablolarla aşağıdaki işlemler mümkündür:

    • Aynı yapıya sahip tabloları birleştirme. Sonuç, ortak bir tablodur: önce birinci, sonra ikinci (birleştirme).
    • Aynı yapıya sahip tabloların kesişimi. Sonuç - her iki tablodaki kayıtlar seçilir.
    • Aynı yapıya sahip tabloların çıkarılması. Sonuç - çıkarılanda olmayan kayıtlar seçilir.
    • Örnek (yatay alt küme). Sonuç - belirli koşulları karşılayan kayıtlar seçilir.
    • Projeksiyon (dikey alt küme). Sonuç, kaynak tablolardan bazı alanları içeren bir ilişkidir.
    • İki Tablonun Kartezyen Çarpımı Ortaya çıkan tablodaki girdiler, birinci tablodaki her girdinin diğer tablodaki her girdiyle birleştirilmesiyle elde edilir.

    İlişkisel tablolar birbiriyle ilişkilendirilebilir, böylece aynı anda birden fazla tablodan veri alınabilir. Sonuç olarak veritabanının boyutunu azaltmak için tablolar birbirine bağlanır. Her bir tablo çiftinin ilişkisi, aynı sütunlara sahip olmaları halinde sağlanır.

    Aşağıdaki türler var bilgi bağlantıları:

    • bire bir;
    • birden çoğa;
    • çoktan çoğa.

    bire bir iletişim birinci tablonun bir özelliğinin ikinci tablonun yalnızca bir özelliğine karşılık geldiğini ve bunun tersini varsayar.

    Bire Çok İlişki birinci tablonun bir özelliğinin ikinci tablonun birkaç özelliğine karşılık geldiğini varsayar.

    Çoktan çoğa ilişki birinci tablonun bir özelliğinin ikinci tablonun birkaç özelliğine karşılık geldiğini varsayar ve bunun tersi de geçerlidir.

    Veritabanı (DB), belirli bir konu alanı, konu veya görevle ilgili nesneler, süreçler, olaylar veya olgular hakkında belirli kurallara göre düzenlenmiş ve bilgisayar belleğinde tutulan bir dizi bilgidir. Kullanıcıların bilgi ihtiyaçlarının yanı sıra bu veri setinin hem bir bütün olarak hem de herhangi bir parçasının uygun şekilde saklanmasını sağlayacak şekilde düzenlenmiştir.

    İlişkisel bir veritabanı, her biri belirli bir türdeki nesneler hakkında bilgi içeren, birbirine bağlı tablolar kümesidir. Tablonun her satırı, bir nesne (örneğin, bir araba, bilgisayar, müşteri) hakkında veriler içerir ve tablonun sütunları, bu nesnelerin çeşitli özelliklerini içerir - nitelikler (örneğin, motor numarası, işlemci markası, firmaların telefon numaraları) veya müşteriler).

    Bir tablonun satırlarına kayıt denir. Tüm tablo girişleri aynı yapıya sahiptir - nesne niteliklerini depolayan alanlardan (veri öğeleri) oluşurlar (Şekil 1). Kaydın her alanı, nesnenin bir özelliğini içerir ve belirli bir veri türüdür (örneğin, metin dizisi, sayı, tarih). Birincil anahtar, kayıtları tanımlamak için kullanılır. Birincil anahtar, tablodaki her kaydı benzersiz bir şekilde tanımlayan değer kombinasyonuna sahip bir tablodaki alan kümesidir.

    Pirinç. 1. Tablodaki nesnelerin adları

    Veritabanı yönetim sistemleri (DBMS), verilerle çalışmak için kullanılır. VTYS'nin ana işlevleri:

    Veri tanımı (veritabanı yapısı açıklaması);

    Veri işleme;

    Veri yönetimi.

    Veritabanı yapısının geliştirilmesi, bir veritabanı tasarlanırken çözülmesi gereken en önemli görevdir. Veritabanının yapısı (tablolarının kümesi, biçimi ve ilişkileri), veritabanını kullanarak uygulamalar oluştururken ana tasarım kararlarından biridir. Geliştirici tarafından oluşturulan veritabanı yapısı, DBMS veri tanımlama dilinde açıklanmıştır.

    Herhangi bir DBMS, verilerle aşağıdaki işlemleri gerçekleştirmenize izin verir:

    Tablolara kayıt ekleme;

    Bir tablodan kayıtları kaldırmak;

    Veritabanı tablolarındaki bir veya daha fazla kayıttaki bazı alanların değerlerini güncellemek;

    Belirli bir koşulla eşleşen bir veya daha fazla kaydı arayın.

    Bu işlemleri gerçekleştirmek için bir sorgulama mekanizması kullanılır. Sorgu yürütmenin sonucu, belirli kriterlere göre seçilen bir dizi kayıt veya tablolardaki değişikliklerdir. Veritabanına yapılan istekler, bunun için özel olarak oluşturulmuş “dil” adı verilen bir dilde oluşturulur. yapılandırılmış sorgular» (SQL - Yapılandırılmış Sorgu Dili).

    Veri yönetimi genellikle verileri yetkisiz erişime karşı korumak, verilerle çok kullanıcılı çalışma modunu desteklemek ve verilerin bütünlüğünü ve tutarlılığını sağlamak olarak anlaşılır.

    normalleşme

    normal formlar

    Ayrıca bakınız

    • ilişkisel model
    • ilişkisel VTYS

    Diğer sözlüklerde "İlişkisel DB" nin ne olduğunu görün:

      ilişkisel veritabanları- İlişkisel veri modeline dayalı ilişkisel veritabanı veritabanı. "İlişkisel" kelimesi İngilizce'den gelir. ilişki (ilişki). İlişkisel veritabanlarıyla çalışmak için kullanılır ilişkisel VTYS. Kullanım ilişkisel veritabanları veri ... ... Wikipedia idi

      ilişkisel VTYS- İlişkisel DBMS (RDBMS; aksi takdirde İlişkisel Veritabanı Yönetim Sistemi, RDBMS) İlişkisel veritabanlarını yöneten DBMS. İlişkisel (İngiliz ilişki ilişkisi) kavramı, tanınmış bir İngiliz uzmanının ... ... Wikipedia'daki gelişmeleri ile ilişkilidir.

      mekansal veri tabanı- İlişkisel veritabanları, verileri, veri tablolarının satırlar ve sütunlar olarak sunulduğu iki boyutlu bir biçimde depolar. Çok boyutlu veri tabanı sistemleri, çok boyutlu veri gösterimini sağlamak için bu sistemin bir uzantısını sunar. K ... ... Vikipedi

      Cebir Codd- İçindekiler 1 İlişkisel işleçler 1.1 İlişki uyumluluğu ... Wikipedia

      OLAP- (İngilizce çevrimiçi analitik işleme, analitik işleme gerçek zamanlı olarak) veri işleme teknolojisi, aşağıdakilere göre yapılandırılmış büyük veri dizilerine dayalı özet (toplanmış) bilgilerin hazırlanmasından oluşur ... ... Wikipedia

      dilbilgisi kategorisi- Dilbilgisi kategorisi, geniş bir kelime biçimleri kümesinin (veya küçük bir yüksek frekanslı sözcük biçimleri kümesinin ... ... Vikipedi ile bölünmesini belirten, birbirini dışlayan ve zıt dilbilgisi anlamlarından (gramlar) oluşan kapalı bir sistemdir.

      ORM- aynı zamanda şu anlama da gelebilir: İngilizce. Nesne Rol Modeli, rus. Nesne Rol Modeli Metodolojisi kavramsal tasarım kendi grafik gösterimi dahil olmak üzere bilgi sistemleri. İçindekiler 1 Görev ... Vikipedi

      VTYS

      Dosya sunucusu DBMS'si- Veritabanı yönetim sistemi (DBMS) özel program(genellikle bir dizi program) bir veritabanını düzenlemek ve sürdürmek için tasarlanmıştır. oluşturmak ve yönetmek için bilgi sistemi Bir VTYS, ... ... Vikipedi ile aynı ölçüde gereklidir

      ilişkisel cebir- İlişkisel cebir, ilişkisel bir veri modelindeki ilişkiler üzerinde kapalı bir işlemler sistemidir. İlişkisel cebir işlemleri aynı zamanda ilişkisel işlemler. İlk 8 operasyon seti, 1970'lerde E. Codd tarafından önerildi ve ... ... Wikipedia

    Kitabın

    • İlişkisel veritabanları. Kılavuz, Jennifer Widom. İlişkisel Veritabanları, tanınmış Stanford bilim adamları Jeffrey Ullman ve Jennifer Weed tarafından yazılmıştır. Yazarlar, kullanıcı merkezli bir yaklaşım sunuyor ... 1074 ruble için satın alın
    • İlişkisel Veritabanları, Ullman D., Weed D. "İlişkisel Veritabanları" kitabı tanınmış Stanford Üniversitesi bilim adamları Jeffrey Ullman ve Jennifer Weed tarafından yazılmıştır. Yazarlar, kullanıcı merkezli bir yaklaşım önermektedir…

    İlişkisel veritabanı - temel kavramlar

    Çoğu zaman, bir veritabanı hakkında konuşurken, bir tür otomatikleştirilmiş veri depolamayı kastederler. Bu gösterim tamamen doğru değil. Bunun neden böyle olduğu aşağıda gösterilecektir.

    Gerçekten de, kelimenin dar anlamıyla bir veritabanı, iş için gerekli olan belirli bir veri kümesidir (gerçek veriler). Ancak, veri bir soyutlamadır; hiç kimse "sadece veri" görmedi; ortaya çıkmazlar ve kendi başlarına var olmazlar. Veri, gerçek dünyadaki nesnelerin bir yansımasıdır. Örneğin, depoya alınan parçalar hakkında bilgi depolamak istiyorsunuz. Gerçek dünya nesnesi - ayrıntı - veritabanında nasıl görüntülenecek? Bu soruyu cevaplamak için, iş için gerekli olan parçanın hangi özelliklerinin veya yönlerinin alakalı olacağını bilmeniz gerekir. Bunlar arasında parçanın adı, ağırlığı, boyutları, rengi, üretim tarihi, yapıldığı malzeme vb. olabilir. Geleneksel terminolojide, bilgileri veritabanında saklanan gerçek dünya nesnelerine varlıklar denir (bu kelime okuyucuyu korkutmasın - bu genel kabul görmüş bir terimdir) ve gerçek özelliklerine nitelikler denir.

    Belirli bir nesnenin her özelliği bir öznitelik değeridir. Örneğin, motor parçasının ağırlık öznitelik değeri 50'dir, bu da bu motorun 50 kilogram ağırlığında olduğu gerçeğini yansıtır.

    Veritabanına yalnızca fiziksel nesnelerin yansıtıldığını varsaymak yanlış olur. Soyutlamalar, süreçler, fenomenler - yani bir kişinin faaliyetinde karşılaştığı her şey hakkında bilgi alabilir. Bu nedenle, örneğin, bir veritabanı, bir depoya parça tedariki siparişleri hakkında bilgi depolayabilir (ancak bu fiziksel bir nesne değil, bir süreçtir). "Sipariş" varlığının öznitelikleri, tedarik edilen parçanın adı, parça miktarı, tedarikçinin adı, teslimat süresi vb. olacaktır.

    Gerçek dünyanın nesneleri, bilgi faaliyetlerinde dikkate alınması gereken birçok karmaşık bağımlılıkla birbirine bağlıdır. Örneğin, parçalar depoya üreticileri tarafından tedarik edilir. Bu nedenle, parçanın özellikleri arasında "üretici adı" özelliğinin yer alması gerekir. Bununla birlikte, bu yeterli değildir, çünkü belirli bir parçanın üreticisi hakkında ek bilgilere ihtiyaç duyulabilir - adresi, telefon numarası vb. Bu, veritabanının yalnızca parçalar ve satın alma siparişleri hakkında bilgi değil, aynı zamanda üreticileri hakkında da bilgi içermesi gerektiği anlamına gelir. Ayrıca veri tabanı, parçalar ile üreticiler (her parça belirli bir üretici tarafından üretilir) ve siparişler ile parçalar (her sipariş belirli bir parça için yapılır) arasındaki bağlantıları yansıtmalıdır. Veritabanında yalnızca ilgili, anlamlı ilişkilerin saklanması gerektiğini unutmayın.

    Bu nedenle, kelimenin geniş anlamıyla bir veri tabanı, gerçek dünyadaki nesnelerin tanımlarının ve belirli bir uygulama alanıyla ilgili bunlar arasındaki ilişkilerin bir koleksiyonudur. Aşağıda, bu tanımdan yola çıkarak sunum sırasında onu geliştireceğiz.

    ilişkisel veri modeli

    Böylece veritabanında nelerin saklandığına dair bir fikrimiz oldu. Şimdi varlıkların, niteliklerin ve ilişkilerin veri yapılarıyla nasıl eşleştiğini anlamamız gerekiyor. Bu, veri modeli tarafından belirlenir.

    Geleneksel olarak, tüm DBMS'ler temel alınan veri modeline göre sınıflandırılır. Hiyerarşik, ağ ve ilişkisel veri modellerini ayırmak adettendir. Bazen bunlara bir kayıt listesi veri modeli eklenir. Buna göre, hiyerarşik, ağ, ilişkisel DBMS veya kayıt listelerine dayalı DBMS'den söz ederler.

    Yaygınlık ve popülerlik açısından, bugün ilişkisel VTYS rekabetin ötesindedir. Fiili endüstri standardı haline geldiler ve bu nedenle yerel kullanıcı, uygulamasında ilişkisel DBMS ile uğraşmak zorunda kalacak. Ayrıntılarına girmeden ilişkisel veri modeline hızlıca bir göz atalım.

    Codd tarafından 1969-70'te matematiksel ilişkiler teorisi temelinde geliştirilmiştir ve en önemlileri tablo, ilişki, satır, sütun, birincil anahtar, yabancı anahtar olan bir kavramlar sistemine dayanmaktadır.

    İlişkisel bir veritabanı, tüm verilerin kullanıcıya formda sunulduğu bir veritabanıdır. dikdörtgen tablolar veri değerleri ve veritabanındaki tüm işlemler, tablolarla yapılan işlemlere indirgenir. Bir tablo satırlardan ve sütunlardan oluşur ve veritabanı içinde benzersiz bir ada sahiptir. Tablo, gerçek dünyadaki nesnenin (varlığın) türünü yansıtır ve her satır belirli bir nesneyi temsil eder. Bu nedenle, Parça tablosu, depoda depolanan tüm parçalar hakkında bilgi içerir ve satırları, belirli parçalar için öznitelik değerleri kümeleridir. Tablonun her sütunu, bir nesnenin belirli bir niteliğinin bir dizi değeridir. Bu nedenle, Malzeme sütunu "Çelik", "Kalay", "Çinko", "Nikel" vb. değerler kümesidir. Miktar sütunu, negatif olmayan tamsayılar içerir. Ağırlık sütunundaki değerler, parçanın kilogram cinsinden ağırlığına eşit gerçek sayılardır.

    Bu değerler havadan görünmez. Etki alanı adı verilen bir nesne özelliği için olası tüm değerler kümesinden seçilirler. Böylece, malzeme sütunundaki değerler, olası tüm malzemelerin adlarından seçilir - plastik, ahşap, metaller, vb. Bu nedenle, Malzeme sütununda, örneğin "su" veya "kum" gibi karşılık gelen etki alanında olmayan bir değerin görünmesi temelde imkansızdır.

    Her sütunun, genellikle tablonun en üstüne yazılan bir adı vardır ( Pirinç. 1). Bir tablo içinde benzersiz olmalıdır, ancak farklı tabloların aynı ada sahip sütunları olabilir. Herhangi bir tablonun en az bir sütunu olmalıdır; Sütunlar, tablo oluşturulduğunda adlarının göründüğü sıraya göre tabloda düzenlenir. Sütunların aksine satırların adları yoktur; tablodaki sıraları tanımlanmamıştır ve sayı mantıksal olarak sınırlandırılmamıştır.

    Şekil 1. Bir veritabanının temel kavramları.

    Tablodaki satırlar sıralı olmadığından, bir satırı konumuna göre seçmek imkansızdır - aralarında "birinci", "ikinci", "son" yoktur. Herhangi bir tablonun, satırlarının her birini benzersiz bir şekilde tanımladığı değerler olan bir veya daha fazla sütunu vardır. Böyle bir sütuna (veya sütunların birleşimine) birincil anahtar denir. Parça tablosunda, birincil anahtar Parça Numarası sütunudur. Örneğimizde, ambardaki her parçanın tek bir numarası vardır ve bu numara sayesinde gerekli bilgiler Parça tablosundan alınır. Bu nedenle, bu tabloda birincil anahtar Parça Numarası sütunudur. Değerler bu sütunda çoğaltılamaz - Parça tablosunda Parça Numarası sütununda aynı değere sahip satırlar olmamalıdır. Bir tablo bu gereksinimi karşılıyorsa buna ilişki denir.

    Tabloların ilişkisi, ilişkisel veri modelinin temel bir öğesidir. Yabancı anahtarlar tarafından desteklenir. Bir organizasyondaki sıradan çalışanlar (Çalışan tablosu) ve yöneticiler (Yönetici tablosu) hakkında bilgileri depolayan bir veritabanı örneğini ele alalım ( Pirinç. 2). Yönetici tablosunun birincil anahtarı, Sayı sütunudur (örneğin, personel numarası). Aynı soyadına sahip iki yönetici aynı kuruluşta çalışabileceğinden, Soyadı sütunu birincil anahtar görevi göremez. Herhangi bir çalışan, veri tabanına yansıtılması gereken tek bir lidere tabidir. Çalışan tablosu Yönetici Numarası sütunu içerir ve bu sütundaki değerler Yönetici tablosundaki Sayı sütunundan seçilir (bkz. Şekil 1). Pirinç. 2). Yönetici Numarası sütunu, Çalışan tablosundaki bir yabancı anahtardır.

    Şekil 2. Veritabanı tablolarının ilişkisi.

    Veritabanında tablo tanımlayıcıları, sütun tanımlayıcıları vb. "verilerle ilgili veriler" yoksa tablolar saklanamaz ve işlenemez. Genellikle meta veri olarak adlandırılırlar. Meta veriler ayrıca tablo şeklinde sunulur ve veri sözlüğünde saklanır.

    Tablolara ek olarak, ekran formları, raporlar (raporlar), görünümler (görünümler) ve hatta veritabanıyla çalışan uygulamalar gibi başka nesneler de veritabanında saklanabilir.

    Bir bilgi sisteminin kullanıcıları için veri tabanının sadece gerçek dünyadaki nesneleri yansıtması yeterli değildir. Böyle bir yansımanın açık ve tutarlı olması önemlidir. Bu durumda, veritabanının bütünlük koşulunu sağladığı söylenir.

    Verilerin doğruluğunu ve karşılıklı tutarlılığını garanti altına almak için veri tabanına veri bütünlüğü kısıtlamaları adı verilen bazı kısıtlamalar getirilir.

    Birkaç tür bütünlük kısıtlaması vardır. Örneğin, bir tablo sütunundaki değerlerin yalnızca karşılık gelen alandan seçilmesi gerekir. Uygulamada, referans bütünlüğü gibi daha karmaşık bütünlük kısıtlamaları dikkate alınır. Özü, bir yabancı anahtarın tabloda var olmayan bir satırın işaretçisi olamayacağı gerçeğinde yatmaktadır. Bütünlük kısıtlamaları, aşağıda tartışılacak olan özel araçlar kullanılarak uygulanır. Sn.Veritabanı sunucusu .

    SQL dili

    Kendi başına, bilgisayar biçimindeki veriler, ona erişmenin bir yolu yoksa kullanıcıyı ilgilendirmez. Verilere erişim, standart bir sorgulama dilinde formüle edilen veri tabanına yapılan sorgular şeklinde gerçekleştirilir. Bugün, çoğu DBMS için bu dil SQL'dir.

    Bu dilin bir veritabanına erişimi tanımlama aracı olarak ortaya çıkışı ve gelişimi, ilişkisel veritabanları teorisinin yaratılmasıyla ilişkilidir. prototip SQL dili IBM'in Santa Teresa laboratuvarındaki System/R araştırma projesinin bir parçası olarak 1970 yılında ortaya çıktı. SQL, artık ilişkisel veritabanı yönetim sistemleriyle arabirim için standarttır. Popülaritesi o kadar büyüktür ki, ilişkisel olmayan DBMS geliştiricileri (örneğin, Adabas) sistemlerine bir SQL arabirimi sağlar.

    SQL dilinin resmi bir standardı vardır - ANSI/ISO. Çoğu DBMS geliştiricisi bu standarda uyar, ancak genellikle yeni veri işleme yeteneklerini uygulamak için onu genişletir. Bölümde açıklanacak olan yeni veri yönetimi mekanizmaları Sn.Veritabanı sunucusu , yalnızca genel olarak dil standardında yer almayan özel SQL ifadeleri aracılığıyla kullanılabilir.

    SQL, geleneksel biçiminde bir programlama dili değildir. Üzerine programlar yazılmaz, veritabanına sorgular yazılır. Bu nedenle, SQL bildirimsel bir dildir. Bu, elde edilmesi gerekenleri formüle etmek için kullanılabileceği, ancak nasıl yapılması gerektiğini gösteremeyeceği anlamına gelir. Özellikle prosedürel programlama dillerinden (C, Pascal, Ada) farklı olarak SQL if-then-else, for, while vb. ifadeleri içermez.

    Dilin sözdizimini ayrıntılı olarak ele almayacağız. Sadece basit örnekleri anlamak için gerekli olduğu ölçüde değineceğiz. Onların yardımıyla en ilginç veri işleme mekanizmaları gösterilecektir.

    Bir SQL sorgusu, birbiri ardına noktalı virgülle ayrılan bir veya daha fazla ifadeden oluşur. Aşağıdaki Tablo 1, ANSI/ISO SQL standardının parçası olan en önemli işleçleri listeler.

    Tablo 1. SQL dilinin temel işleçleri.

    SQL sorguları, veritabanı nesnelerini benzersiz şekilde tanımlayan adlar kullanır. Özellikle bunlar, tablo adı (Ayrıntı), sütun adı (Ad) ve veritabanındaki ek türlere ait diğer nesnelerin adlarıdır (örneğin, yordamların ve kuralların adları). tartışılan Sn.Veritabanı sunucusu . Basit adların yanı sıra karmaşık adlar da kullanılır - örneğin, nitelikli bir sütun adı, sütunun adını ve ait olduğu tablonun adını tanımlar (Detay.Ağırlık). Basit olması için örneklerde isimler Rusça yazılacaktır, ancak pratikte bu önerilmemektedir.

    Herhangi bir tablodaki her sütun, belirli veri türlerini depolar. Ayırt etmek baz türleri veri - sabit uzunluklu karakter dizileri, tamsayılar ve gerçek sayılar ve ek veri türleri - değişken uzunluktaki karakter dizileri, para birimi, tarih ve saat, mantıksal veriler (iki değer - "DOĞRU" ve "YANLIŞ"). SQL'de sayısal, dize, karakter, tarih ve saat sabitlerini kullanabilirsiniz.

    Birkaç örneğe bakalım.

    "Tüm parça türleri için stoktaki parça sayısını belirle" sorgusu şu şekilde uygulanır:

    Ad, Miktar SEÇİN

    Detaydan;

    Sorgunun sonucu, orijinal Detay tablosundan alınan Ad ve Miktar olmak üzere iki sütunlu bir tablo olacaktır. Özünde, bu sorgu, orijinal tablonun dikey bir izdüşümü elde etmenizi sağlar (daha kesin olarak, tablo satırları kümesinin dikey bir alt kümesi). Detay tablosunun tüm satırlarından, Ad ve Miktar olmak üzere iki sütundan alınan değerleri içeren satırlar oluşturulur.

    SQL'de formüle edilen "çelikten yapılmış hangi parçalar stokta tutuluyor?" sorgusu şöyle görünür:

    Detaydan

    NEREDE Malzeme = "Çelik";

    Bu sorgunun sonucu, kaynak tabloda yalnızca Malzeme sütununda "Çelik" değerine sahip satırları içeren bir tablo olacaktır. Bu sorgu, Ayrıntı tablosunun yatay bir projeksiyonunu almanızı sağlar (SELECT ifadesindeki yıldız, tablodaki tüm sütunların seçildiği anlamına gelir).

    "Stoktaki plastikten yapılmış ve beş kilogramdan hafif parçaların adını ve sayısını belirleyin" sorgusu aşağıdaki gibi yazılır:

    Ad, Miktar SEÇİN

    Detaydan

    NEREDE Malzeme = "Plastik"

    Ve ağırlık< 5;

    Sorgu sonucu, plastikten yapılmış ve 5 kg'dan hafif parçaların adını ve numarasını içeren iki sütunlu bir tablodur - Ad, Miktar. Aslında, seçim işlemi, önce yatay bir izdüşüm oluşturma işlemidir (Parça tablosunun Malzeme = "Plastik" ve Ağırlık olan tüm satırlarını bulun).< 5), а затем вертикальной проекции (извлечь Название и Количество из выбранных ранее строк).

    sağlama araçlarından biri hızlı erişim tablolara, dizinlerdir. Dizin, belirli bir tablo satırına işaretçi olan bir veritabanı yapısıdır. Veritabanı dizini, bir kitaptaki dizin dizini ile aynı şekilde kullanılır. Belirli bir tablo satırının bir veya daha fazla sütunundan alınan değerleri ve o satıra bir referansı içerir. DBMS'nin performans göstermesine izin veren dizindeki değerler sıralanmıştır. hızlı arama masada.

    Bir sorgunun Depo veritabanına formüle edildiğini varsayalım:

    SEÇ İsim Miktar, Malzeme

    Detaydan

    NEREDE Numara = "T145-A8";

    Bu tablo için dizin yoksa, bu sorguyu yürütmek için DBMS'nin tüm Detay tablosunu taraması, sırayla satırları seçmesi ve her biri için seçim koşulunu kontrol etmesi gerekir. Büyük tablolar için böyle bir sorgunun tamamlanması çok uzun zaman alacaktır.

    Detay tablosunun Sayı sütununda önceden bir dizin oluşturulmuşsa, tablodaki arama süresi en aza indirilecektir. Dizin, Sayı sütunundaki değerleri ve Parça tablosunda bu değere sahip satıra bir bağlantı içerecektir. Bir sorgu yürütülürken, DBMS önce dizinde "T145-A8" değerini bulacaktır (ve dizin sıralı olduğundan ve satırları küçük olduğundan bunu hızlı bir şekilde yapacaktır) ve ardından aranan satırın fiziksel konumunu şu şekilde belirler: dizinde referans.

    CREATE INDEX SQL deyimi ile bir indeks oluşturulur. İÇİNDE bu örnekŞebeke

    BENZERSİZ DİZİN OLUŞTUR Parça dizini

    AÇIK Detay (Sayı);

    Parça tablosunun Sayı sütununda "Parça Dizini" adlı bir dizin oluşturacaktır.

    Bir DBMS kullanıcısı için ilgi çekici olan, SQL dilinin tek tek ifadeleri değil, tek bir bütün olarak tasarlanmış ve onun bakış açısından anlam ifade eden bazı dizileridir. Bu tür her bir SQL ifadesi dizisi, veritabanında belirli bir eylemi uygular. Her biri veritabanı tablolarında bazı işlemler gerçekleştiren birkaç adımda gerçekleştirilir. evet içinde banka sistemi kısa vadeli bir hesaptan uzun vadeli bir hesaba belirli bir tutarın aktarılması birkaç işlemde gerçekleştirilir. Bunlar arasında - tutarı kısa vadeli bir hesaptan çekmek, uzun vadeli bir hesaba kredi vermek.

    Bu eylemi gerçekleştirme sürecinde bir başarısızlık meydana gelirse, örneğin, ilk işlem tamamlandığında, ancak ikincisi tamamlanmadığında, o zaman para kaybedilir. Bu nedenle, veritabanı üzerindeki herhangi bir işlemin tamamen yapılması veya hiç yapılmaması gerekir. Bu eyleme işlem denir.

    İşlem işleme, işlemleri geri almak ve veritabanının durumunu geri yüklemek için kullanılan günlüğe dayanır. İşlemler hakkında daha fazla ayrıntı tartışılacaktır. Sn.Hareket işleme .

    SQL dili tartışmasını sonlandırırken, bunun bir sorgulama dili olduğunu bir kez daha vurguluyoruz. Üzerinde bir veri tabanı ile çalışan karmaşık bir uygulama programı yazamazsınız. Bu amaçla modern DBMS'ler, hem C, Pascal, Ada gibi üçüncü nesil prosedürel dillerin (3GL) ana özelliklerine hem de SQL'i gömme yeteneğine sahip olan dördüncü nesil dili (Forth Generation Language - 4GL) kullanır. program metnindeki ifadelerin yanı sıra kullanıcı arayüzü kontrolleri (menüler, formlar, kullanıcı girişi vb.). Bugün 4GL, veritabanı uygulama geliştirme araçları için fiili standartlardan biridir.

    ilişkisel model

    İlişkisel veritabanı modeli, 1969 yılında matematikçi ve IBM araştırmacısı E.F. Codd (E.F. Codd). İlişkisel veritabanları hakkında bazı ilk bilgiler, “ genel bakış makalesinde yer almaktadır. DB ve DBMS” 2. Şu anda baskın olan ilişkisel veritabanları olduğundan, bu makalede (ve ayrıca “ makalelerde ” Veri tanımlaması”, “Veri işleme" Ve " Veri tabanı tasarımı” 2) ilişkisel modelin en temel kavramları ayrıntılı olarak ele alınır.

    İlişkisel veritabanları teorisinin başlangıçta katı bir matematik dilinde formüle edildiğini ve katı, resmi olarak tanımlanmış matematiksel kavramlar olduğunu hemen not ediyoruz. en iyi yolşeylerin özünü tanımlar. Aynı zamanda, çoğu durumda, terminolojinin titizliğinden, yapmaya çalışacağımız sunumun şeffaflığı lehine feda etmek çok fazla zarar görmeden mümkündür.

    İlişkisel modelin ana fikri aşağıdaki gibidir. Veritabanı bir dizi sıralanmamış masalar(En basit durumda - bir tablodan). Tablolar prosedürel olmayan (bildirimsel) işlemler yoluyla manipüle edilebilir - istekler, sonuçları da tablolardır.

    Genellikle "ilişkisel" kelimesi ( ilişkisel) “ilişkisel model” terimi, ilişkilerin ilişkisel bir veri tabanında kurulduğu gerçeğine dayanarak yorumlanır ( ilgili olmak) tablolar arasında. Bu açıklama uygundur, ancak kesin değildir. Codd'un orijinal terminolojisinde, bağlantı terimleri ( ilişkiler), Öznitellikler ( Öznitellikler) ve demetler ( demetler) çoğumuzun daha aşina olduğumuz tablolar, sütunlar (alanlar) ve satırlar (kayıtlar) terimlerini kullandığı yerlerde kullanıldı.

    Konu alanının bilgisel bir modelini oluştururken (bkz. DB ve DBMS”, “Veri tabanı tasarımı 2) öne çıkmak varlıklar(nesneler), onları tanımlayın özellikler a (özellikler, öznitelikler), modelleme amaçları için gerekli ve varlıklar arasındaki ilişkiler kurulur. İnfolojik modelden datalojik ilişkisel modele geçiş aşamasında tablolar ortaya çıkar. Tipik olarak, her varlık tek bir tablo ile temsil edilir. Tablonun her satırı (bir kayıt), varlığın bir örneğine karşılık gelir ve her alan, bazı özellikleri (nitelikleri) açıklar..

    Örneğin, herkesin soyadı, adı, soyadı, TIN, ikamet ettiği ülke ve doğum tarihi dahil olmak üzere kişiler hakkında bilgi depolamamız gerekirse, varlık kişidir ve belirtilen veriler niteliklerdir. Varlığın kendisi doğal olarak tablonun adı olur.

    Tablo "Adam"

    İlişkisel model, bir tablodaki her satırın benzersiz olmasını gerektirir, örn. böylece herhangi iki dizi en az bir özelliğin değerinde farklılık gösterir.

    Geleneksel tablo formu verilerin kendisini sunmak istediğinizde kullanışlıdır. Yukarıdaki örnekte olduğu gibi, yalnızca yapı- alan adları, daha sonra netlik, şemalarda kullanım kolaylığı ve yerden tasarruf açısından, aşağıdaki gibi tasvir edilmesi daha uygundur:

    Anahtarlar

    anahtar masalarbelirli bir tablo içinde benzersiz değerler içeren bir alan veya alanlar grubuna denir. Anahtar, karşılık gelen tablo satırını benzersiz şekilde tanımlar. Anahtar tek bir alandan oluşuyorsa, genellikle basit eğer birkaç - bileşik. Yukarıdaki örnekte anahtar, TIN alanıdır (VKN'lerin bir ülke içinde benzersiz olduğunu varsayıyoruz).

    Bileşik anahtar içeren bir tablo örneğini ele alalım. Hava tahmini siteleri genellikle bilgileri şu şekilde sunar: her tarih için gece, sabah, öğleden sonra ve akşam tahmini sıcaklığı belirtin. Bu bilgiyi saklamak için aşağıdaki formda bir tablo kullanabilirsiniz:

    Bu tabloda, ne Tarih alanı, ne günün saati ne de Sıcaklık anahtar değildir - bu alanların her birinde değerler tekrarlanabilir. Ancak, Tarih+Günün Saati alanlarının kombinasyonu benzersizdir ve bir tablo satırını benzersiz şekilde tanımlar. Bu bileşik anahtardır.

    Çoğu zaman, bir anahtar seçiminin kesin olmadığı bir durum vardır. İlk örneğe geri dönelim. Soyadı, adı, soyadı, TIN, doğum tarihine ek olarak, sivil pasaportun seri ve numarası ile yabancı pasaportun seri ve numarasının saklanması gerektiğini varsayalım. Tablo böyle görünecek.

    Bu tabloda en fazla üç anahtar seçebilirsiniz. Biri basit (TIN), diğer ikisi bileşik (Seri + Sivil Pasaport Numarası ve Seri + Yabancı Pasaport Numarası) şeklindedir. Böyle bir durumda geliştirici, veritabanını düzenleme açısından en uygun anahtarı seçer (genel durumda, değerini bulmak için en az zaman alan anahtar). Bu durumda seçilen anahtara genellikle ana anahtar veya öncelik, key ve bir anahtar oluşturabileceğiniz diğer sütun kombinasyonları - olası veya alternatif tuşlar. Tabloda her zaman en az bir olası anahtar olduğuna dikkat edin, çünkü satırlar tekrarlanamaz ve bu nedenle tüm sütunların kombinasyonunun olası bir anahtar olması garanti edilir.

    Tabloları görüntülerken birincil anahtarlar tablolar belirlenir. Örneğin, ilgili alanların altı genellikle çizilir. A Microsoft Erişimiönemli alanları kalın harflerle vurgular.

    Anahtar belirsizliğinden daha sık olarak, geliştiriciler depolamak istedikleri verilerden bir anahtarı kaçırmakla karşı karşıya kalırlar. Benzer bir gerçek, konu alanını analiz etme sürecinde de kurulabilir. Örneğin, basit bir kişi listesi - adlar, soyadlar, soyadı ve doğum tarihleri ​​- saklamak istiyorsanız, o zaman bu nitelikler kümesinde hiçbir anahtar yoktur - iki kişinin olduğu bir durum düşünülebilir. çeşitli insanlar verilen veriler aynıdır. Bu durumda, yapay olarak ek bir alan, örneğin benzersiz bir kişi numarası girmeniz gerekir. Böyle bir anahtar bazen literatürde vekil. Sıklıkla, verimlilik nedenleriyle bir yedek anahtar da sunulur. Örneğin, tablonun uzun bir bileşik anahtarı varsa, geliştiriciler genellikle ek bir kısa sayısal vekil anahtar sunar ve bunu birincil anahtar yapar. Bu, genellikle varken bile yapılır. basit anahtar, "uygunsuz" (arama için verimsiz) bir veri türüne sahiptir, örneğin, dize. Bu tür işlemler artık teori ile ilgili olmayıp, pratikte sıklıkla karşılaşılmaktadır.

    Dikkatli okuyucu, anahtarın neredeyse her zaman (tablonun tüm alanlarını içermediği sürece) gereksiz alanlar dahil edilerek genişletilebileceğini fark edebilir. Resmi olarak, böyle bir anahtar bir anahtar olarak kalacaktır, ancak pratik açıdan bu sadece bir kavram oyunudur. Anahtarın uzunluğunu (karmaşıklığını) en aza indirmeye çalışmak her zaman gerekli olduğundan, bu tür anahtarların mümkün olduğu bile düşünülmez.

    Normal formlar, normalleştirme

    Kağıda veya Word'de çizebildiğimiz her tablo ilişkisel bir veritabanı tablosu olamaz. Ve ilişkisel bir veritabanında kullanılabilecek her tablo, ilişkisel modelin gerekliliği açısından doğru değildir.

    İlk önce, tek bir sütundaki tüm verilerin aynı türde olmasını gerektirir(türleri için bkz.Veri tanımlaması” 2). Bu açıdan bakıldığında, aşağıdaki örneği tartışmak bile mantıklı değil:

    ikincisi, tabloya bir birincil anahtarın atanmasını gerektirir.

    Bu gereksinimler gereklidir, ancak yeterli değildir. İlişkisel veritabanları teorisi, “normal formlar” olarak adlandırılan kavramları ortaya koyar - verileri tablolarda düzenlemek için gereklilikler. Gereksinimler daha katı hale geldikçe normal formlar sırayla numaralandırılır. Düzgün tasarlanmış bir veritabanında, tablolar en az üçüncü normal formdadır. Buna göre, ilk üç normal formu ele alacağız. Yukarıda formüle edilen iki ana gereksinimi karşılayan tablolarla uğraştığımızı hatırlayın.

    İlk normal biçim (1NF)

    İlk normal form, bir tabloda bulunan tüm verilerin atomik olması gerektiğini belirtir.(bölünmez). Karşılık gelen atomik veri türlerinin listesi DBMS tarafından belirlenir. 1NF gereksinimi oldukça doğaldır. Bu, her kaydın her alanının yalnızca bir değer içermesi, ancak bir dizi veya başka herhangi bir veri yapısı içermemesi gerektiği anlamına gelir. İşte 1NF'de olmayan bir tablonun anlamlı bir örneği. Bazı konularda öğrencilerin notlarının listelendiğimizi varsayalım.

    Notlar alanının değeri atomik olmadığı için tablo 1NF gerekliliklerine uymaz.

    HAKKINDA olası yol değerlendirme listesinin sunumu, makale için metodolojik önerilerde yazılmıştır. “Veritabanı Tasarımı” 2.

    İkinci normal biçim (2NF)

    Bir tablo 1NF'deyse ve anahtar olmayan her sütun tamamen birincil anahtara bağımlıysa, ikinci normal formda olduğu söylenir. Başka bir deyişle, her alanın değeri tamamen birincil anahtarın değeri tarafından belirlenmelidir. Birincil anahtara bağımlılığın, anahtarın tek tek bileşenine değil (bileşik anahtar söz konusu olduğunda) bir bütün olarak anahtara bağımlılık olarak anlaşıldığına dikkat etmek önemlidir. İşte 2NF'de olmayan bir tablo örneği. Bunu yapmak için, hava tahmini örneğine geri dönelim ve tabloya başka bir sütun ekleyelim - güneşin doğuş zamanı (bu tamamen makul bir örnektir, bu tür bilgiler genellikle hava tahmini sitelerinde verilir).

    Hatırladığımız gibi, bu tablonun Tarih + Günün Saati bileşik anahtarı vardır. Sıcaklık alanı tamamen birincil anahtara bağlıdır - bununla ilgili herhangi bir sorun yoktur. Ancak Sunrise alanı yalnızca Date alanına bağlıdır, Günün saati doğal olarak gündoğumu saatini etkilemez.

    Burada şu soruyu sormak uygundur: 2NF'nin pratik anlamı nedir? Bu kısıtlamaların kullanımı nedir? Büyük olduğu ortaya çıktı. Yukarıdaki örnekte geliştiricinin 2NF'nin gereksinimlerini göz ardı ettiğini varsayalım. İlk olarak, sözde olması muhtemeldir. fazlalık- gereksiz verilerin depolanması. Sonuçta, belirli bir tarihe sahip bir kayıt için güneşin doğuş saati zaten depolanmışsa, o zaman belirli bir tarihe sahip diğer tüm kayıtlar için aynı olmalıdır ve genel olarak konuşursak, kaydetmeye gerek yoktur.

    "Olmalı" sözlerine dikkat edelim. Ya olmazsa? Aslında, veritabanı düzeyinde bu hiçbir şekilde kontrol edilmez - tablodaki anahtar bileşiktir, aynı tarihler olabilir (ve büyük olasılıkla olacaktır). Ve hiçbir resmi kısıtlama (ve "bu olamaz" şeklindeki anlayışımız bunun için geçerli değildir) belirtmeyi yasaklamaz. farklı zaman aynı tarih için gün doğumu.

    Üçüncü normal form (3NF)

    Bir tablo 2NF ise ve tüm anahtar olmayan sütunlar karşılıklı olarak bağımsızsa 3NF'de olduğu söylenir.

    Sütunların karşılıklı bağımlılığını aşağıdaki gibi anlamak uygundur: Birini değiştirmeden diğerini değiştiremiyorsanız, sütunlar karşılıklı olarak bağımlıdır.

    İşte 3NF'de olmayan bir tablo örneği. Basit bir örnek düşünün not defteri muhtemelen ülkenin farklı bölgelerinde yaşayan insanların ev telefonlarını saklamak için.

    Bu tablo, anahtar olmayan sütunlar Şehir ve Şehir Kodu arasında bir bağımlılığa sahiptir, dolayısıyla tablo 3NF'de değildir.

    Yukarıdaki bağımlılığın varlığının geliştirici tarafından konu alanını analiz ederek belirlendiğini unutmayın - böyle bir çarpışma herhangi bir resmi yöntemle görülemez. Konu alanının özelliklerini değiştirdiğinizde sütunlar arasındaki bağımlılık ortadan kalkabilir. Örneğin, aynı şehir içinde farklı kodlar girilirse (Moskova'daki 495 ve 499 gibi), 3NF gerekliliklerini ihlal etme açısından karşılık gelen sütunların ilişkisi kesilir.

    İlişkisel veritabanları teorisinde, daha yüksek dereceli formlar da dikkate alınır - Boyce-Codd normal formu, 4NF, 5NF ve hatta daha yüksek. Bu formlar büyük pratik öneme sahip değildir ve geliştiriciler, kural olarak, her zaman 3NF'de durur.

    Veritabanı normalleştirme

    Normalleştirme, veritabanı tablolarını seçilen bir normal forma getirme işlemidir. 2NF'ye normalleştirme, kural olarak, bir tabloyu birkaç tabloya bölmek olan ayrıştırmaya indirgenir. 3NF'ye normalleştirme genellikle bağımlı (hesaplanan) sütunları kaldırarak yapılabilir. Bazı durumlarda, 3NF'ye normalleştirme yapılırken ayrıştırma da yapılmalıdır.

    Çok tablolu veritabanları, tablolar arası ilişkiler, yabancı anahtarlar

    Uygulamada, tek tablolu veritabanları oldukça nadirdir, çünkü bir etki alanı veritabanının modellenmesi açısından bir tablonun varlığı, bir varlığın varlığı anlamına gelir. Buna karşılık, birkaç varlığın varlığı genellikle aralarındaki ilişkilerin varlığı anlamına gelir.

    Eksiksiz bir veritabanı tasarımı hedefi belirlemeden, çok tablolu veritabanlarındaki ilişkileri göstermemizi sağlayan bir örneği ele alalım.

    Sınıflara ayrılmış öğrencilerin ve bazı konuları öğreten öğretmenlerin bulunduğu bir okulla karşı karşıya olduğumuzu varsayalım. Hemen dört varlığı ayırt ederiz: öğrenciler, öğretmenler, sınıflar ve konular. Bu varlıklar bize zaten dört tablo veriyor.

    Ardından, varlıkların niteliklerine - ne tür bilgileri saklayacağımıza karar vermemiz gerekiyor. Örneğimiz tamamen açıklayıcı olduğundan, saklanan bilgi miktarını en aza indirmeye çalışacağız. Her öğrencinin soyadını ve adını, sınıf için - paralelin sayısı ve paralelin içindeki sınıfı tanımlayan harf, öğretmen için - soyadı, ad ve soyadı, konu için - kaydetmesi konusunda anlaşalım. sadece adı.

    Şimdi sorunu birincil anahtarlarla çözmemiz gerekiyor. Prensip olarak öğrencilerin ve öğretmenlerin tablolarında bir anahtar yoktur, bu nedenle onlara bir vekil sayısal anahtar - bir sayı - ekleyeceğiz. Sınıf ve öğe tablolarının genellikle anahtarları vardır. Sınıflar tablosunda anahtar bileşiktir, Paralel Sayı + Harf özniteliklerinden oluşur ve nesneler tablosunda basit bir anahtar tek bir alandan oluşur - nesnenin adı. Anahtarlardan bahsederken, yedek anahtarların genellikle verimlilik nedenleriyle, bileşik anahtarlardan veya dizeler gibi uygun olmayan türlerdeki anahtar alanlardan kurtulmaya çalışırken eklendiğinden bahsetmiştik. Bu şekilde yapacağız. Tabloların her birine bir vekil sayısal anahtar ekleyelim.

    Sonuç olarak, açıklanan varlıklara karşılık gelen aşağıdaki tablo setini elde edeceğiz.

    Hangi konu alanıyla uğraştığımızı anlayarak, varlıklarımızın kendi başlarına var olmadıklarını biliyoruz - yukarıda özetlediğimiz bazı ilişkilerle birbirlerine bağlılar. Ama teknik olarak nasıl bağlanır? Burada ek alanlar ve hatta ek tablolar girmeden yapamazsınız. Varlıklar arasındaki ilişkileri sırayla ele alalım.

    Bir öğrenciyi belirli bir sınıfa atamak için "Öğrenci" tablosunda ek bir Sınıf numarası alanı oluşturalım. (Tipinin “Class” tablosundaki Class Number alanının tipi ile tamamen eşleşmesi gerektiği açıktır.) Artık Class Number alanlarının değerlerini eşleştirerek “Student” ve “Class” tablolarını bağlayabiliriz (biz yanlışlıkla bu alanları aynı şekilde adlandırmadı, pratikte bu genellikle ciltleme alanlarında kolayca gezinmek için yapılır). "Sınıf" tablosundaki bir kaydın "Öğrenci" tablosundaki birçok kayda karşılık gelebileceğini unutmayın (ve pratikte büyük olasılıkla öyledir - bir öğrenciden oluşan bir sınıf hayal etmek zordur). Bu tür tabloların “ ilişkisi ile ilişkili olduğu söylenir. birden çoğa". Ve “Öğrenci” tablosundaki sınıf numarası alanı çağrılır. yabancı anahtar. Gördüğünüz gibi, yabancı anahtarların amacı tabloları birbirine bağlamaktır. Yabancı anahtarın her zaman birincil anahtarı ifade ettiğini unutmayın. bağlantılı tablo(yani, yabancı anahtar "çok" tarafındadır). Yabancı ilişkili birincil anahtarın adı ebeveyn, terim daha az yaygın olarak kullanılmasına rağmen.

    Microsoft Access tarzında bir şema ile söylenenleri açıklayalım (Access'in “Veri Şeması” hakkında daha fazla bilgi için makaleye bakın. “Verilerin açıklaması” 2).

    Şimdi öğretmenleri ve konuları düşünelim. Konu alanını analiz ederken (tek yol - sonuçta, resmi modelin kendisinden gerçek durumu çıkarmak imkansızdır), "öğretmen" ve "konu" varlıkları arasındaki bağlantı türünün bundan farklı olduğunu fark ediyoruz. yukarıda düşünülmüştür. Ne de olsa, birçok öğretmen tarafından yalnızca bir konu öğretilemez, aynı zamanda bir öğretmen birçok konuyu öğretebilir. Dolayısıyla bu varlıklar arasında bir bağlantı vardır” çoktan çoğa". Burada ek alanlar eklemek artık yeterli değil (deneyin!). Çoktan çoğa ilişkiler her zaman ek bir tablo getirilerek çözülür. Yani, aşağıdaki yapıya sahip olan “Öğretmen-Konu” tablosunu düzenliyoruz:

    Tablo “Öğretmen-Konu”

    Bu tablo, iki alanından oluşan bileşik bir anahtara sahiptir. Hem "Öğretmen" tablosu hem de "Konu" tablosu bu tabloyla bir-çok ilişkisi içinde ilişkilidir (elbette, her iki durumda da "çok", "Öğretmen-Özne" tarafındadır). Buna göre, “Öğretmen-Konu” tablosunda, karşılık gelen tablolarla bağlantı kurmaya yarayan iki yabancı anahtar vardır (her ikisi de bileşik birincil anahtarın yasak olmayan parçalarıdır).

    Uygulamada, dikkate alınan “bire-çok” ve “çoka-çok” ilişkilerine ek olarak, “ bire bir". Teori açısından bakıldığında, böyle bir ilişki ilgi çekici değildir, çünkü bire bir ilişkiyle birbirine bağlanan iki tablo her zaman basitçe bir araya getirilebilir. Bununla birlikte, gerçek veritabanlarında, veri işlemeyi optimize etmek için bire bir ilişki kullanılır. Yukarıdakileri bir örnekle açıklayalım.

    İnsanlar hakkında pek çok farklı bilgi sakladığımızı varsayalım - çeşitli belgelerinin verileri, telefon numaraları, adresleri vb. Büyük olasılıkla, bu verilerin çoğu çok nadiren kullanılacaktır. Ve çoğu zaman sadece bir soyadına, ada, soyadına ve telefon numarasına ihtiyacımız var. O zaman iki tabloyu organize etmek ve bire bir ilişki içinde birbirine bağlamak mantıklıdır. Sık kullanılan bilgileri saklamak için bir (küçük) tabloda, diğerinde - gerisi. Doğal olarak, bire bir ilişkiyle bağlanan tablolar aynı birincil anahtara sahiptir.

    dürüstlük kuralları

    ilişkisel model iki tanımlar Genel kurallar veritabanı bütünlüğü: nesne bütünlüğü ve referans bütünlüğü.

    bütünlük kuralı nesnelerÇok basit. BT tabloların birincil anahtarlarının boş (boş) değerler içermemesini gerektirir.

    kural bilgi tutarlılığıyabancı anahtarların ana anahtarlarla tutarsız değerler içermemesini gerektirir. Yukarıda tartışılan örneğe dönersek, örneğin, öğrencilerin yalnızca “Sınıflar” tablosunda sayısı belirtilen sınıfa ait olmalarını şart koşmalıyız.

    Çoğu DBMS, veri bütünlüğünü izleyebilir (elbette bu, geliştiricinin veri yapılarını tanımlama aşamasında uygun çabaları gerektirir). Özellikle, referans bütünlüğünü korumak için mekanizmalar kullanılır. basamaklı operasyonlar. Basamaklı, özellikle, bire çok ilişkisiyle başka bir tabloyla ilişkili olan "ana" tablodan bir kayıt silindiğinde, ilgili tüm kayıtların "çok" tablosundan (DBMS'nin kendisi tarafından) otomatik olarak silinmesi anlamına gelir. , kullanıcı müdahalesi olmadan). Ve bu doğaldır, çünkü bu tür kayıtlar "havada asılı kalır", artık hiçbir şeyle bağlantılı değildirler.

    indeksleme

    İndeksleme açısından son derece önemlidir. pratik uygulama, ancak saf teori açısından isteğe bağlı bir şey. İndekslemenin temel amacı, aramayı (ve buna bağlı olarak, veritabanındaki diğer bazı işlemleri) optimize etmektir (hızlandırmaktır). İndeksleme her durumda ek kaynaklar gerektirir (üzerinde fiziksel seviyeçoğu zaman özel dizin dosyaları oluşturulur). İndeksleme, veri değişikliği ile ilgili işlemleri bile yavaşlatabilir, bu nedenle genellikle nadiren değiştirilen ve sıklıkla aranan tablolar indekslenir.

    Bir dizin dosyası, bir kitap dizinine çok benzer. Her indeks değeri için, aşağıdakileri içeren bir tablo satırları listesi saklanır: verilen değer. Buna göre, arama yapmak için tüm tabloya bakmanız gerekmez - sadece dizine bakın. Ancak, kayıtlar değiştirilirse, dizinin yeniden oluşturulması gerekebilir. Ve fazladan zaman alır.

    Tabii ki, ilişkisel veritabanları teorisini temel bir bilgisayar bilimi dersi çerçevesinde açıklamak söz konusu değil! Bununla birlikte, bu makale ansiklopedimiz için çok önemlidir, çünkü bu durum derslerde tam olarak sunulamayan materyallerle uğraşıyoruz, ancak öğretmenin bu konuda ustalaşması gerekiyor. Neden?

    Birincisi, çünkü bir dizi kavram sadece temel ders çerçevesinde çalışılmaktadır. Bu, hem verilerin hem de tablo anahtarlarının tablo halinde temsilidir. Ve hepimiz, büyük resmi sunmadan sadece bazı kavramları yetkin ve doğru bir şekilde ifade etmenin çok zor olduğunu biliyoruz.

    İkinci olarak, çocuklarla basit veritabanı sorgulamaları yaparak (ilgili materyal makalede sunulmuştur. "Veri işleme" 2), ilişkisel teori açısından doğru olan tablolarla uğraşmak gerekir. Öğrencilere bu tabloların doğru olduğu anlatılmak istenmez ama “keşke… olsaydı tablo yanlış olurdu” ama kötü örnek kullanılması kabul edilemez.

    Bir profil bilgisayar bilimi dersinde durum temelde farklı olabilir. Uzmanlık sınıflarında en önemli ve son derece verimli çalışma şekli proje çalışmasıdır. Eğitim projeleri çerçevesinde basit veri tabanları geliştirmek mümkündür ve gereklidir ve burada belirtilen teorinin temelleri olmadan kimse yapamaz. Ancak, aşağıdakiler dikkate alınmalıdır:

    Simüle konu alanlarıçok büyük olmamalıdır;

    Öğrencilere çok aşina olmalılar (bu anlamda herkes için oldukça can sıkıcı olan “Okul” projesi en kötü seçim değil!);

    Teorinin temellerini dinledikten sonra öğrencilerin kendilerinin bir şeyler tasarlayabileceklerini beklemek saflık olur. Her adım, eylemlerinin nedenlerini ayrıntılı olarak belirterek onlarla birlikte atılmalıdır.