integritatea referențială

o parte integrantă a modelului de date relaționale

Modelul de date relațional definește două cerințe de bază de integritate, care sunt susținute de toate RDBMS:

- integritate entitate cerință

Entitate sau entități din lumea reală într-o bază de date relațională se potrivește relațiilor tuple. Cerința de integritate Entitatea este după cum urmează:

Orice tuplu orice relație trebuie să fie distinsă de orice alt uplu din aceeași relație.

Această cerință înseamnă că fiecare relație ar trebui să aibă o cheie primară. Acest lucru se face în mod automat în cazul în care sistemul nu încalcă proprietățile de bază ale relațiilor.

În plus, următoarele restricții pot fi stabilite:

- UNIQUE - unicitatea valorilor atributelor; identifică relații de chei alternative;

- NOT NULL - valori obligatorii; când introduceți un nou sau modificarea elementelor existente ale valorilor relației dintre atributele corespunzătoare trebuie să fie specificate;

- CHECK (condiție) - valorile atributelor admisibile; Inserturile trebuie să îndeplinească o condiție specificată.

De exemplu, raportul dintre elementul pe baza de date SQL pentru MS SQL Server poate fi definită după cum urmează:

P_id SMALLINT IDENTITATE (1,1) CONSTRAINT P_PK PRIMARY KEY, --1

Pname VARCHAR (20) NOT NULL CONSTRAINT P_UQ_01 UNIC, --2

PRET NU BANI CONSTRAINT NULL P_CH_01 VERIFICARE (PRET> 0) --3

1 - definit prin constrângerea cheie primară (limita PRIMARY KEY, nume de constrângere - P_PK), ale căror valori trebuie să fie stabilite în mod automat, și de la 1, în trepte de câte 1 (adică, în prima înregistrare este setat la 1, al doilea - valoarea 2 și m .d.)

2 - identificat constrângere unică (nume de constrângere - P_UQ_01) și o valoare necesară;

3 - condiție definită (nume de constrângere - P_CH_01): valoarea atributului trebuie să fie strict pozitiv.

Pentru a determina restricțiile utile pentru a cere numele lor, care sunt de obicei construite de următoarea regulă: în numele restricțiilor includ numele tabelei, apoi tastați numele limitărilor condiționate și restricțiile acestui număr de tip, în cazul în care în acest tabel pot fi mai multe.

constrângeri de integritate referențială în RMD sunt condiții impuse coexistența tuple în relația asociată. După cum sa menționat deja, într-o bază de date relațională conexiune între relațiile sunt reprezentate de chei externe. Revenind la exemplul, care se ocupă cu departamentele de relații și angajații:

DEPARTAMENTUL (carte de identitate. Numele (AK))

Cameră Personal. Nume. Anul nașterii. Număr Divizia (FK))

Numărul de Externe atribut cheie al departamentului în raport cu angajații permite obținerea de informații complete cu privire la departamentul special, în care funcționează un anumit angajat.

De obicei, raportul la care este definit cheia externă, numită relația copil, și raportul la care cheia externă se referă - relația părinte. Deci, în exemplul nostru, atitudinea personalului - o filială, și raportul dintre DEPARTAMENTUL - părinte.

Cerința pentru integritatea referențială este după cum urmează:

Valoarea cheie externă în orice relație copil atribut tuplu trebuie să se potrivească cu atributul cheie principal al unui tuplu într-o relație parentală.

Atunci când se efectuează operații asociate cu modificarea relațiilor (inserare, ștergere, și actualizarea valorii cheie corespunzătoare) necesare pentru a monitoriza cerințele de integritate. Luați în considerare punerea în aplicare specială a acestor operațiuni.

1. Toate tranzacțiile cu relația filială trebuie să îndeplinească cerințele de integritate referențială:

- la introducerea unui nou element, acest element trebuie să aibă o valoare validă a atributelor cheie externe;

- îndepărtarea elementului se realizează fără nici o restricție;

- atunci când modificarea unui element al cheii externe, acest element trebuie să primească o valoare validă a atributelor cheie externe.

2. Tranzacțiile cu un raport-mamă se efectuează în conformitate cu următoarele reguli:

- inserarea unui nou element se realizează fără nici o restricție;

- îndepărtarea elementului nu ar trebui să conducă la o încălcare a integrității referențiale. În cazul în care relația copil există un element care se referă la elementul amovibil relației parentale, cum să se ocupe cu ea? Există trei abordări posibile:

a) să restricționeze - pentru a șterge elementul din relația parentală nu se efectuează în cazul în care o relație de copil există cel puțin un element care se referă la eliminat;

b) în cascadă - împreună cu elementul de relația părinte elimină toate elementele de referință pentru copii ale relației;

c) set de NULL - relația copil atribute cheie externă i se atribuie o valoare nulă (fiecare SGBD utilizează propria metodă de stabilire a unei valori gol); Această abordare este posibilă, în cazul în care nu o limitare necesară valori pentru relația externă copil atribut cheie;

- modificarea valorilor cheii primare a unui element existent, de asemenea, nu trebuie să afecteze integritatea referențială. De asemenea, este posibil, aceleași trei abordări:

a) să restricționeze - modificarea elementului principal al relației cheie părinte nu este îndeplinită, în cazul în care o relație copil este cel puțin un element care se referă la un modificabil;

b) în cascadă - împreună cu elementul relației părinte valorile atributelor ale străine elemente cheie referirii lui relație filială modificată;

c) set de NULL - relația copil atribute cheie externă i se atribuie o valoare nulă; Această abordare este posibilă în cazul în care o relație de copil cu atributele cheie externe nu sunt valori obligatorii este limitată.

De exemplu, raportul de livrare de comunicare poate fi determinată pentru SQL MS SQL Server urmează. Având în vedere că raportul de livrare este raportul de conectare (raportul dintre copil) relației dintre furnizor și o parte (relația parentală) înainte de a stabili raportul filialei necesară pentru a determina mamă.

Determinarea pe detaliile de mai sus.

relație furnizor poate fi determinată după cum urmează:

S_ID SMALLINT IDENTITATE (1,1) CONSTRAINT S_PK PRIMARY KEY,

SNAME VARCHAR (30) NOT NULL,

Acum definim livrarea de conexiune relația:

CREATE TABLE SP (

S_ID SMALLINT NOT NULL CONSTRAINT SP_FK_01 REFERINȚE S (S_ID), --1

P_id SMALLINT NOT NULL CONSTRAINT SP_FK_02 REFERINȚE P (p_id), --1

CANT INT NOT NULL CONSTRAINT VERIFICARE SP_CH_01 (QTY> 0)

CONSTRAINT SP_PK PRIMARY KEY (S_ID, p_id) --2

1 - definit printr-o cheie externă; în constrângerea cheie externă (REFERINȚE cuvinte cheie) indică tabelul părinte și cheia sa primară; Regula implicită este definită ca eliminarea restricționați.

2 - este determinată de cheia primară; deoarece în acest exemplu, componenta cheie primară, determinarea este dat ca un tabel de nivel primar restricție cheie (cheia externă, în acest exemplu, un singur atribut reglabil, o restricție atribut nivel).