Cum să creați constrângeri de cheie străină în SQL

Dacă dețineți o întreprindere, trebuie să fi întâlnit valoarea și nevoia de date în afacerea dvs. Deținerea mijloacelor de stocare și manipulare a bazelor de date adaugă mai multă valoare afacerii.

Bazele de date sunt organizate într-o anumită convenție și vă permit să structurați datele în conexiuni, aducându-ne la baze de date relaționale, care au fost îmbrățișate ca o formă de gestionare a datelor încă din anii 1970. Și pe piața de astăzi, bazele de date relaționale sunt preferate pentru capacitățile lor atunci când manipulează datele.

Deși există multe baze de date relaționale disponibile, MySQL a ajuns pe primul loc, clasându-se pe locul doi la nivel mondial, potrivit Statista, din ianuarie 2022.

În serverul SQL, constrângerile sunt reguli predefinite și limitări impuse fie într-o singură coloană, fie în mai multe coloane; acestea sunt legate de valorile din coloană și ajută la menținerea integrității, acurateței și fiabilității datelor coloanelor specificate.

Mai simplu spus, numai datele care îndeplinesc regula de constrângere sunt inserate cu succes în coloană. Operația de inserare este încheiată dacă datele nu îndeplinesc criteriile.

Această postare presupune că ați întâlnit baze de date relaționale, în special – MySQL, și așteptați cu nerăbdare să vă consolidați cunoștințele în domeniu. În cele din urmă, voi împărtăși câteva sfaturi pentru interacțiunea cu constrângerile cheie străine.

Constrângeri cheie primară – O recapitulare

Un tabel în SQL implică o coloană sau mai multe care conțin valori cheie care identifică cu precizie fiecare rând din sisteme. Coloana sau coloanele intitulate cheie primară (PK) din tabel au rolul de a impune integritatea entității a tabelului. Constrângerile cheii primare garantează date unice și sunt adesea definite pe o coloană de identitate.

La specificarea constrângerilor cheii primare pentru tabelul dvs., motorul bazei de date impune automat unicitatea datelor prin generarea de indecși unici pentru fiecare dintre coloanele primare. Cheile primare oferă un avantaj extrem atunci când sunt utilizate în interogări, oferind acces rapid la date.

Dacă constrângerile cheii primare sunt definite pe mai multe coloane, se face referire la cheie primară compusă sau compusă. Și în acest caz, fiecare coloană a cheii primare poate conține valori duplicate. Cu toate acestea, valorile combinate din toate coloanele din cheia primară trebuie să fie unice.

Un exemplu bun este cazul în care aveți un tabel cu coloanele „id”, „nume” și „vârstă”. Când definiți constrângerea cheii sale primare pe combinația de `id` și `names`, puteți avea instanțe duplicate ale valorilor `id` sau `names`. Cu toate acestea, fiecare combinație trebuie să fie unică pentru a evita rândurile duplicate. Deci, puteți avea înregistrări cu `id=1` și `name=Walter` și `age-22” și `id=1`, `name=Henry` și `age=27`, dar nu puteți avea alte înregistrări cu `id=1` și `name=Walter` deoarece combinația nu este unică.

Iată câteva aspecte esențiale de știut:

  • Un tabel conține o singură constrângere de cheie primară.
  • Cheile primare nu pot depăși 16 coloane și o lungime maximă de 900 de caractere.
  • Indicii generați de cheile primare îi pot crește pe cei din tabel. Cu toate acestea, numărul de indici grupați dintr-un tabel nu poate depăși 1, iar numărul de indici care nu sunt grupați pe un tabel este limitat la 999.
  • Când clustered și non-clustered sunt nespecificate pentru o constrângere cheie, clustered este preluat automat.
  • Toate coloanele declarate într-o constrângere a cheii primare ar trebui definite ca nenule. Dacă nu este cazul, toate coloanele legate în constrângere au anulabilitatea setată automat la nul.
  • Când cheile primare sunt definite pe tipul de coloană CLR (Common Language Runtime) definit de utilizator, implementarea tipului trebuie să accepte ordonarea binară.
  •   Cum să împiedicați supraîncălzirea Mac-ului dvs

    Constrângeri cheie străine – O scurtă prezentare

    O cheie externă (FK) implică o coloană sau o combinație a mai multor folosite pentru a crea și lega o legătură între două tabele și gestionează datele care urmează să fie stocate într-un tabel cu chei externe.

    O referință la cheie străină presupune crearea unei legături între două tabele; atunci când o coloană sau coloane care dețin cheia primară pentru un alt tabel sunt menționate de o coloană sau coloane dintr-un tabel diferit.

    În scenariul referinței la chei străine, se creează o conexiune între două tabele atunci când o coloană sau coloane care dețin chei primare dintr-un tabel sunt referite de coloanele din altul.

    Într-un caz de utilizare practic, puteți avea un tabel, Sales.SalesOrderHeader, cu o cheie străină care se leagă la un alt tabel, Vânzări.Persoană, deoarece există o relație logică între vânzători și comenzile de vânzări.

    Aici, SalesPersonID din coloana SalesOrderHeader se îmbină cu coloana cheie primară a tabelului SalesPerson. Cheia externă a tabelului SalesPerson este coloana SalesPersonID din SalesOrderHeader.

    Această relație definește o regulă: o valoare SalesPersonID nu poate fi în tabelul SalesOrderHeader dacă nu există în tabelul SalesPerson.

    Un tabel poate face referire la până la 253 de alte coloane și tabele ca chei străine, numite alternativ referințe de ieșire. Din 2016, serverul SQL a crescut numărul de tabele și coloane la care puteți face referire într-un singur tabel, cunoscut și sub numele de referințe de intrare, de la 253 la 10000. Cu toate acestea, creșterea vine cu unele restricții:

  • Referințele cheilor externe care depășesc 253 sunt disponibile numai pentru operațiunile DELETE DML. MERGE și UPDATE nu sunt acceptate.
  • Tabelele cu referințe de cheie străină la ele însele sunt până la maximum 253 de referințe de cheie străină.
  • Pentru indexurile de stocare a coloanelor, tabelele optimizate pentru memorie și tabelele de chei externe partiționate, referințele cheilor externe sunt limitate la 253.
  • Care sunt beneficiile cheilor externe?

    După cum sa menționat anterior, constrângerile cheie străine joacă un rol esențial în protejarea integrității și a coerenței datelor în baza de date relațională. Iată o defalcare a motivelor pentru care constrângerile cheie străine sunt esențiale.

  • Integritate referențială – Constrângerile cheie străine garantează că fiecare înregistrare de tabel copil corespunde unei înregistrări de tabel primar, asigurând consistența datelor în ambele tabele.
  • Prevenirea înregistrărilor orfane – Dacă ștergeți un tabel părinte, constrângerile de cheie străină asigură ștergerea tabelului copil asociat, prevenind cazurile de înregistrări orfane care ar putea duce la inconsecvența datelor.
  • Performanță îmbunătățită – Constrângerile cheie străine sporesc performanța interogărilor, permițând sistemului de management al bazei de date să optimizeze interogările pe baza relațiilor de tabel.
  •   WakeUp pornește automat ecranul când ridicați dispozitivul

    Indici de constrângeri cheie străine

    Constrângerile de cheie străină nu creează automat indecși corespunzători precum cel primar. Puteți crea manual indecși pentru constrângerile cheii străine; este benefic din următoarele motive.

    • Coloanele cu cheie străină sunt adesea folosite în criteriile de îmbinare atunci când se combină datele din tabelele înrudite în interogări prin potrivirea coloanelor legate de constrângere. Indecii ajută baza de date să găsească date asociate într-un tabel străin.
    • Dacă modificați constrângerile cheii primare, acestea sunt verificate cu cele străine în tabelele înrudite.

    Nu este obligatoriu crearea de indexuri. În continuare puteți combina datele din două tabele fără a specifica constrângerile cheii primare și externe. Cu toate acestea, adăugarea constrângerilor de cheie străină optimizează tabelele și le combină într-o interogare care îndeplinește criteriile sale de utilizare a cheilor. Dacă modificați constrângerile cheii primare, acestea sunt verificate cu cele străine înrudite.

    Sfaturi pentru a crea constrângeri de cheie străină în SQL

    Ați petrecut deja mult timp speculațiilor; a răspuns de ce. Să ne schimbăm atenția și să o limităm la tacticile pentru crearea constrângerilor cheie străine; raspunde la cum.

    Un câmp „Cheie străină” dintr-un tabel se referă la „Cheia primară” a altuia. Tabelul cu cheia primară este tabelul părinte. Iar tabelul cu cheia străină se numește tabel copil. Să ne scufundăm.

    Crearea unei chei externe în timp ce creați un tabel

    Când creați un tabel, puteți crea și o constrângere de cheie străină pentru a menține integritatea referențială. Iată cum să o faci:

    CREATE TABLE orders (
        order_id INT PRIMARY KEY,
        customer_id INT,
        order_date DATE,
        FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
    );

    Codul de mai sus creează un tabel numit „comenzi” cu cheia întreagă primară „order_id”, un alt întreg „customer_id” și data „order_date”. În acest caz, constrângerea FOREIGN KEY este adăugată la coloana „customer_id” și face referire la „customer_id” din tabelul „clienți”.

    Crearea unei chei externe după crearea unui tabel

    Să presupunem că ați creat deja un tabel și doriți să adăugați o constrângere de cheie străină; utilizați instrucțiunea `ALTER TABLE` în codul dvs. Uită-te la fragmentul de cod de mai jos.

    ALTER TABLE orders
    ADD FOREIGN KEY (customer_id) REFERENCES customers(customer_id);

    În acest caz, ați adăugat o constrângere de cheie străină „customer_id”, în tabelul „comenzi”, pentru a face referire la coloana „customer_id” din tabelul „clienți”.

    Crearea unei chei străine fără a verifica datele existente

    Când adăugați o constrângere de cheie externă la un tabel, baza de date verifică automat datele existente pentru a asigura coerența cu constrângerea. Cu toate acestea, dacă știți că datele sunt consecvente și doriți să adăugați o constrângere fără verificarea coerenței, iată cum să o faceți.

    ALTER TABLE orders
    ADD CONSTRAINT fk_orders_customers
    FOREIGN KEY (customer_id)
    REFERENCES customers(customer_id)
    NOT VALIDATE;

    Comanda NOT VALIDATE spune bazei de date să nu verifice datele existente. Acest caz particular este util în cazuri specifice. De exemplu, atunci când aveți date masive și doriți să finalizați procesul de validare.

    Crearea unei chei externe prin DELETE/UPDATE

    Pe măsură ce creați constrângeri de cheie străină, puteți direcționa acțiunea care trebuie întreprinsă în cazurile în care rândul referit este actualizat sau șters. În acest caz, utilizați constrângeri de integritate referențială în cascadă pentru a dicta acțiunile care trebuie întreprinse. Ei includ:

    #1. FARA ACTIUNE

    Ca și în cazul multor alte baze de date, regula „NU ACȚIUNE” este comportamentul implicit atunci când creați o constrângere de cheie străină. Aceasta înseamnă că nu se întreprinde nicio acțiune atunci când rândul la care se face referire este șters sau actualizat.

      Sisteme de operare: funcții și tipuri

    Motorul de bază de date generează o eroare dacă constrângerea cheii străine este încălcată. Cu toate acestea, acest lucru nu este recomandat deoarece poate duce la probleme de integritate referențială, deoarece constrângerea cheii externe trebuie să fie aplicată. Iată un exemplu despre cum să o faci:

    ALTER TABLE orders
    ADD CONSTRAINT fk_orders_customers
    FOREIGN KEY (customer_id)
    REFERENCES customers(customer_id)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

    #2. CASCADĂ

    Regula „CASCADE” este o altă opțiune pentru acțiunile „ON DELETE” și „ON UPDATE” atunci când se creează constrângeri de cheie străină. Când este pus în aplicare, înseamnă că ori de câte ori un rând este actualizat sau șters în tabelele părinte, rândurile la care se face referire sunt actualizate sau șterse corespunzător. Această tehnică este puternică atunci când se menține integritatea referențială. Iată un exemplu:

    ALTER TABLE orders
    ADD CONSTRAINT fk_orders_customers
    FOREIGN KEY (customer_id)
    REFERENCES customers(customer_id)
    ON DELETE CASCADE
    ON UPDATE CASCADE;

    Ar trebui să fiți atenți când utilizați această regulă, deoarece poate provoca consecințe nedorite dacă nu este utilizată cu atenție. Ați dori să evitați ștergerea accidentală a prea multor date sau crearea de referințe circulare. Prin urmare, utilizați această opțiune numai dacă este necesar și cu precauție.

    Există câteva reguli despre utilizarea CASCADE:

    • Nu puteți specifica CASCADE dacă o coloană de marcaj de timp este fie o parte a cheii externe, fie a cheii de referință.
    • Dacă tabelul dvs. are un declanșator ÎN LOC DE ȘTERGERE, nu puteți specifica ON DELETED CASCADE.
    • Nu puteți specifica ON UPDATE CASCADE dacă tabelul dvs. are declanșator ÎNLOC DE UPDATE.

    #3. SET NULL

    Când ștergeți sau actualizați un rând corespunzător din tabelul părinte, toate valorile care formează cheia externă sunt setate la nul. Această regulă de constrângere cere ca coloanele de cheie străină să nu fie executate și nu pot fi specificate pentru tabelele care au declanșatoare ÎNLOC DE UPDATE. Iată un exemplu despre cum să o faci.

    ALTER TABLE orders
    ADD CONSTRAINT fk_orders_customers
    FOREIGN KEY (customer_id)
    REFERENCES customers(customer_id)
    ON DELETE SET NULL
    ON UPDATE SET NULL

    În acest caz, ați setat coloana cheii externe „customer_id” din tabelul „comenzi” să fie nulă dacă rândul corespunzător din tabelul „clienți” este șters sau actualizat.

    #4. SETARE IMPLICIT

    Aici, setați toate valorile care fac ca cheia externă să fie implicită, cu condiția ca rândul la care se face referire din tabelul părinte să fie actualizat sau șters.

    Această constrângere se execută dacă toate coloanele de cheie străină au definiții implicite. Dacă o coloană poate fi nulă, valoarea sa implicită este setată la NULL. Rețineți că această opțiune nu poate fi specificată pentru tabelele cu declanșatoare ÎN LOC DE UPDATE. Iată un exemplu:

    ALTER TABLE orders
    ADD CONSTRAINT fk_orders_customers
    FOREIGN KEY (customer_id)
    REFERENCES customers(customer_id)
    ON DELETE SET DEFAULT
    ON UPDATE SET DEFAULT;

    În cazul de mai sus, ați setat „customer_id” din tabelul „comenzi” la valoarea sa implicită, ceea ce se întâmplă atunci când rândul corespunzător din tabelul „clienți” este șters sau actualizat.

    Cuvinte finale

    În acest ghid, ați avut o reîmprospătare despre constrângerile cheii primare și ați săpat în constrângerile cheii străine. De asemenea, ați întâlnit mai multe tehnici pentru a crea constrângeri de cheie străină. Și deși există multe modalități de a crea constrângeri de cheie străină, această postare a dezvăluit metodele.

    Și sperând că ați înțeles noi tehnici; nu te limitezi la a le combina. De exemplu, metodele de constrângere CASCADE, SET NULL, SET DEFAULT și NO ACTION pot fi combinate pe tabele cu relații referențiale.

    Dacă tabelul dvs. întâlnește NU ACȚIUNE, se întoarce la alte reguli de constrângere. În alte cazuri, o acțiune DELETE poate declanșa o combinație a acestor reguli, iar regula NO ACTION va fi rulată ca ultima.

    Apoi, consultați foaia de cheat SQL.