Sobes.tech
Junior

İlişkisel veritabanlarında tablolar arasındaki ilişkiler nasıl ayarlanır?

sobes.tech yapay zeka

AI'dan gelen yanıt

İlişkisel veritabanlarında, tablolar arasındaki ilişkiler yabancı anahtarlar (Foreign Keys) kullanılarak yapılandırılır.

Yabancı anahtar, bir tabloda bulunan ve başka bir tablonun birincil anahtarına (Primary Key) referans veren sütun veya sütunlar kümesidir. İki tablo arasındaki mantıksal ilişkiyi kurar.

İlişkiyi yapılandırırken:

  1. "Ana" (Parent) tablosunda birincil anahtar tanımlanır. Bu anahtar her kaydı benzersiz şekilde tanımlar.
  2. "Çocuk" (Child) tablosunda, yabancı anahtar olarak kullanılacak bir veya birkaç sütun oluşturulur.
  3. Bu sütun, "ana" tablodaki birincil anahtara bağlanır.
  4. Veri bütünlüğü kısıtlamaları (Constraint) kurulur:
    • REFERENCES: Yabancı anahtarın hangi tablo ve sütuna (birincil anahtar) referans verdiğini gösterir.
    • ON UPDATE behavior: Ana tablodaki birincil anahtar değiştirildiğinde, çocuk tablodaki kayıtların ne olacağını belirler. Seçenekler:
      • CASCADE: Değişiklikler zincirleme olarak uygulanır.
      • SET NULL: Yabancı anahtar değerleri NULL yapılır.
      • RESTRICT: Bağlantılı çocuk kayıtları varsa değişiklik engellenir.
      • NO ACTION: Çoğu SGBD'de RESTRICT ile aynıdır.
      • SET DEFAULT: Yabancı anahtar değerleri varsayılan değere ayarlanır.
    • ON DELETE behavior: Ana tablodaki kayıt silindiğinde, çocuk tablodaki kayıtlara ne olacağını belirler. Seçenekler ON UPDATE ile aynıdır.

İlişkiyi oluşturmak için SQL sözdizimi örneği:

CREATE TABLE Customers (
    customer_id INT PRIMARY KEY, -- Müşteri tablosundaki birincil anahtar
    customer_name VARCHAR(255)
);

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT, -- Müşteri tablosundaki customer_id'ye referans veren yabancı anahtar
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
    ON UPDATE CASCADE -- Customer tablosundaki customer_id değiştiğinde, Orders tablosunda da güncellenir
    ON DELETE CASCADE -- Müşteri silindiğinde, ilişkili siparişler de silinir
);

Tablolar arasındaki ilişki türleri:

İlişki Türü Açıklama Örnek
Bir-tek (1:1) Bir tabloda bir kayıt, diğer tabloda da tam olarak bir kayıt ile eşleşir. Relational veritabanlarında nadir görülen bir durumdur. Kullanıcı ve profili.
Birden Çok (1:N) Bir tabloda bir kayıt, diğer tabloda birçok kayıt ile eşleşir, ancak diğer tabloda her kayıt sadece bir tane ile eşleşir. Müşteri ve siparişleri.
Çok-Çok (N:M) Bir tabloda birçok kayıt, diğer tabloda da birçok kayıt ile eşleşir. Bu, ara bir tablo (bağlantı tablosu) aracılığıyla gerçekleştirilir. Ürünler ve kategoriler.

Many-to-Many ilişkisi için, iki tabloyu bağlayan yabancı anahtarlar içeren üçüncü bir tablo oluşturulur.

CREATE TABLE Products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(255)
);

CREATE TABLE Categories (
    category_id INT PRIMARY KEY,
    category_name VARCHAR(255)
);

CREATE TABLE ProductCategories ( -- Bağlantı tablosu
    product_id INT,
    category_id INT,
    PRIMARY KEY (product_id, category_id), -- Bileşik birincil anahtar
    FOREIGN KEY (product_id) REFERENCES Products(product_id),
    FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);