• İlişkisel veritabanları. Birincil Anahtarlar

    • Tercüme

    Yeni başlayanlar için bir dizi makalenin çevirisinin devamını yayıyorum.
    Şu anda ve sonrasında - esaslar hakkında daha fazla bilgi.
    Başlangıç ​​- .

    4. TABLOLAR VE BİRİNCİL ANAHTARLAR

    Önceki bölümlerden zaten bildiğiniz gibi, veriler depolanır masalar, Içeren çizgiler veya başka bir şekilde kayıtlar. Daha önce derslerle ilgili bilgileri içeren bir tablo örneği vermiştim. Tekrar bir göz atalım.

    Tabloda 6 ders vardır. 6'sının tümü farklıdır, ancak her ders için aynı alanların değerleri tabloda saklanır, yani: tutorial_id (ders kimliği), başlık (başlık) ve kategori (kategori). tutorial_idbirincil anahtar ders masaları. Birincil anahtar, tablodaki her kayıt için benzersiz olan bir değerdir.
    Aşağıdaki müşteri tablosunda, müşteri kimliği birincil anahtardır. İÇİNDE bu durum birincil anahtar ayrıca her kayıt için benzersiz bir değerdir (sayı).

    Günlük yaşamda birincil anahtarlar
    Bir veritabanında, tanımlama için birincil anahtarlar kullanılır. Hayatta, birincil anahtarlar etrafımızdadır. Eşsiz bir numarayla her karşılaştığınızda, bu numara bir veritabanında birincil anahtar işlevi görebilir (böyle kullanılabilir, ancak bu şekilde kullanılması zorunlu değildir. Tüm veritabanları, bir sayı olarak her kayıt için otomatik olarak benzersiz bir değer üretebilir. otomatik olarak artırılır ve her yeni kayıtla birlikte eklenir [Sentetik veya vekil birincil anahtar - yaklaşık çeviri]).

    Birkaç örnek

    • Bir çevrimiçi mağazadan satın alırken aldığınız sipariş numarası, bu mağazanın veri tabanındaki bazı sipariş tablolarının birincil anahtarı olabilir, çünkü. eşsiz bir değerdir.
    • Sosyal güvenlik numarası, bir devlet kurumu veri tabanındaki bazı tablolarda birincil anahtar olabilir, çünkü ayrıca önceki örnekte olduğu gibi benzersizdir.
    • Bir fatura numarası, müşterilere kesilen faturaları saklayan bir veritabanı tablosunda birincil anahtar olarak kullanılabilir.
    • Sayısal müşteri numarası genellikle müşteri tablosunda birincil anahtar olarak kullanılır.

    Bu örneklerin ortak noktası nedir? Hepsinde birincil anahtar olarak her kayıt için benzersiz, tekrarlanmayan bir değerin seçilmesi gerçeği. Tekrar. Birincil anahtar olarak seçilen bir veritabanı tablosu alanının değerleri her zaman benzersizdir.

    Birincil anahtarı karakterize eden nedir? Birincil anahtarın özellikleri.
    Birincil anahtar, kayıtları tanımlamak için kullanılır.

    Birincil anahtar için kullanılır Tanılama tablodaki girişler, böylece her giriş benzersizdir. Başka bir benzetme... Servisi aradığınızda teknik Destek, operatör genellikle sistemde tanımlanabileceğiniz bir numara (sözleşme, telefon vb.) vermenizi ister.
    Numaranızı unuttuysanız, Yardım Masası operatörü sizi benzersiz şekilde tanımlayacak başka bilgiler isteyecektir. Örneğin, doğum gününüz ve soyadınızın birleşimi. Ayrıca birincil anahtar veya daha doğrusu kombinasyonları olabilirler.

    Birincil anahtar benzersizdir.

    Birincil anahtarın her zaman benzersiz bir değeri vardır. Değerinin benzersiz olmadığını hayal edin. Daha sonra tablodaki verileri tanımlamak için kullanılamaz. Bu, birincil anahtarın herhangi bir değerinin, birincil anahtar olarak seçilen sütunda yalnızca bir kez bulunabileceği anlamına gelir. RDBMS'ler, birincil anahtar alanına kopyalar eklemenizi engellemek için tasarlanmıştır, bir hata alırsınız.
    Bir örnek daha. First_name ve last_name alanlarını içeren bir tablonuz olduğunu ve iki kayıt olduğunu düşünün:

    | ilk_ad | soyadı |
    | vasya |yavru |
    | vasya |yavru |

    Onlar. iki Vasya var. Tablodan belirli bir Vasya seçmek istiyorsunuz. Nasıl yapılır? Kayıtlar farklı değil. Birincil anahtarın kullanışlı olduğu yer burasıdır. Bir id sütunu (sentetik birincil anahtarın klasik versiyonu) ekliyoruz ve ...

    kimlik | ilk_ad | soyadı |
    1 | vasya |yavru |
    2 | vasya |yavru |

    Artık her Vasya benzersizdir.

    Birincil anahtar türleri.

    Genellikle birincil anahtar sayısal bir değerdir. Ancak başka herhangi bir veri türü de olabilir. Bir diziyi birincil anahtar olarak kullanmak yaygın bir uygulama değildir (bir dizi bir metin parçasıdır), ancak teorik ve pratik olarak bu mümkündür.
    Bileşik birincil anahtarlar.
    Genellikle birincil anahtar bir alandan oluşur, ancak birkaç sütunun bir kombinasyonu da olabilir, örneğin iki (üç, dört ...). Ancak, birincil anahtarın her zaman benzersiz olduğunu hatırlarsınız; bu, n'inci sayıdaki alanların kombinasyonunun, bu durumda 2'nin benzersiz olması gerektiği anlamına gelir. Size bundan daha sonra bahsedeceğim.

    Otomatik numaralandırma.

    Birincil anahtar alanı, her zaman olmamakla birlikte genellikle veritabanının kendisi tarafından işlenir. Nispeten konuşursak, veritabanına, oluşturulduğunda her kayda otomatik olarak benzersiz bir sayısal değer atamasını söyleyebilirsiniz. Veritabanı tipik olarak numaralandırmaya 1'den başlar ve bu sayıyı her giriş için bir artırır. Böyle bir birincil anahtar, otomatik artan veya otomatik numaralandırılmış olarak adlandırılır. Otomatik Artış Tuşlarını Kullanma − iyi bir yol benzersiz birincil anahtarlar ayarlamak için. Böyle bir anahtarın klasik adı, vekil birincil anahtardır [Yukarıda bahsedildiği gibi. - yakl. çev.]. Bu anahtar içermiyor kullanışlı bilgi, varlık (nesne) ile ilgili, hakkında bilgi tabloda saklanan, bu yüzden buna vekil denir.

    5. YABANCI ANAHTARLARLA TABLOLARI BAĞLAMA

    Veritabanları geliştirmeye başladığımda, genellikle birbiriyle ilişkili görünen bilgileri tek bir tabloda depolamaya çalışırdım. Örneğin, sipariş bilgilerini bir müşteri tablosunda saklayabilirim. Sonuçta siparişler müşteriye ait değil mi? HAYIR. Müşteriler ve siparişler veri tabanında ayrı varlıklardır. Her ikisinin de kendi masasına ihtiyacı var. Ve bu iki tablodaki kayıtlar, aralarında bir ilişki kurmak için birbirine bağlanabilir. Veritabanı tasarımı iki sorunun çözümüdür:
    • içinde depolamak istediğiniz varlıkları tanımlama
    • Bu varlıklar arasındaki ilişkiler nelerdir?
    Birden çoğa.
    Müşteriler ve siparişler birbirine bağlıdır (bir ilişki içindedirler) birden çoğaÇünkü bir müşteri olabilir birçok siparişler, ancak her belirli sipariş (onların bir demet) sadece çerçeveli bir müşteri, yani sadece bir müşteri olabilir. Endişelenme, eğer şu an bu bağlantının anlaşılması belirsizdir. Daha sonraki bölümlerde bağlantılar hakkında daha fazla konuşacağım.

    Şimdi bir şey önemli - bire çok ilişki için, iki ayrı tablolar. Biri müşteriler için, diğeri siparişler için. Bu iki tabloyu oluşturarak biraz pratik yapalım.

    Hangi bilgileri saklayacağız? İlk soruyu çözelim.
    Başlangıç ​​​​olarak, hangi bilgilerin hakkında olduğunu belirleyeceğiz. emirler ve hakkında müşteriler Tutacağız. Bunu yapmak için kendimize şu soruyu sormalıyız: "Hangi bilgiler müşterilerle, hangi bilgiler siparişlerle ilgilidir?"

    Bir müşteri tablosu tasarlıyoruz.

    Emirler gerçekten müşterilere aittir, ancak bir sipariş değildir minimum bilgi bloğu, müşterileri ifade eder (yani bu blok daha küçük bloklara bölünebilir: örneğin sipariş tarihi, sipariş teslimat adresi vb.).
    Aşağıdaki alanlar, müşteriler için geçerli olan minimum bilgi parçalarıdır:

    • customer_id (birincil anahtar) – müşteri kimliği
    • ad_ad - ad
    • soyadı_soyadı - ikinci ad
    • adres - adres
    • posta kodu- posta kodu
    • ülke - ülke
    • doğum_tarihi - doğum tarihi
    • kullanıcı adı - kullanıcı kayıt adı (giriş)
    • şifre - şifre

    Bu tabloyu SQLyog'da gerçekten oluşturmaya geçelim (tabii ki başka herhangi bir programı kullanabilirsiniz). Aşağıda, SQLyog'da bir tablo oluşturulduktan sonra nasıl görünebileceğine dair bir örnek verilmiştir. Tüm grafik uygulamaları veritabanı yönetimi için yaklaşık olarak aynı arayüz yapısına sahiptir. ile bir tablo da oluşturabilirsiniz. Komut satırı bir grafik yardımcı programı kullanmadan.


    SQLyog'da tablo oluşturma. Customer_id alanı için birincil anahtar (PK) onay kutusunun seçili olduğuna dikkat edin. Customer_id alanı birincil anahtardır. Otomatik Artış onay kutusu da seçilidir; bu, veritabanının otomatik olarak sıfırdan başlayarak her seferinde bir artacak olan benzersiz bir sayısal değeri değiştireceği anlamına gelir.

    Sipariş tablosunu tasarlıyoruz.
    Bir siparişle ilgili olarak ihtiyacımız olan minimum bilgi parçaları nelerdir?

    • order_id (birincil anahtar) – sipariş tanımlayıcı
    • order_date - siparişin tarihi ve saati
    • müşteri - siparişi veren müşteri

    Aşağıda SQLyog'da örnek bir tablo bulunmaktadır.

    Bu iki tablo ( müşteriler Ve emirler) ilişkilidir çünkü alan müşteri sipariş tablosunda birincil anahtarı ifade eder ( Müşteri Kimliği) müşteri tabloları. Böyle bir bağlantı denir yabancı anahtar ilişkisi. Bir yabancı anahtarı, başka bir tablonun birincil anahtarının basit bir kopyası (değer kopyası) olarak düşünmelisiniz. Bizim durumumuzda, alan değeri Müşteri Kimliği masadan müşteriler tabloya kopyalandı emirler her kaydı eklerken. Böylece, her sipariş bir müşteriye bağlıdır. Ve yukarıda belirtildiği gibi, her müşterinin çok sayıda siparişi olabilir.

    Bir yabancı anahtar ilişkisi oluşturun.

    "Siparişler tablosundaki müşteri alanına, müşteri tablosundaki customer_id alanı tarafından referans verildiğinden nasıl emin olabilirim veya nasıl görebilirim?" diye merak ediyor olabilirsiniz. Cevap basit - bunu yapamazsınız çünkü size nasıl bağlantı kurulacağını henüz göstermedim.
    Tablolar arasındaki ilişkiyi oluşturmak için kullandığım pencerenin bulunduğu SQLyog penceresi aşağıdadır.


    Siparişler ve müşteriler tabloları arasında bir yabancı anahtar ilişkisi oluşturun.

    Yukarıdaki pencerede soldaki siparişler tablosunun müşteri alanının sağdaki müşteri tablosunun birincil anahtarına (customer_id) nasıl bağlandığını görebilirsiniz.

    Şimdi tablolarda olabilecek verilere baktığınızda iki tablonun birbiriyle ilişkili olduğunu göreceksiniz.


    Siparişler, müşteri tablosuna atıfta bulunan müşteri alanı aracılığıyla müşterilerle ilişkilendirilir.

    Resimde gördüğünüz gibi müşteri Maryüç sipariş verdi, müşteri pablo birini ve müşteriyi yerleştirdi John- hiç kimse.
    Şunu sorabilirsiniz: "Bir Ne Bütün bu insanların emrettiği bu muydu?” Bu iyi soru. Sipariş tablosunda sipariş edilen ürünleri görmeyi beklemiş olabilirsiniz. Ama bu Kötü örnek tasarım. Birden fazla ürünü tek bir girişe nasıl sığdırırsınız? Mal ayrı bir tabloda saklanması gereken ayrı varlıklardır. Ve tablolar arasındaki ilişki emirler Ve mal bire çok ilişki olacaktır. Bunun hakkında daha fazla konuşacağım.

    6. BİR VARLIK BAĞLANTI ŞEMASI OLUŞTURMA

    Daha önce, ilişkisel veritabanlarında farklı tablolardaki kayıtların birbiriyle nasıl ilişkili olduğunu öğrendiniz. Tabloları oluşturmadan ve bağlamadan önce şunları düşünmeniz önemlidir: varlıklar sisteminizde var olan (kendisi için bir veritabanı oluşturduğunuz) ve bu varlıkların nasıl olacağına karar verin. temasa geçildi birlikte. Veritabanı tasarımında, varlıklar ve ilişkileri genellikle varlık-ilişki diyagramı (ERD). Bu çizelge veritabanı tasarım sürecinin sonucudur.
    Esanslar.
    Bir varlığın tam olarak ne olduğunu merak edebilirsiniz. Şey... bu sistemdeki bir "şey". Orada. Annem her zaman öğretmen olmamı isterdi çünkü bir şeyleri açıklamakta çok iyiyim.

    bağlamda veri tabanı tasarımıöz öyle bir şeydir ki hak ediyor veritabanı modelinizde kendi tablonuz. Bir veritabanı tasarladığınızda, bunları tanımlamanız gerekir. varlıklar veritabanını oluşturduğunuz sistemde. Sisteminizin hangi verilerle çalışacağını bulmak için daha çok müşteriyle veya kendinizle diyalog meselesidir.

    Örnek olarak bir çevrimiçi mağazayı ele alalım. Çevrimiçi mağaza satıyor mal. Ürünçevrimiçi mağaza sisteminde bariz bir varlık haline gelebilir. Mal siparişmüşteriler. İşte sizinle birlikteyiz ve iki bariz varlık daha gördük: emirler Ve müşteriler.

    Sipariş müşteri tarafından ödeniyor… bu ilginç. Online mağazamızın veritabanında ödemeler için ayrı bir tablo mu oluşturacağız? Belki. Ancak ödemeler, siparişler için geçerli olan minimum bilgi parçası mı? Bu da mümkündür.

    Emin değilseniz, ne tür ödeme bilgilerini saklamak istediğinizi düşünün. tutmak isteyebilirsin ödeme yöntemi veya ödeme tarihi. Ancak bunlar, yine de ilgili olabilecek asgari bilgi parçalarıdır. emir. İfadeyi değiştirebilirsiniz. Ödeme yöntemi - sipariş ödeme yöntemi. Ödeme tarihi - siparişin ödeme tarihi. Bu nedenle, yapmaya gerek görmüyorum ödemeler kavramsal olarak ödemeleri bir varlık olarak ayırabilseniz de, çünkü ödemeleri bir bilgi kabı (ödeme yöntemi, ödeme tarihi) olarak düşünebilirsiniz.

    Fazla akademik olmayalım.

    Gördüğünüz gibi, bir varlık ile veritabanının kendisindeki bir tablo arasında bir fark vardır, yani. aynı şey değil. Endüstri Uzmanları Bilişim Teknolojileri bu konuda ÇOK akademik ve bilgiç olabilir. Ben o tür bir uzman değilim. Bu fark, sizin verilerinize, bilgilerinize bakış açınıza bağlıdır. Veri modelleme açısından bakarsanız yazılım, o zaman doğrudan veritabanına aktarılamayan birçok varlıkla karşılaşabilirsiniz. Bu öğreticide, verilere kesinlikle bir veritabanı perspektifinden bakıyoruz ve küçük dünyamızda varlık tablodur.


    Dayanın, veritabanlarında doktora derecenizi kazanmaya gerçekten çok yakınsınız.

    Gördüğünüz gibi, sisteminizin hangi varlıklara sahip olduğunu belirlemek, biraz deneyim gerektiren ve genellikle değişime, revizyona, düşünmeye tabi olan biraz entelektüel bir süreçtir, ancak elbette roket bilimi değildir.


    Karmaşık bir uygulama üzerinde çalışıyorsanız, bir varlık-ilişki diyagramı oldukça büyük olabilir. Bazı grafikler yüzlerce hatta binlerce tablo içerebilir.

    bağlantılar.
    Veritabanı tasarımındaki ikinci adım, sisteminizdeki varlıklar arasında hangi ilişkilerin var olduğunu seçmektir. Şimdi anlamak biraz zor olabilir ama yine söylüyorum, bu roket bilimi değil. Biraz deneyim ve yapılan işi yeniden düşünerek, bir sonraki veritabanı modelini doğru veya neredeyse doğru şekilde tamamlayacaksınız.

    Bu yüzden. sana bağlantıdan bahsetmiştim birden çoğa ve bu kılavuzun sonraki bölümlerinde size bağlantılar hakkında daha fazla bilgi vereceğim, bu yüzden şimdilik bunun üzerinde fazla durmayacağım. Varlıklarınızın hangi ilişkilere sahip olacağına karar vermenin önemli bir kısım olduğunu unutmayın. veri tabanı tasarımı ve bu bağlantılar şemada gösterilir varlık-ilişki.

    Üç ana varlık sınıfı tanımlanmıştır:

    1) kamış bağımsız bir varlıktır. İsimler bir dikdörtgen içine yerleştirilmiştir.

    2) çağrışımsalİki veya daha fazla varlık arasındaki çoktan çoğa ilişki. Dernekler tam bir varlık olarak ele alınır. Diğer derneklere katılabilir ve bir takım niteliklere sahip olabilirler.

    A. Tanımlamalar (bir varlığı ifade eden), iki varlık arasındaki çoktan bire veya bire bir ilişkilerdir. Gösteren varlığa bağlı olmaması bakımından karakteristikten farklıdır.

    3) Karakteristik(karakteristik) - iki varlık arasında çoktan bire veya bire bir ilişki. Derneğin özel bir durumudur. Bir özelliğin tek amacı, başka bir varlığı açıklamak veya açıklığa kavuşturmaktır. Bir özelliğin varlığı tamamen karakterize edilen varlığa bağlıdır.

    Bir anahtar veya potansiyel bir anahtar, bir varlığın gerekli örneğini benzersiz bir şekilde bulabileceğiniz değerlere göre yalnızca bir dizi özelliktir.

    Minimallik, sözcüksel olarak, herhangi bir öznitelik kümesinden, varlığın geri kalanlarla tanımlanmasına izin vermediği anlamına gelir.

    Anahtarlardan biri birincil anahtar olarak alınır ve geri kalanı alternatif olarak adlandırılır. Potansiyel olarak, bir özellikten oluşan bir anahtara basit denir. Çekirdek varlığın birincil anahtarının tanımsız bir değer almasına izin verilmez, aksi takdirde çelişkili bir durum ortaya çıkar - kimliksizlik ve dolayısıyla çekirdek varlığın var olmayan bir örneği ortaya çıkar. Aynı nedenlerle, birincil anahtarın benzersizliğini sağlamak gerekir.

    C varlığı, A ve B varlıklarını birbirine bağlıyorsa, A ve B varlıklarının birincil anahtarlarına karşılık gelen yabancı anahtarları içermelidir.

    Her yabancı anahtar için üç sorunun ele alınması gerekir:

    1) Ek bir yabancı anahtar tanımsız değerler (boş değerler) alabilir mi, kısacası, yabancı anahtar tarafından belirtilen hedef varlığın bilindiği bazı varlık örnekleri olabilir mi?

    2) Yabancı anahtarın başvurduğu hedef varlığı silmeye çalıştığınızda ne olması gerekir.

    Üç olası çözüm var bu konu:

    Basamaklı

    Kısıtlama

    Belirli bir değere ayarlama

    3) Bir yabancı anahtar tarafından başvurulan bir hedef varlığın birincil anahtarını güncellemeye çalışırken ne olmalıdır?

    Bu nedenle, bir veri tabanı tasarımında her bir yabancı anahtar için, sadece bu yabancı anahtarı oluşturan alan veya alan kombinasyonlarının değil, yukarıdaki soruların cevaplarının da özelleştirilmesi gerekmektedir.

    Veri türleri ve etki alanları.

    İlişkisel veri modeli, basit bir veri yapısı ve kullanıcı dostu sunum ile karakterize edilir.

    İlişkisel model, verileri iki boyutlu tablolar biçiminde düzenlemek için tasarlanmıştır. ilişkisel tablo iki boyutlu dizi ve aşağıdaki özelliklere sahiptir:

    1) Tablonun her elemanı bir veri elemanıdır.

    2) Bir tablodaki tüm sütunlar homojendir - bir sütundaki tüm öğeler aynı veri türüne ve uzunluğa sahiptir

    3) Her sütunun benzersiz bir adı vardır

    4) Tabloda aynı satır yok

    5) Sütun sırasının sırası keyfi olabilir

    Veri tipleri

    Programlamada kullanılan herhangi bir verinin kendi veri türleri vardır. İlişkisel model, kullanılan veri türlerinin basit olmasını gerektirir.

    Genel olarak, veri türleri üç gruba ayrılır:

    1) Basit veri türleri

    2) Yapılandırılmış veri türleri

    3) referans veri türleri

    Basit (atomik) veri türlerinin dahili bir yapısı yoktur. Bu tür verilere skaler denir. Bunlar, mantıksal, sayısal, dize veri türlerini içerir. Atomiklik kavramı oldukça görecelidir. Bu nedenle, dize veri türü, tek boyutlu bir karakter dizisi olarak düşünülebilir ve tamsayı türü veri bit kümesi olarak. Buradaki tek önemli şey, böyle bir geçiş yaparken düşük seviye anlambilim, yani verilerin anlamı kaybolur.

    Veri türlerinin yapılandırılması, bir iç yapıya (diziler, kayıtlar, yapılar) sahip olabilen kurucu öğelerden oluşturulan karmaşık veri yapılarını tanımlamayı amaçlar.

    Referans veri türü, diğer verilere işaret etme yeteneği sağlamayı amaçlamaktadır. Bu veri türü, veri depolamak için bellek alanlarına sahip prosedürel tip diller için tasarlanmıştır.

    İçin ilişkisel model kullanılan veri türü çok önemli değildir. Veri türünün basit olması gerekliliği şu anlama gelmelidir: ilişkisel işlemler dahili veri yapısı dikkate alınmamalıdır.

    alan adı porno.ru

    İlişkisel veri modelinde, veri türü kavramı, veri türünün rafine edilmiş hali olarak düşünülebilecek alan kavramı ile yakından ilişkilidir.

    İhtisas - anlamsal kavram. Bazı veri türlerinin değerlerinin bir alt kümesi olarak düşünülebilir.

    Etki alanı özellikleri:

    1) etki alanı veritabanında benzersiz bir ada sahip

    2) etki alanı bazı basit veri türlerinde veya başka bir etki alanında tanımlanır

    3) bir alan, belirli bir alan için geçerli olan bir veri alt kümesini tanımlamaya izin veren bazı mantıksal koşullara sahip olabilir.

    4) etki alanı bazı anlamsal yük taşır

    Örneğin, "çalışanın yaşı" anlamına gelen bazı D alanı, doğal sayılar kümesinin bazı alt kümeleri olarak tanımlanabilir.

    D=(nϵN: n ≥ 18 ve n ≤ 60)

    Bir altküme kavramının etki alanı arasındaki fark tam olarak, etki alanının belirli bir alt kümenin anlambilimini yansıtmasında yatmaktadır. konu alanı. Bir alt küme olarak eşleşen ancak farklı anlamlar taşıyan birkaç alan olabilir. Örneğin, "kısmi ağırlık" ve "mevcut miktar" alanları, negatif olmayan tamsayılar kümesi olarak eşit şekilde tanımlanabilir, ancak bu alanların anlamı farklı olacaktır ve bunlar farklı alanlar olacaktır. Bir alanın ana anlamı, alanların karşılaştırmaları kısıtlamasıdır. Aynı türde olsalar bile farklı alanların değerlerini karşılaştırmak mantıksal olarak doğru değildir. Parça ağırlığı mevcut miktardan büyük olan tüm parçaların bir listesini döndürmek sözdizimsel olarak doğrudur, miktar ve ağırlık kavramlarının anlamına karşılık gelmez.

    5. İlişkiler ve özellikleri, nitelikleri ve demetleri.
    İlişki kavramı, ilişkisel veri modelinin temel bir kavramıdır. İlişki özelliği:<Имя_атрибута: Имя_домена>. Öznitelik adları bir ilişki içinde benzersiz olmalıdır. Genellikle öznitelik adları, karşılık gelen alan adlarıyla aynıdır. D 1 ,D 2 ,…Dn etki alanları kümesinde tanımlanan bazı R ilişkileri iki kısım içerir: bir başlık ve bir gövde. İlişki başlığı, sabit sayıda ilişki özniteliği içerir.

    (,,…)

    Bir ilişkinin gövdesi, bir dizi ilişki demetini içerir. Her ilişki demeti, formun çiftlerinden oluşan bir kümedir.

    <Имя_атрибута: Значение_атрибута>

    (,,… ).

    Val i değeri, A i D ben özelliğine aittir. değer yazılır:

    R( ,,…).

    Bir ilişkideki niteliklerin sayısı, ilişkinin derecesi veya ariteliği olarak adlandırılır. Bir ilişkinin demetlerinin sayısına o ilişkinin kardinalitesi denir. İlişkinin başlığı, ilişkinin tanımlandığı alanların Kartezyen çarpımını tanımlar. Başlık statiktir. Veritabanı ile çalışırken değişmez. Nitelikler değiştirilir, eklenir veya bir ilişkiden çıkarılırsa, sonuç farklı bir ilişkidir. İlişkinin gövdesi, bir vagonlar kümesidir, yani, alanların Kartezyen çarpımının bir alt kümesidir ve kelimenin matematiksel anlamında bir ilişkidir. Bir ilişkinin gövdesi, veritabanıyla çalışırken değişebilir, yani demetler değişebilir, eklenebilir vb.

    İlişkisel bir veritabanı, bir dizi ilişkidir. İlişkisel bir veritabanı şeması, bir veritabanına dahil edilen bir dizi ilişki başlığıdır.

    Herhangi bir ilişki bir tablo olarak temsil edilebilse de, ilişki bir tablo değildir. Bunlar birbirine yakın fakat karşılık gelmeyen kavramlardır. İlişkisel veri modelinin üzerinde çalıştığı terimler, karşılık gelen "tablo" eş anlamlılarına sahiptir.

    İlişki Özellikleri

    İlişki özellikleri, ilişkiler arasındaki temel farklardır.

    1) Aynı olmayan kartlarla ilgili olarak.

    Bir ilişkinin gövdesi bir vagonlar takımıdır ve herhangi bir takım gibi ayırt edilemez unsurlar içeremez. Tablolar, ilişkilerden farklı olarak aynı satırları içerebilir.

    2) İlişki gövdesi bir küme olduğu için kartuşlar (yukarıdan aşağıya) sıralanmamıştır.

    Aynı ilişki tasvir edilemez farklı tablolar, satırların nereye gittiği farklı düzen

    3) Nitelikler soldan sağa sıralanmaz. Bir ilişki içinde her özniteliğin benzersiz bir adı olduğundan, özniteliklerin sırası önemli değildir. Aynı ilişki, sütunların farklı sırada olduğu farklı tablolarla temsil edilebilir.

    4) Tüm özellik değerleri atomiktir.

    İlişki özelliklerinden, her tablonun ilişkileri tanımlayamayacağı sonucu çıkar. Bunun için basit bir yapıya sahip olması, aynı satırları içermemesi, sütunlarından herhangi birinin yalnızca bir tür veri içermesi ve kullanılan tüm veri türlerinin basit olması gerekir.

    Mantıksal tasarım sorunu ilişkisel temel veri madenciliği, veri tabanının hangi ilişkilerden oluşması gerektiği ve bu ilişkilerin hangi niteliklere sahip olması gerektiği konusunda bilinçli bir karar vermeyi içerir.

    İlişkisel veri modeli, herhangi bir ilişkisel DBMS'de desteklenmesi gereken iki temel bütünlük gereksinimini düzeltir.

    1) Herhangi bir ilişkinin herhangi bir demetinin bu ilişkinin diğer herhangi bir demetinden ayırt edilebilir olması, yani herhangi bir ilişkinin bir birincil anahtar içermesi gereken varlık bütünlüğü gereksinimi.

    2) Başvuru bütünlüğü gereksinimi (yabancı anahtar bütünlüğü gereksinimi), başvurulan ilişkideki her bir yabancı anahtar değeri için . Aynı birincil anahtar değerine sahip bir demet olmalı veya yabancı anahtar değeri boş olmalıdır.

    Birincil anahtar, bir tablodaki her kayıt için benzersiz bir özelliktir. Access iki tür birincil anahtarı destekler: basit ve bileşik.

    Döküm basit anahtar Bu alanda boş ve yinelenen değerler yoksa, tablonun halihazırda var olan alanlarından biri hareket edebilir. Bu tür alanlara örnek olarak makine numaraları, envanter numaraları, tanımlama kodları verilebilir. Bileşik anahtar, iki veya daha fazla veri öğesinin birleşimi olarak oluşturulur. Örneğin, Çalışanlar tablosu için, birincil anahtar olarak Soyadı ve Adı olmak üzere iki alanın birleşimini kullanmak teorik olarak mümkündür. Ancak, zaten çalışan biriyle aynı adı ve soyadı taşıyan başka bir çalışanın şirkette görünmesi oldukça olasıdır.

    Birincil anahtar olduğunu iddia eden alana (alanlara) oldukça katı gereksinimlerin dayatıldığı açıktır. Bu nedenle, bir anahtarın (örneğin, Müşteri Kodu, Sipariş Kodu) işlevlerini yerine getiren tanımlayıcı bir alanın özel bir alanını oluşturmak yaygın bir uygulamadır. Her birinin eklenmesiyle Yeni giriş tabloda bu alan, kaydı benzersiz şekilde tanımlayan özel bir değerle (genellikle sayısal) doldurulur. İÇİNDE Erişim uygulaması Her yeni kayda bir sayı atayan ve 1'lik (veya rastgele) bir sayı dizisi oluşturan Sayaç veri türü sayesinde bu tür numaralandırmayı düzenleyebilirsiniz.

    Access'te anahtarlar için kabul edilen temel kurallar vardır:

      Kolaylık sağlamak için, anahtar alan genellikle tablo yapısında ilk sırada listelenir;

      Bir tablonun tanımlanmış bir birincil anahtarı varsa, Access o alana yinelenen değerlerin veya Null (boş) değerlerin girilmesini otomatik olarak engeller;

      Access, tablo kayıtlarını otomatik olarak birincil anahtara göre sıralar;

      Birincil anahtar alan, kayıtları sıralamayı ve aramayı hızlandıran bir dizindir.

    Bir tabloyu birincil anahtar olarak ayarlamak ve onu Tasarım görünümünde oluşturmayı tamamlamak için şu adımları izleyin:

      Tasarım modunda, birincil anahtarın rolünü oynayacak alanı seçin;

      Tablo Oluşturucu araç çubuğundaki Anahtar alan düğmesine tıklayın veya ana menüden Düzenle - Anahtar alan komutunu seçin (seçilen alanın adının yanında bir anahtar simgesi görünecektir);

      Anahtar alanını belirledikten sonra, Tablo Tasarımcısı araç çubuğundaki Kaydet düğmesine tıklamanız ve açılan pencereye tablonun adını girmeniz ve Tamam düğmesini tıklamanız gereken tablo kaydedilmelidir.

    Birincil anahtar tanımlanmamışsa tasarım modundan çıktığınızda bir uyarı görüntülenir ve Access tabloyu kapatmadan önce bir anahtar alanı oluşturmanızı ister.

    17. Bağlantı türleri ve bunların uygulanması. Referans bütünlüğü ve uygulanması.

    İlişkisel bir veritabanında, ilişkiler veri fazlalığını önler. Örneğin, kitaplar hakkında bilgi içeren bir veritabanı oluşturduğunuzda, her kitabın başlığı, yayın tarihi ve yayıncısı gibi ayrıntılarını saklayan "Kitaplar" adlı bir tablo elde edebilirsiniz. Ek olarak, yayıncı hakkında saklamak isteyebileceğiniz telefon numarası, adresi ve posta kodu gibi ek bilgiler de vardır. Bunları kitapların olduğu bir tabloda saklarsanız, yayıncının telefon numarası, yayınladığı her kitap için tekrarlanacaktır.

    Daha doğru bir seçenek, yayıncılar hakkındaki bilgileri ayrı bir "Yayıncılar" tablosuna koymaktır. Bu durumda, "Kitaplar" tablosu, "Yayıncılar" tablosunun kayıtlarına bağlantılar içerecektir.

    Eşitlemeyi sürdürmek için Kitaplar ve Yayıncılar tabloları arasında veri bütünlüğü sağlanmalıdır. Veri bütünlüğü ilişkileri, bir tablodaki verilerin diğerindeki verilerle eşleşmesini sağlar. Örneğin, Kitaplar tablosundaki her kitap, Yayıncılar tablosundaki belirli bir yayıncıyla ilişkilendirilir. Veritabanında olmayan bir yayıncı için tabloya kitap ekleyemezsiniz.

    Tablolar arasındaki ilişki türleri

    İletişim, anahtar sütunlardaki verileri eşleştirerek yapılır; genellikle bunlar her iki tabloda da aynı ada sahip sütunlardır. Çoğu durumda, her satır için benzersiz bir tanımlayıcı içeren bir tablonun birincil anahtarı, başka bir tablonun yabancı anahtarıyla eşlenir. Örneğin, satılık kitapların her biri, Kitaplar tablosunda bir PublishingID sütunu (birincil anahtar) ve Satış tablosunda bir PublishingID sütunu (yabancı anahtar) oluşturarak satış hacmiyle ilişkilendirilebilir.

    Tablolar arasında üç tür ilişki vardır. Oluşturulan ilişkinin türü, ilişkili sütunların nasıl tanımlandığına bağlıdır.

    Bire Çok İlişkiler

    Bire çok ilişki, en yaygın ilişki türüdür. Böyle bir ilişki ile A tablosunun her satırı B tablosunun birçok satırına karşılık gelebilir, ancak B tablosunun her satırı A tablosunun yalnızca bir satırına karşılık gelebilir. Örneğin, tablolar arasında birden çoğa bir ilişki kurulur. "Yayıncılar" ve "Kitaplar": Yayıncıların her biri birçok kitap yayınlayabilir, ancak her kitap yalnızca bir yayıncı tarafından yayınlanır.

    Birden çoğa ilişki, ilişkili sütunlardan yalnızca birinin benzersiz bir kısıtlamaya sahip olması veya birincil anahtar olması durumunda oluşturulur.

    Microsoft Access'te, birden çoğa ilişkinin birincil anahtarın karşılık geldiği tarafı, anahtar simgesiyle gösterilir. İlişkinin yabancı anahtarın karşılık geldiği tarafı sonsuzluk simgesiyle gösterilir.

    Çoktan Çoğa İlişkiler

    Çoktan çoğa bir ilişki kurarken, A tablosunun her satırı, B tablosunun birçok satırına karşılık gelebilir ve bunun tersi de geçerlidir. Böyle bir ilişki, birincil anahtarı A ve B tablolarıyla ilişkili yabancı anahtarlardan oluşan birleştirme adı verilen üçüncü bir tablo kullanılarak oluşturulur. Örneğin, "Yazarlar" ve "Kitaplar" tabloları arasında çoktan çoğa bir ilişki kurulur. ilişkileri kullanarak bu tabloların her biri ile BookAuthors tablosu arasında bire çok ilişki. BookAuthors tablosunun birincil anahtarı AuthorID (Yazarlar tablosunun birincil anahtarı) ve BookID (Başlıklar tablosunun birincil anahtarı) sütunlarının birleşimidir.

    bire bir ilişkiler

    Bire bir ilişki kurarken, A tablosunun her satırı B tablosunun yalnızca bir satırına karşılık gelebilir ve bunun tersi de geçerlidir. Her iki ilgili sütun da birincil anahtar olduğunda veya benzersiz kısıtlamalara sahip olduğunda bire bir ilişki oluşturulur.

    Bu tür bir ilişki nadiren kullanılır çünkü böyle bir durumda ilgili veriler genellikle aynı tabloda saklanabilir. Bire bir ilişkiyi aşağıdaki durumlarda kullanabilirsiniz.

    Çok fazla sütun içeren bir tabloyu bölmek için.

    Güvenlik nedeniyle tablonun bir bölümünü izole etmek.

    Kısa süreli kullanım verilerini saklamak için, onu silmenin en kolay yolu tabloyu temizlemektir.

    Yalnızca ana tablonun bir alt kümesiyle ilgili verileri depolamak için.

    Microsoft Access'te, bire bir ilişkinin birincil anahtarın karşılık geldiği tarafı bir anahtar simgesiyle gösterilir. İlişkinin yabancı anahtarın karşılık geldiği tarafı da anahtar simgesiyle gösterilir.

    Tablolar arasında ilişkiler oluşturma

    Tablolar arasında ilişki kurulurken ilgili alanların aynı isme sahip olması gerekmez. Ancak, birincil anahtar olan alan "Sayaç" türünde olmadığı sürece, aynı veri türüne sahip olmaları gerekir. "Sayaç" türündeki bir alan, yalnızca her birinin FieldSize özelliği (alan boyutu) aynı değere ayarlanmışsa "Numeric" türündeki bir alanla ilişkilendirilebilir. Örneğin, her birinin FieldSize özelliği Long Integer olarak ayarlanmışsa Count ve Numeric türündeki sütunları ilişkilendirebilirsiniz. Her iki ilişkili sütun da Numeric türünde olsa bile, her iki alan için FieldSize özelliğinin değeri aynı olmalıdır.

    Birincil Anahtar, bir veritabanı tablosundaki her satırı/kaydı benzersiz şekilde tanımlayan tablodaki bir alandır. Birincil anahtarlar benzersiz değerler içermelidir. Bir sütunun birincil anahtarı bir değere sahip olamaz.

    Bir tablo, bir veya daha fazla alandan oluşabilen yalnızca bir birincil anahtara sahip olabilir. Birincil anahtar olarak birden çok alan kullanıldığında bunlara bileşik anahtar denir.

    Bir tablonun herhangi bir alan(lar)da tanımlanmış bir birincil anahtarı varsa, o alan(lar)ın aynı değerine sahip iki kaydınız olamaz.

    Not– Veritabanı tabloları oluştururken bu kavramları kullanabilirsiniz.

    Birincil Anahtar Oluşturma

    Müşteriler tablosunda kimlik özniteliğini birincil anahtar olarak tanımlayan sözdizimi buradadır.

    CREATE TABLE CUSTOMERS(ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , MAAŞ ONDALIK (18, 2), BİRİNCİL ANAHTAR (ID));

    MÜŞTERİLER tablosu zaten varken "ID" sütununda bir birincil anahtar kısıtlaması oluşturmak için aşağıdaki SQL sözdizimini kullanın:

    ALTER TABLO MÜŞTERİLERİ BİRİNCİL ANAHTAR (ID) EKLE;

    Not

    Birincil anahtar eklemek için ALTER TABLE deyimini kullanırsanız, birincil anahtar sütun(lar)ı zaten boş olmayan olarak bildirilmiş olmalıdır (eğer tablo önce oluşturulduysa).

    Birden çok sütunda birincil anahtar tanımlamak için aşağıdaki SQL sözdizimini kullanın:

    CREATE TABLE CUSTOMERS(ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , MAAŞ ONDALIK (18, 2), BİRİNCİL ANAHTAR (ID, NAME));

    CUSTOMERS tablosu zaten varken "ID" ve "NAME" sütunlarında birincil anahtar kısıtlaması oluşturmak için aşağıdaki SQL sözdizimini kullanın.

    ALTER TABLE MÜŞTERİLER KISITLAMA EKLE PK_CUSTID BİRİNCİL ANAHTAR(ID, NAME);

    Birincil Anahtarı Kaldırma

    Aşağıda verilen sözdizimini kullanarak bir tablodaki birincil anahtar kısıtlamalarını temizleyebilirsiniz.

    ALTER TABLE MÜŞTERİLERİ BİRİNCİL ANAHTARI DÜŞÜRÜR;

    InterBase aşağıdaki kısıtlama türlerini kullanabilir:
    • BİRİNCİL ANAHTAR - tablonun birincil anahtarı.
    • EŞSİZ - benzersiz tablo anahtarı.
    • YABANCI ANAHTAR- yabancı anahtar, başka bir tabloya bağlantı sağlar ve ana ile tablo arasında referans bütünlüğünü garanti eder. çocuk masaları.

    terminoloji üzerine bir not

    Sizi ilgilendiren bir sorunun yanıtlarını karmaşık bir şekilde, farklı yazarların farklı eserlerinde aramayı sevdiğiniz için bu kursun yazarı gibiyseniz, o zaman tanımlardaki bazı karışıklıkları fark etmekten kendinizi alamazsınız. ana (usta) -> tabi (detay) tablolar. Ana tabloya genellikle üst tablo ve alt tabloya da alt tablo olarak atıfta bulunulduğunu hatırlayın.

    Bunun nedeni muhtemelen bu tanımların yerel ve SQL sunucusu DBMS'de nasıl yorumlandığıdır.

    Yerel DBMS'de, ana tablo ana verileri içeren tablodur ve alt tablo ek tablodur. Örneğin, üç ilgili tablolar. İlki satış verilerini, ikincisi ürün verilerini ve üçüncüsü müşteri verilerini içerir:


    Pirinç. 18.1.

    Burada ana bilgiler satış tablosunda saklanır, bu nedenle ana (ana) bilgidir. Ek Bilgiler mallar ve alıcılar tablolarında saklanır, yani çocukturlar. Bu anlaşılabilir bir durumdur: Bir kızın iki biyolojik annesi olamaz, ancak bir anne iki kızı doğurabilir.

    Ancak SQL veritabanı sunucularının farklı bir ilişki tanımı vardır: bir tablodaki bir alan başka bir tablodaki bir alana atıfta bulunduğunda, buna denir. yabancı anahtar. Ve atıfta bulunduğu alana denir ebeveyn veya birincil anahtar. Bir yabancı anahtara (başka bir tablodaki bir kayda bağlantı) sahip bir tabloya genellikle alt tablo denir ve ana anahtar- ebeveyn. İlişkilerin tanımında bile, bir ebeveynin, birkaç kayıt tarafından başvurulabilecek yalnızca bir benzersiz kaydı olabileceğini söylüyorlar. çocuk masası.

    Dolayısıyla, yukarıdaki örnekte, satış tablosunda iki yabancı anahtar vardır: ürün kimliği ve müşteri kimliği. Ve şeklin sağ tarafındaki her iki tablo da ana anahtar"Tanımlayıcı". Bir müşteri veya ürün, satış tablosunda birden fazla görünebileceğinden, şeklin sağ tarafındaki her iki tablonun da ebeveyn, soldaki tablonun da bir çocuk olduğu ortaya çıkar. şu an ders çalıştığımıza göre InterBase-SQL veritabanı sunucusu, sonraki derslerde bu tanımlar bize rehberlik edecek. Bu kafa karışıklığı üzerinde daha fazla kafa yormamak için hemen aynı fikirde olacağız: çocuk masası başka bir tablo için bir yabancı anahtara (YABANCI ANAHTAR) sahiptir.

    BİRİNCİL ANAHTAR

    BİRİNCİL ANAHTAR- birincil anahtar, veritabanındaki ana kısıtlama türlerinden biridir. Birincil anahtar, bir tablodaki bir kaydı benzersiz bir şekilde tanımlamayı amaçlar ve benzersiz olmalıdır. Birincil anahtarlar PRIMARY KEY, parent (Parent) olarak adlandırılan tablolarda bulunur. Birincil anahtarı yerel veritabanlarının birincil dizinleriyle karıştırmayın, birincil anahtar bir dizin değil, bir kısıtlamadır. Birincil anahtar oluştururken Ara Taban onun için otomatik olarak oluşturur benzersiz dizin . Ancak, oluşturursak benzersiz dizin, bu yaratmayacak birincil anahtar kısıtlamaları. Bir tabloda yalnızca bir PRIMARY KEY olabilir.

    Çalışan listesini içeren bir tablomuz olduğunu varsayalım. Soyadı alanı şunları içerebilir: aynı değerler(adaş), dolayısıyla birincil anahtar olarak kullanılamaz. Nadiren, ancak ek olarak aynı ada sahip adaşlar da vardır. Daha da nadirdir, ancak tam adlar vardır, bu nedenle "Soyadı" + "Ad" + "Patronimik" üç alanın tümü bile kaydın benzersizliğini garanti edemez ve birincil anahtar olamaz. Bu durumda, çıkış yolu, daha önce olduğu gibi, içeren bir alan - tanımlayıcı eklemektir. seri numarası bu kişi. Bu tür alanlar genellikle otomatik artışla yapılır (otomatik artış alanlarının organizasyonu hakkında sonraki derslerde konuşacağız). Bu yüzden,

    birincil anahtar - bu, tablodaki her kayıt için benzersiz olan bir veya daha fazla alandır.

    Birincil anahtarın tek bir sütunu varsa (çoğu durumda olduğu gibi), PRIMARY KEY belirticisi şu durumlarda kullanılır: sütun tanımı:

    TABLO OLUŞTUR Prim_1(Stolbec1 INT BOŞ DEĞİL BİRİNCİL ANAHTAR, Stolbec2 VARCHAR(50))

    Birincil anahtar birkaç sütun üzerine kuruluysa belirtici, tüm alanlar tanımlandıktan sonra yerleştirilir:

    TABLO OLUŞTUR Prim_2(Stolbec1 INT NULL DEĞİL, Stolbec2 VARCHAR(50) NULL DEĞİL, BİRİNCİL ANAHTAR (Stolbec1, Stolbec2))

    Örneklerden de görebileceğiniz gibi, birincil anahtar mutlaka bir NOT NULL sütun(lar) kısıtlamasına sahip olmalıdır.

    EŞSİZ

    EŞSİZ- Benzersiz anahtarı. UNIQUE tanımlayıcısı, bu alanın tüm değerlerinin benzersiz olması gerektiğini ve bu nedenle bu tür alanların da değer içeremeyeceğini belirtir. HÜKÜMSÜZ. Benzersiz bir UNIQUE anahtarının olduğunu söyleyebiliriz. alternatif birincil anahtar, ancak farklılıklar var. Ana fark, yalnızca bir birincil anahtarın olması gerekirken, birkaç benzersiz anahtar olabilir. Ayrıca, PRIMARY KEY kısıtlaması veya başka bir UNIQUE kısıtlaması için kullanılan aynı sütun kümesi üzerine BENZERSİZ kısıtlama oluşturulamaz. Birincil anahtarlar gibi benzersiz anahtarlar, diğer tabloların üst öğesi olan tablolarda bulunur.

    Birincil anahtar gibi BENZERSİZ bir kısıtlamayla bildirilen bir sütun, üst ve üst arasında bilgi tutarlılığını zorlamak için kullanılabilir. çocuk masaları. yabancı anahtar iken çocuk masası o alan(lar)a atıfta bulunacaktır. Birincil anahtar durumunda olduğu gibi, benzersiz bir anahtar oluşturulduğunda, bunun için otomatik olarak bir anahtar oluşturulur. benzersiz dizin. Ama tersi değil. Bir birincil ve iki benzersiz anahtar içeren bir tablo oluşturma örneği:

    TABLO OLUŞTUR Prim_3(Stolbec1 INT NULL BİRİNCİL ANAHTAR DEĞİL, Stolbec2 VARCHAR(50) NOT NULL UNIQUE, Stolbec3 FLOAT NOT NULL UNIQUE)

    YABANCI ANAHTAR

    YABANCI ANAHTAR- harici anahtar . Bu, tablolar arasında bilgi bütünlüğünü sağlamak için çok güçlü bir araçtır ve bu, yalnızca varlığı izlemenize izin vermez. doğru bağlantılar aynı zamanda bunları otomatik olarak yönetin. Yabancı anahtarlar, diğer tabloların çocukları ( Child ) olan tablolarda bulunur. Bilgi tutarlılığı tam olarak birincil veya