Sobes.tech
Junior

Реляциялык маалыматтар базаларында таблицалардын ортосундагы байланыштар кандай орнотулат?

sobes.tech AI

AIден жооп

Реляциялык маалыматтар базаларында байланыштар таблицалардын ортосунда сырткы ачкычтар (Foreign Keys) аркылуу орнотулат.

Сырткы ачкыч — бул бир таблицадагы багыт же багыттар жыйындысы, ал башка таблицанын биринчи даражадагы ачкычы (Primary Key) менен шилтемелүү. Бул эки таблицадагы жазуулар ортосунда логикалык байланыш түзөт.

Байланышты орнотуу учурунда:

  1. "Ата" (Parent) таблицасында биринчи даражадагы ачкыч белгиленет. Бул ачкыч ар бир жазууну уникалдуу аныктайт.
  2. "Эмчек" (Child) таблицасында сырткы ачкыч катары кызмат кылган багыт (же багыттар жыйындысы) түзүлөт.
  3. Бул багыт "ата" таблицасындагы биринчи даражадагы ачкычка байланыштуу.
  4. Маалыматтын бүтүндүгүн камсыздоо үчүн чектөөлөр (Constraints) коюлат:
    • REFERENCES: кайсы таблица жана кайсы багыт (биринчи даражадагы ачкычы) шилтемелүү экенин көрсөтөт.
    • ON UPDATE behavior: биринчи даражадагы ачкыч өзгөргөндө "эркек" таблицасындагы жазууларга эмне болорун аныктайт. Варианттар:
      • CASCADE: Өзгөртүүлөр "эркек" таблицасынан "эркек" таблицасына каскаддуу өтөт.
      • SET NULL: Сырткы ачкыч маанилери NULL болуп калат.
      • RESTRICT: Өзгөртүү тыюу салынат, эгер байланышкан жазуулар болсо.
      • NO ACTION: Көпчүлүк DBMS-дерде RESTRICT сыяктуу иштейт.
      • SET DEFAULT: Сырткы ачкыч маанилери алдын ала белгиленген мааниге өзгөртүлөт.
    • ON DELETE behavior: "Эркек" жазуусу өчүрүлгөндө эмне болорун аныктайт. Варианттар ON UPDATE сыяктуу.

SQL синтаксисинин мисалы:

CREATE TABLE Customers (
    customer_id INT PRIMARY KEY, // "Клиент" таблицасындагы биринчи даражадагы ачкыч
    customer_name VARCHAR(255)
);

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT, // "Клиент" таблисасынан шилтемелүү сырткы ачкыч
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
    ON UPDATE CASCADE // "Клиент" таблисасындагы customer_id өзгөргөндө, бул жерде да өзгөрөт
    ON DELETE CASCADE // "Клиент" өчүрүлгөндө, тиешелүү Orders да өчүрүлөт
);

Түрлөрү:

Төрү Түшүндүрмө Мисал
One-to-One (1:1) Биринчи таблицадагы бир жазуу экинчи таблицада бир жазууга жана тескерисинче туура келет. Редко колдонулат. Колдонуучу жана анын профили.
One-to-Many (1:N) Биринчи таблицада бир жазуу экинчи таблицада көп жазууга туура келет, бирок экинчи таблицада ар бир жазуу гана биринчига тиешелүү. Кардар жана анын заказдары.
Many-to-Many (N:M) Биринчи таблицада көп жазуу экинчи таблицада көп жазууга жана тескерисинче туура келет. Ортоңку (байланыштуу) таблица аркылуу ишке ашырылат. Өнүмдөр жана категориялар.

Many-to-Many үчүн үчүнчү таблица түзүлөт, ал эки таблицага да сырткы ачкычтарды камтыйт.

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 ( // Байланыш таблицасы
    product_id INT,
    category_id INT,
    PRIMARY KEY (product_id, category_id), // Кошумча биринчи даражадагы ачкыч
    FOREIGN KEY (product_id) REFERENCES Products(product_id),
    FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);