Junior
Реляциялык маалыматтар базаларында таблицалардын ортосундагы байланыштар кандай орнотулат?
sobes.tech AI
AIден жооп
Реляциялык маалыматтар базаларында байланыштар таблицалардын ортосунда сырткы ачкычтар (Foreign Keys) аркылуу орнотулат.
Сырткы ачкыч — бул бир таблицадагы багыт же багыттар жыйындысы, ал башка таблицанын биринчи даражадагы ачкычы (Primary Key) менен шилтемелүү. Бул эки таблицадагы жазуулар ортосунда логикалык байланыш түзөт.
Байланышты орнотуу учурунда:
- "Ата" (Parent) таблицасында биринчи даражадагы ачкыч белгиленет. Бул ачкыч ар бир жазууну уникалдуу аныктайт.
- "Эмчек" (Child) таблицасында сырткы ачкыч катары кызмат кылган багыт (же багыттар жыйындысы) түзүлөт.
- Бул багыт "ата" таблицасындагы биринчи даражадагы ачкычка байланыштуу.
- Маалыматтын бүтүндүгүн камсыздоо үчүн чектөөлөр (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)
);