Како креирати ограничења страног кључа у СКЛ-у

Ако сте власник предузећа, сигурно сте наишли на вредност и потребу за подацима у свом послу. Поседовање средстава за складиштење и управљање базама података додаје већу вредност послу.

Базе података су организоване по одређеној конвенцији и омогућавају вам да структурирате податке у конекцијама, доводећи нас до релационих база података, које су прихваћене као облик управљања подацима од 1970-их. А на данашњем тржишту, релационе базе података су пожељније због својих могућности када манипулишу подацима.

Иако постоји много доступних релационих база података, МиСКЛ је постао водећи, рангирајући се као други у свету, према Статиста-и, од јануара 2022.

У СКЛ серверу, ограничења су унапред дефинисана правила и ограничења која се примењују у једној или више колона; они су везани за вредности у колони и помажу у одржавању интегритета, тачности и поузданости података наведених колона.

Једноставно речено, у колону се успешно убацују само подаци који испуњавају правило ограничења. Операција уметања се прекида ако подаци не испуњавају критеријуме.

Овај пост претпоставља да сте се сусрели са релационим базама података, конкретно – МиСКЛ, и радујете се јачању свог знања у домену. На крају, поделићу вам неколико савета за интеракцију са ограничењима страног кључа.

Примарна кључна ограничења – сажетак

Табела у СКЛ-у подразумева колону или неколико кључних вредности које прецизно одређују сваки ред у системима. Колона или колоне под називом примарни кључ (ПК) табеле имају улогу спровођења интегритета ентитета табеле. Ограничења примарног кључа гарантују јединствене податке и често су дефинисана у колони идентитета.

Након навођења ограничења примарног кључа за вашу табелу, механизам базе података аутоматски намеће јединственост података генерисањем јединствених индекса за сваку од примарних колона. Примарни кључеви нуде изузетну предност када се користе у упитима тако што омогућавају брз приступ подацима.

Ако су ограничења примарног кључа дефинисана на више колона, то се назива сложеним или сложеним примарним кључем. И у овом случају, свака колона примарног кључа може садржати дуплиране вредности. Међутим, комбиноване вредности из свих колона у примарном кључу морају бити јединствене.

Добар пример је случај када имате табелу са колонама `ид`, `намес` и `аге`. Када дефинишете његово ограничење примарног кључа на комбинацију `ид` и `наме`, можете имати дупле инстанце вредности `ид` или `намес`. Ипак, свака комбинација мора бити јединствена да би се избегли дупли редови. Дакле, могли бисте да имате записе са `ид=1` и `наме=Валтер`, и `аге-22“ и `ид=1`, `наме=Хенри` и `аге=27`, али не можете имати друге записе са `ид=1` и `наме=Валтер` јер комбинација није јединствена.

Ево неколико битних аспеката које треба знати:

  • Табела садржи само једно ограничење примарног кључа.
  • Примарни кључеви не могу бити дужи од 16 колона и максимална дужина од 900 знакова.
  • Индекси генерисани примарним кључевима могу повећати оне у табели. Међутим, број груписаних индекса у табели не може да пређе 1, а број негруписаних индекса у табели је ограничен на 999.
  • Када су групирани и некластери неспецификовани за кључно ограничење, кластеризовани се узимају аутоматски.
  • Све колоне декларисане у оквиру ограничења примарног кључа треба да буду дефинисане као да нису нулл. Ако то није случај, све колоне повезане у ограничењу имају своју могућност нулирања роботски подешену на ненулл.
  • Када су примарни кључеви дефинисани на кориснички дефинисаном типу колоне за заједничко време извршавања (ЦЛР), имплементација типа мора да подржава бинарни редослед.
  •   Како пуштати музику у Дисцорд-у

    Ограничења страног кључа – Преглед

    Страни кључ (ФК) подразумева колону или комбинацију неколико њих који се користе за креирање и повезивање везе између две табеле и управља подацима који се чувају у табели страног кључа.

    Референца страног кључа подразумева креирање везе између две табеле; када колона или колоне у другој табели буду референциране на колону или колоне са примарним кључем за другу табелу.

    У сценарију референце страног кључа, веза се креира између две табеле када колона или колоне које садрже примарне кључеве у табели буду референциране колонама у другој.

    У практичном случају употребе, можете имати табелу, Салес.СалесОрдерХеадер, са страним кључем који повезује другу табелу, <ем>Салес.Персон, јер постоји логичан однос између продаваца и продајних налога.

    Овде се СалесПерсонИД у колони СалесОрдерХеадер стапа са колоном примарног кључа у табели СалесПерсон. Спољни кључ табеле СалесПерсон је колона СалесПерсонИД у СалесОрдерХеадер-у.

    Овај однос дефинише правило: вредност СалесПерсонИД не може бити у вашој табели СалесОрдерХеадер ако не постоји у табели СалесПерсон.

    Табела може референцирати до 253 друге колоне и табеле као стране кључеве, алтернативно назване одлазне референце. Од 2016. године, СКЛ сервер је повећао број табела и колона које можете да референцирате у једној табели, такође познатих као долазне референце, са 253 на 10000. Међутим, повећање долази са одређеним ограничењима:

  • Референце страних кључева које прелазе 253 доступне су само за ДЕЛЕТЕ ДМЛ операције. МЕРГЕ и УПДАТЕ нису подржани.
  • Табеле са референцама страног кључа на себе имају највише 253 референце страног кључа.
  • За индексе складишта колона, табеле оптимизоване за меморију и табеле партиционисаних страних кључева, референце страног кључа су ограничене на 253.
  • Које су предности страних кључева?

    Као што је раније поменуто, ограничења страног кључа играју суштинску улогу у заштити интегритета и конзистентности података у релационој бази података. Ево анализе разлога зашто су ограничења страног кључа неопходна.

  • Референтни интегритет – Ограничења страног кључа гарантују да сваки подређени запис табеле одговара запису примарне табеле, обезбеђујући конзистентност података у обе табеле.
  • Спречавање напуштених записа – Ако избришете надређену табелу, ограничења страног кључа обезбеђују да се и ваша придружена подређена табела избрише, спречавајући случајеве напуштених записа који би могли да доведу до недоследности података.
  • Побољшане перформансе – Ограничења страног кључа повећавају перформансе упита дозвољавајући систему за управљање базом података да оптимизује упите на основу односа табела.
  •   Како заказати текстуалну поруку за касније слање

    Индекси ограничења страног кључа

    Ограничења страног кључа не стварају аутоматски одговарајуће индексе као примарни. Можете ручно креирати индексе за ограничења страног кључа; то је корисно из следећих разлога.

    • Колоне страног кључа се често користе у критеријумима придруживања када се комбинују подаци из сродних табела у упитима упарујући колоне везане за ограничење. Индекси помажу бази података у проналажењу повезаних података у страној табели.
    • Ако промените ограничења примарног кључа, она се проверавају са страним кључевима у сродним табелама.

    Није обавезно креирати индексе. И даље можете комбиновати податке из две табеле без навођења ограничења примарног и страног кључа. Међутим, додавање ограничења страног кључа оптимизује табеле и комбинује их у упит који испуњава критеријуме коришћења кључева. Ако промените ограничења примарног кључа, она се проверавају са страним у сродном кључу.

    Савети за креирање ограничења страног кључа у СКЛ-у

    Већ сте потрошили значајно време на спекулације; одговорио зашто. Хајде да померимо фокус и сузимо га на тактику за стварање ограничења страног кључа; одговорите како.

    Поље „Страни кључ“ у табели односи се на „Примарни кључ“ другог. Табела са примарним кључем је ваша надређена табела. А табела са страним кључем се зове подређена табела. Хајде да заронимо.

    Креирање страног кључа приликом креирања табеле

    Када креирате табелу, такође можете да креирате ограничење страног кључа да бисте подржали референтни интегритет. Ево како да то урадите:

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

    Код изнад креира табелу под називом ‘ордерс’ са примарним целобројним кључем ‘ордер_ид’, другим целим бројем ‘цустомер_ид’ и датумом ‘ордер_дате’. У овом случају, ограничење ФОРЕИГН КЕИ се додаје колони ‘цустомер_ид’ и упућује на ‘цустомер_ид’ у вашој табели ‘цустомерс’.

    Креирање страног кључа након креирања табеле

    Претпоставимо да сте већ креирали табелу и желите да додате ограничење страног кључа; користите наредбу `АЛТЕР ТАБЛЕ` у свом коду. Погледајте исечак кода испод.

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

    У овом случају, додали сте ограничење страног кључа ‘цустомер_ид’ колону, у табели ‘ордерс’ да бисте референцирали колону ‘цустомер_ид’ у табели ‘цустомерс’.

    Креирање страног кључа без провере постојећих података

    Када додате ограничење страног кључа у табелу, база података аутоматски проверава постојеће податке како би осигурала конзистентност са ограничењем. Међутим, ако знате да су подаци доследни и желите да додате ограничење без провере доследности, ево како то да урадите.

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

    Команда НОТ ВАЛИДАТЕ говори бази података да не проверава постојеће податке. Овај конкретан случај је од помоћи у одређеним случајевима. На пример, када имате огромне податке и желите да завршите процес валидације.

    Креирање страног кључа преко ДЕЛЕТЕ/УПДАТЕ

    Док креирате ограничења страног кључа, можете да одредите радњу која ће се предузети у случајевима када се наведени ред ажурира или брише. У овом случају, користите каскадна ограничења референтног интегритета да диктирате радње које треба предузети. То укључује:

    #1. НЕМА АКЦИЈЕ

    Као и код многих других база података, правило ‘НО АЦТИОН’ је подразумевано понашање када креирате ограничење страног кључа. То значи да се никаква радња не предузима када се наведени ред избрише или ажурира.

      Како укључити 5Г на иПхоне 11

    Датабасе Енгине покреће грешку ако је ограничење страног кључа прекршено. Међутим, ово се не препоручује јер може довести до проблема са референтним интегритетом јер ограничење страног кључа треба да се примени. Ево примера како се то ради:

    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. ЦАСЦАДЕ

    Правило ‘ЦАСЦАДЕ’ је још једна опција за акције ‘ОН ДЕЛЕТЕ’ и ‘ОН УПДАТЕ’ приликом креирања ограничења страног кључа. Када се постави, то значи да кад год се ред ажурира или избрише у надређеним табелама, наведени редови се ажурирају или бришу у складу са тим. Ова техника је моћна када се одржава референтни интегритет. Ево примера:

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

    Требало би да будете опрезни када користите ово правило, јер може изазвати нежељене последице ако се не користи пажљиво. Желите да избегнете случајно брисање превише података или креирање кружних референци. Стога, користите ову опцију само ако је потребно и са опрезом.

    Постоје нека правила о коришћењу ЦАСЦАДЕ:

    • Не можете навести ЦАСЦАДЕ ако је колона временске ознаке или део страног или референтног кључа.
    • Ако ваша табела има окидач ИНСТЕАД ОФ ДЕЛЕТЕ, не можете навести ОН ДЕЛЕТЕД ЦАСЦАДЕ.
    • Не можете навести ОН УПДАТЕ ЦАСЦАДЕ ако ваша табела има окидач ИНСТЕАД ОФ УПДАТЕ.

    #3. СЕТ НУЛЛ

    Када избришете или ажурирате одговарајући ред у надређеној табели, све вредности које чине страни кључ су подешене на нулл. Ово правило ограничења захтева да колоне страног кључа буду нуле за извршавање и не могу се навести за табеле које имају ИНСТЕАД ОФ УПДАТЕ окидаче. Ево примера како се то ради.

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

    У овом случају, поставили сте колону страног кључа ‘цустомер_ид’ у табели „поруџбине“ на нулл ако је одговарајући ред у табели „купци“ избрисан или ажуриран.

    #4. СЕТ ДЕФАУЛТ

    Овде постављате све вредности које спољни кључ чине подразумеваним под условом да се референцирани ред у надређеној табели ажурира или избрише.

    Ово ограничење се извршава ако све колоне страног кључа имају подразумеване дефиниције. Ако је колона нуллабле, њена подразумевана вредност је постављена на НУЛЛ. Имајте на уму да се ова опција не може навести за табеле са окидачима ИНСТЕАД ОФ УПДАТЕ. Ево примера:

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

    У горњем случају, поставили сте ‘цустомер_ид’ у табели „поруџбине“ на његову подразумевану вредност, што се дешава када се одговарајући ред у табели „купци“ избрише или ажурира.

    Завршне речи

    У овом водичу сте се освјежили о ограничењима примарног кључа и ископали сте ограничења страног кључа. Такође сте наишли на неколико техника за креирање ограничења страног кључа. И док постоји много начина да се креирају ограничења страног кључа, овај пост је разоткрио методе.

    И надајући се да сте схватили нове технике; нисте ограничени на њихово комбиновање. На пример, методе ограничења ЦАСЦАДЕ, СЕТ НУЛЛ, СЕТ ДЕФАУЛТ и НО АЦТИОН могу се комбиновати на табелама са референтним релацијама.

    Ако ваша табела наиђе на НО АЦТИОН, враћа се на друга правила ограничења. У другим случајевима, акција ДЕЛЕТЕ може покренути комбинацију ових правила, а правило НО АЦТИОН ће бити покренуто као последње.

    Затим погледајте СКЛ варалицу.