Sobes.tech
Junior

Ulashli ma'lumotlar bazalarida jadvallar o'rtasidagi bog'lanishlar qanday sozlanadi?

sobes.tech AI

AIdan javob

Relatsion bazalarda jadvallar o'rtasidagi bog'lanishlar tashqi kalitlar (Foreign Keys) yordamida sozlanadi.

Tashqi kalit — bu bir jadvaldagi ustun yoki ustunlar to'plami bo'lib, boshqa jadvalning birinchi kaliti (Primary Key)ga murojaat qiladi. U ikki jadvaldagi yozuvlar o'rtasida mantiqiy bog'lanishni o'rnatadi.

Bog'lanishni sozlashda:

  1. "Ota" (Parent) jadvalida birinchi kalit (Primary Key) aniqlanadi. Bu kalit har bir yozuvni yagona tarzda identifikatsiya qiladi.
  2. "O'g'il" (Child) jadvalida, tashqi kalit sifatida xizmat qiladigan ustun (yoki ustunlar to'plami) yaratiladi.
  3. Bu ustun "ota" jadvaldagi birinchi kalitga bog'lanadi.
  4. Ma'lumotlarning yaxlitligini ta'minlash cheklovlari (Constraint) o'rnatiladi:
    • REFERENCES: Tashqi kalit qaysi jadval va ustunga murojaat qilayotganini ko'rsatadi.
    • ON UPDATE behavior: Ota jadvaldagi birinchi kalit o'zgartirilganda, o'g'il jadvaldagi yozuvlar bilan nima bo'lishini belgilaydi. Variantlar:
      • CASCADE: O'zgartishlar zanjir bo'lib, barcha bog'langan yozuvlarga tatbiq etiladi.
      • SET NULL: Tashqi kalit qiymatlari NULL ga o'rnatiladi.
      • RESTRICT: O'zgartirish taqiqlanadi, agar bog'langan yozuvlar mavjud bo'lsa.
      • NO ACTION: Ko'pgina SGBDlarda RESTRICT ga o'xshash.
      • SET DEFAULT: Tashqi kalit qiymatlari standart qiymatga o'rnatiladi.
    • ON DELETE behavior: Ota jadvaldagi yozuv o'chirilganda, bog'langan yozuvlar bilan nima bo'lishini belgilaydi. Variantlar ON UPDATE bilan bir xil.

Bog'lanishni yaratish uchun SQL sintaksis misoli:

CREATE TABLE Customers (
    customer_id INT PRIMARY KEY, -- Mijozlar jadvalidagi birinchi kalit
    customer_name VARCHAR(255)
);

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT, -- Tashqi kalit, Customers jadvalidagi customer_id ga murojaat qiladi
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
    ON UPDATE CASCADE -- Customer_id o'zgartirilganda, Orders jadvalida ham yangilanadi
    ON DELETE CASCADE -- Mijoz o'chirilganda, uning buyurtmalari ham o'chiriladi
);

Jadvallar o'rtasidagi bog'lanish turlari:

Bog'lanish turi Tavsifi Misol
Bir-birga (1:1) Birinchi jadvaldagi yozuv, ikkinchi jadvalda ham faqat bitta yozuv bilan mos keladi. Relatsion bazalarda kam uchraydi. Foydalanuvchi va uning profili.
Bir-ko'p (1:N) Birinchi jadvaldagi yozuv, ikkinchi jadvalda ko'plab yozuvlar bilan mos keladi, lekin ikkinchi jadvaldagi har bir yozuv faqat birinchi bilan mos keladi. Mijoz va uning buyurtmalari.
Ko'p-kup (N:M) Birinchi jadvaldagi ko'plab yozuvlar, ikkinchi jadvalda ham ko'plab yozuvlar bilan mos keladi. Bu, o'rta (bog'lovchi) jadval orqali amalga oshiriladi. Mahsulotlar va kategoriyalar.

Many-to-Many bog'lanish uchun, ikkala jadvalga ham tashqi kalitlar bilan bog'langan uchinchi jadval yaratiladi.

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 ( -- Bog'lanish jadvali
    product_id INT,
    category_id INT,
    PRIMARY KEY (product_id, category_id), -- Birgalikda asosiy kalit
    FOREIGN KEY (product_id) REFERENCES Products(product_id),
    FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);