Ana içeriğe geç

Veritabanlarında Bire-Çok İlişki: Kapsamlı Rehber

Bire-çok ilişkilerin ne olduğunu, tabloların anahtarlarla nasıl bağlandığını ve neden net, güvenilir ilişkisel veritabanı tasarımı için vazgeçilmez olduklarını anlayın.
· 8 dk. oku

Yapay Zeka ile Keşfedin

Bu eğitimde, bire-çok ilişkinin ne olduğunu, veritabanı tasarımında nasıl uygulanacağını ve veritabanlarınızı ölçeklenebilir ve verimli tutmak için izlenmesi gereken en iyi uygulamaları açıklayacağım.

Veritabanı mühendisi olarak başlıyorsanız, SQL ile İlişkisel Veritabanlarına Giriş ve Veritabanı Tasarımı kurslarımızı almanızı öneririm; böylece veritabanı şemanızı tanımlarken ilişkileri nasıl kuracağınızı öğrenirsiniz.

Bire-Çok İlişki Nedir?

Bire-çok ilişki (1:N), bir tablodaki tek bir kaydın başka bir tablodaki birden çok kayda bağlanabildiği durumu açıklar. Basitçe söylemek gerekirse, bir şey bir kez vardır ama birçok ilgili şeyle bağlantılı olabilir.

Örneğin, tek bir müşteri birçok sipariş verebilir, ancak her sipariş yalnızca bir müşteriye aittir.

Bire-çok ilişkiler genellikle şu terimlerle açıklanır:

  • Üst (parent) tablo: “Bir” kaydını içeren tablo
  • Alt (child) tablo: “Birçok” kaydı içeren tablo

Örneğimizde, müşteri kaydı üst tabloda, siparişler ise alt tabloda yer alır.

Bire-Çok İlişkilerde Kardinaliteyi Anlamak

Kardinalite, iki tablo arasında kaç kaydın bağlanabileceğini açıklar. Şu soruları yanıtlar: 

  • Bir müşterinin kaç siparişi olabilir?
  • Bir müşteri hiç sipariş olmadan var olabilir mi?

Bire-çok ilişkiler asimetriktir; yani kurallar her tabloda farklıdır. Üst tabloda tek bir kayıt birçok kayda bağlanabilirken, alt tabloda her kayıt yalnızca bir kayda bağlanabilir.

Kardinalite ayrıca asgari ve azami sınırları da içerir; buna göre:

  • Asgari kardinalite: İzin verilen en az ilgili kayıt sayısı.
  • Azami kardinalite: İzin verilen en çok ilgili kayıt sayısı.

Örneğin, bir müşterinin sıfır veya çok sayıda siparişi olabilir; ancak bir sipariş tam olarak bir müşteriye ait olmalıdır.

Bu kurallar, belirli alanların boş bırakılıp bırakılamayacağını ve veritabanının ilişkileri ne kadar sıkı uygulayacağını belirterek tablo tasarımını etkiler.

ER Diyagramlarıyla Bire-Çok İlişkileri Görselleştirmek

Veritabanı tasarımında, Varlık-İlişki (ER) diyagramı; tabloları (varlıklar), bunların nasıl bağlandığını (ilişkiler) ve kaç kaydın bağlanabildiğini (kardinalite) görsel olarak gösterir.

ER Diyagram gösterimi

ER diyagramlarının çoğu, tablolarınızı bağlayan çizgilerin uçlarında ilişkinin tam olarak ne olduğunu anlatan belirli semboller kullanır. Aşağıda yaygın kullanılan görsel kavramlar yer alır:

  • Varlıklar: Tabloları temsil etmek için dikdörtgen olarak çizilir; ör. Customers veya Orders.
  • İlişkiler: Varlıkların birbirleriyle nasıl ilişkili olduğunu göstermek için varlıkları bağlayan çizgilerle gösterilir
  • Kardinalite sembolleri: Bir “1” veya tek çizgi “bir”i temsil ederken, ∞, * veya karga ayağı sembolü “birçok” ilişkiyi temsil eder.

Basit ER Diyagramı örneği

Aşağıdaki örnek, Customers ve Orders tabloları arasındaki ilişkiyi gösterir. Bire-çok ilişki, bir müşterinin birçok siparişi olabileceğini, ancak her siparişin bir müşteriye ait olduğunu gösterir. CustomerID, Orders tablosunda yer alarak Customers tablosuna geri bağ kurar.

Bire-çok ER diyagramı

Bire-Çok İlişkilere Yaygın Örnekler

Karşılaşabileceğiniz bire-çok ilişki senaryolarına aşağıdakiler örnek verilebilir:

  • Yazar → Kitaplar: Bir yazar birden çok kitap yazabilir, ancak her kitabın tek bir yazarı vardır (basit bir tasarımda).
  • Bölüm → Çalışanlar: Bir bölümde birçok çalışan olabilir, ancak her çalışan bir bölüme bağlıdır
  • Kategori → Ürünler: Bir kategoride birçok ürün bulunabilir, ancak her ürün bir kategoriye atanır.

İlişkisel Veritabanında Bire-Çok İlişkiyi Uygulamak

Bire-çok ilişkiler birincil anahtarlar ve yabancı anahtarlar kullanılarak uygulanır. Bu bölümde, bu kısıtlamaların veritabanlarında veri bütünlüğünü sağlamaya nasıl yardımcı olduğunu göstereceğim.

Birincil ve yabancı anahtarlar

Birincil anahtar bir tablodaki her satırı benzersiz olarak tanımlayan bir sütundur; yabancı anahtar ise bir tabloda yer alan ve başka bir tablodaki birincil anahtara referans veren alan ya da alanlar kümesidir.

Bire-çok ilişkide, “bir” taraf birincil anahtara sahiptir ve “çok” taraf bu anahtarı yabancı anahtar olarak saklar. Yabancı anahtar, iki tablo arasında bağlantı kurar ve “çok” tarafındaki her kaydın “bir” tarafındaki geçerli bir kaydı işaret etmesini sağlar.

Temel SQL örneği

Aşağıdaki örneği kullanarak SQL’de bire-çok ilişkiyi nasıl kuracağınızı görelim.

Her müşteriyi benzersiz biçimde tanımlayan CustomerID sütununa sahip Customers tablosunu oluşturacaksınız. Bu üst tablodur.

-- Create Customers table with CustomerID as primary key
CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    CustomerName VARCHAR(100)
);

Şimdi, CustomerID’nin yabancı anahtar olduğu Orders tablosunu oluşturun. Bu tabloda, her sipariş tam olarak bir müşteriye referans verir ve alt tablodur.

-- Create Orders table with CustomerID as a foreign key
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    OrderDate DATE,
    CustomerID INT,
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);

Bire-Çok ve Çok-Çok İlişkilerin Karşılaştırması

Bire-çok ile çok-çok ilişkiler arasındaki farkı anlamak, doğru veritabanı tasarımı için önemlidir. Aşağıdaki tablo bu farkları özetler:

Boyut

Bire-Çok İlişki

Çok-Çok İlişki

Tanım

A Tablosundaki bir kayıt, B Tablosundaki birçok kayda bağlanabilir

A Tablosundaki kayıtlar B Tablosundaki birçok kayda ve tersi yönde bağlanabilir

İlişki Yönü

Bir → Çok (tek yön)

Çok ↔ Çok (çift yön)

B Tablosundaki Kural

B Tablosundaki her kayıt yalnızca A Tablosundaki bir kayda bağlanır

B Tablosundaki her kayıt A Tablosundaki birçok kayda bağlanabilir

Yaygın Örnekler

Customer → OrdersDepartment → Employees

Students ↔ CoursesProducts ↔ Orders

Gerçek Dünya Anlamı

Bir müşteri birçok sipariş verebilir, ancak her sipariş bir müşteriye aittir

Bir öğrenci birçok derse kaydolabilir ve her dersin birçok öğrencisi olabilir

Uygulama

Çok tarafında tek bir yabancı anahtar

Birleştirme (ara) tablo gerektirir

Yabancı Anahtarın Yeri

“Çok” tablosunda saklanır

Birleştirme tabloda saklanır (iki yabancı anahtar)

Şunu unutmamak gerekir ki ilişkisel veritabanları, tek bir yabancı anahtarla çok-çok ilişkileri doğrudan depolayamaz. Bunun yerine bir birleştirme tablosu (ara veya köprü tablo da denir) kullanırlar.

Örneğin, Students tablosundaki kayıtları Courses tablosuyla, birleştirme tablo olarak Enrollments tablosunu kullanarak güvenle ilişkilendirebilirsiniz. Birleştirme tablo, çok-çok ilişkiyi iki adet bire-çok ilişkiye böler; dolayısıyla her iki tabloya ait yabancı anahtarları tutar. Bu tasarım, veritabanı normalizasyonuna yardımcı olarak verimliliği korur.

SQL’de farklı join türlerini ve veritabanındaki farklı ilişkili tablolarla nasıl çalışacağınızı öğrenmek için SQL’de Verileri Birleştirme kursumuzu öneririm.

Bire-Çok İlişkilerde Yaygın Hatalar

Bire-çok ilişkilerde karşılaşabileceğiniz bazı yaygın sorunlar ve bunları nasıl gidereceğiniz aşağıdadır:

  • Yabancı anahtarı yanlış tabloya koymak: Yabancı anahtarı “bir” tablosunda saklarsanız, tek bir sütunda birden çok değer depolamak ya da sütunları tekrar etmek zorunda kalırsınız; bu da normalizasyonu bozar ve sorgulamayı zorlaştırır. Bunu çözmek için yabancı anahtarı her zaman ilişkinin “çok” tarafına yerleştirin.
  • Bire-Çok ile Çok-Çok’u karıştırmak: Her iki tarafın da aslında birden çok ilgili kayda sahip olabildiği bir ilişkiyi bire-çok olarak modellemek, eksik veriye, yinelenen satırlara veya gereksinimlerle büyüyemeyen katı tasarımlara yol açabilir. Bunu düzeltmek için, her zaman bir alt kaydın birden çok kaydı olup olamayacağını doğrulayın; yanıt evetse birleştirme tablo kullanın.
  • İstemeden yetim kayıtlarına izin vermek: Geçerli bir üst kayıt olmadan alt kayıtların var olmasına izin vermek, müşterisiz siparişler veya bölümsüz çalışanlar gibi tutarsız veriler oluşturabilir. Bunu çözmek için veritabanının geçerli ilişkileri otomatik olarak uygulaması adına ON DELETE CASCADE gibi yabancı anahtar kısıtlamalarını kullanın.

Bire-Çok İlişkileri Tasarlamak için En İyi Uygulamalar

Verimli ve ölçeklenebilir bire-çok ilişkiler tasarlamanıza yardımcı olması için aşağıdaki en iyi uygulamaları öneririm:

  • Açık ve tutarlı adlandırma kullanın: Birincil anahtarları öngörülebilir biçimde adlandırın; örneğin CustomerID ve OrderID. Açık adlandırma, diyagram olmadan da ilişkileri belirgin kılar ve yabancı anahtar adlarını başvurulan birincil anahtarla eşleştirirken faydalıdır.

  • Yabancı anahtar kısıtlamalarını uygulayın: Veri bütünlüğünü korumak ve özellikle veriniz büyüdükçe geçersiz ya da yetim kayıtları önlemek için yabancı anahtarları kullanın.

  • Silme davranışını erkenden düşünün: Üst kayıt silindiğinde alt kayıtlara ne olacağına erkenden karar vererek kazara veri kaybını veya bozuk referansları önleyin. Örneğin CASCADE, üst kayıt silindiğinde tüm alt kayıtların da silinmesini sağlar.

  • Tasarımı sade tutun: Gereksiz tabloları veya karmaşık ilişkileri her zaman kaçının; tasarımınızı, varsayımsal gelecekteki durumlar için değil, şu an ihtiyaç duyduğunuz modele göre yapın. Unutmayın, sade tasarımlar bakım, açıklama ve genişletme açısından daha kolaydır.

Sonuç

Bire-çok ilişki, bir tablodaki tek bir kaydın başka bir tablodaki birden çok kayıtla ilişkilendirilebildiğini; buna karşılık bu ilgili kayıtların her birinin yalnızca bir üst kayda ait olduğunu ifade eder. Bu desen, veriyi düzenli tutup gereksiz çoğaltmayı önlediği için ilişkisel veritabanı tasarımının temelidir.

SQL ile veritabanı tasarlamayı öğrenerek verileri verimli şekilde işlemek, depolamak ve düzenlemek için SQL İle Associate Veri Mühendisi kariyer yolumuzu öneririm. Ayrıca, büyük veri için veritabanı yönetimi becerilerinizi geliştirmek istiyorsanız, Snowflake’te Veri Modellemesine Giriş kursumuz boyutsal modelleme konusunda yardımcı olacaktır.

Allan Ouko

Yazar

Allan Ouko

Veri analitiği, iş zekâsı ve veri bilimi alanlarında pratik deneyime sahip Veri Bilimi Teknik Yazarı. SQL, Python, Power BI, Databricks ve veri mühendisliği üzerine, gerçek dünya analitik çalışmalarına dayanan, uygulamaya dönük ve sektöre odaklı içerikler yazıyorum. Yazılarım teknik derinlikle iş etkisi arasındaki köprüyü kurarak profesyonellerin veriyi güvenle karara dönüştürmelerine yardımcı olur.

SSS

Bire-çok ilişki, çok-çok ilişkiden nasıl farklıdır?

Bire-çokta yalnızca bir tarafın birden çok ilgili kaydı olabilir; çok-çokta her iki tarafın da olabilir ve bu da bir birleştirme tablosu gerektirir.

Bire-çok ilişkide yabancı anahtar hangi tabloda bulunur?

Yabancı anahtar, ilişkinin “çok” tarafındaki tabloda saklanır.

Yabancı anahtar olmadan bire-çok ilişki var olabilir mi?

Kavramsal olarak evet, ancak pratikte veri bütünlüğünü sağlamak ve geçersiz kayıtları önlemek için yabancı anahtarlar şiddetle tavsiye edilir.

Veri modelimin bire-çok mu yoksa çok-çok mu olması gerektiğini nasıl anlarım?

Her iki tarafın da birden çok ilgili kaydı olup olamayacağını sorun. Yanıt evetse çok-çoktür; değilse bire-çoktür.

İlişkilerde kardinalite nedir?

Kardinalite, iki tablo arasındaki sayısal ilişkiyi açıklar. 1:N ilişkide kardinalite, üst tarafta bir, alt tarafta çoktur.

Konular

İlgili