Առաջնային բանալիների ստեղծում: Սահմանափակում PRIMARY KEY Առաջնային բանալին շարահյուսություն

Այս հոդվածում մենք կփորձենք դիտարկել այն ամենը, ինչ կապված է բանալիների հետ SQL:ինչի՞ համար են ստեղների ստեղծումն ու սահմանափակումները: Ընդհանրապես ձանձրալի կլինի 😉

Այսօրվա ծրագիրը հետևյալն է.

Հարաբերական տվյալների բազայի տեսության մեջ - բանալիներՍրանք որոշակի սուբյեկտներ են, որոնք ստեղծված են որոշակի սահմանափակումներ սահմանելու համար, որոնք պահպանում են տվյալների ամբողջականությունն ու հասանելիությունը տվյալների բազայի աղյուսակներում:

Պարզ խոսքերով, բանալիները ներսում են sqlստեղծվում են սյունակի համար լրացուցիչ գործառույթներ ցույց տալու համար: Լինի դա եզակիությունը, թե այն, որ սյունակը հղում է կատարում մեկ այլ աղյուսակի (օտար բանալին):

Առաջնային բանալին

Սյունակը, որը պետք է եզակի լինի տվյալների բազայում, նշվում է հիմնական բանալիով: Հիմնական բանալին կամ հիմնական բանալին նշանակում է, որ հիմնական բանալին սյունակի արժեքը չի կարող կրկնվել աղյուսակում: Այսպիսով, այս ստեղնը թույլ է տալիս եզակիորեն նույնականացնել աղյուսակի գրառումը՝ առանց վախենալու, որ սյունակի արժեքը կկրկնվի: Պարզապես օրինակ. ենթադրենք, որ դուք ունեք օգտվողների աղյուսակ: Այս աղյուսակը ունի հետևյալ դաշտերը՝ լրիվ անուն, ծննդյան տարեթիվ, հեռախոս: Ինչպե՞ս ճանաչել օգտագործողին: Չի կարելի վստահել այնպիսի պարամետրեր, ինչպիսիք են լրիվ անունը և հեռախոսահամարը: Ի վերջո, մենք կարող ենք ունենալ մի քանի օգտատեր ոչ միայն նույն ազգանունով, այլև նույն անուն-ազգանունով։ Հեռախոսահամարը կարող է փոխվել ժամանակի ընթացքում, և հեռախոսահամարն ունեցող օգտատերը կարող է չլինել մեր տվյալների բազայում:

Ահա թե ինչու է հայտնագործվել առաջնային բանալին: Մի անգամ նշանակվեց եզակի նույնացուցիչ և վերջ: IN mySqlորի օրինակով կատարում ենք դաշտի բոլոր օրինակները AUTO_INCREMENTչի կարող սահմանվել, քանի դեռ չեք նշել, որ սա հիմնական բանալին է:

Չեմ կարծում, թե արժե նշել, որ որպես հիմնական բանալի նշված դաշտը չի կարող դատարկ լինել գրառում ստեղծելիս։

Արտաքին բանալի ( օտար բանալի)

Էլի կա՞ արտաքին բանալի (օտար բանալի) Այն նաև կոչվում է հղում։ Այն անհրաժեշտ է աղյուսակները միմյանց կապելու համար:

Եթե ​​նայեք վերևի նկարին, ապա արտաքին բանալին կլինի կոշիկների աղյուսակի մատակարարի դաշտը: Սովորաբար, աղյուսակ ստեղծելիս դուք նշում եք եզակի ամբողջ արժեքների սյունակ: Ինչպես մենք դա արեցինք, երբ ստեղծեցինք աղյուսակը մատակարար

Սյունակ մատակարարի_իդյուրաքանչյուր մուտքի համար եզակի կլինի: Դրա արժեքը կհայտնվի սյունակում մատակարարաղյուսակում կոշիկներ.Ես առաջարկում եմ անմիջապես դիտել մի օրինակ, թե ինչպես է ստեղծվում արտաքին բանալին:

Արտասահմանյան բանալի ստեղծում

ստեղծել սեղանի կոշիկներ (shoes_id int auto_increment առաջնային բանալին, վերնագրի տեքստը, չափը int, գինը float, count int, տեսակ varchar(30), մատակարար int, օտար բանալի (մատակարար) հղումներ մատակարար (supplier_id));

Ինչպես տեսնում եք վերը նշված օրինակում, օտարերկրյա բանալի ստեղծելու շարահյուսությունը բավականին պարզ է: Դուք պետք է դաշտ ավելացնեք աղյուսակում, այնուհետև հայտարարեք այս դաշտը որպես օտար բանալի և նշեք, թե որտեղ է այն վերաբերելու: Այս դեպքում դաշտը մատակարարկվերաբերի ոլորտին մատակարարի_իդաղյուսակում մատակարար

Կոմպոզիտային բանալի (կոմպոզիտային բանալի)

Ինչ վերաբերում է կոմպոզիտային բանալիներին, ապա դրանք աղյուսակի մի քանի հիմնական բանալիներ են: Այսպիսով, ստեղծելով կոմպոզիտային բանալի, գրառման եզակիությունը կստուգվի այն դաշտերով, որոնք համակցված են այս բանալիում:

Կան իրավիճակներ, երբ աղյուսակում տեղադրելու ժամանակ անհրաժեշտ է ստուգել եզակիության գրառումը՝ օգտագործելով միանգամից մի քանի դաշտ: Ահա թե ինչու է հորինվել կոմպոզիտային բանալին: Օրինակ, ես կստեղծեմ պարզ աղյուսակ կոմպոզիտային բանալի շարահյուսությունը ցույց տալու համար.

Ստեղծել աղյուսակի թեստ (դաշտ_1 ինտ, դաշտ_2 տեքստ, դաշտ_3 բիգինտ, հիմնական բանալի (դաշտ_1, դաշտ_3));

Վերոնշյալ օրինակում երկու դաշտերը համակցված են կոմպոզիտային բանալիով, և այս նույն դաշտերով աղյուսակում գրառումներ չեն լինի:

Դա բոլոր բանալիների մասին է SQL.Այս փոքրիկ ձեռնարկը նախապատրաստություն է հոդվածի համար, որտեղ մենք մանրամասնորեն կանդրադառնանք, թե ինչպես կարելի է համատեղել աղյուսակները, որպեսզի նրանք կազմեն մեկ տվյալների բազա:

ԴԱ ԿԻՐԱՌՈՒՄ Է. SQL Server (2016 թվականից) Azure SQL DatabaseAzure SQL Data WarehouseԶուգահեռ տվյալների պահեստ

Դուք կարող եք հիմնական բանալի սահմանել SQL Server 2016-ում՝ օգտագործելով SQL Server Management Studio կամ Transact-SQL: Առաջնային բանալու ստեղծումը ավտոմատ կերպով ստեղծում է համապատասխան եզակի կլաստերային կամ ոչ կլաստերային ինդեքս:

Այս բաժնում

    Նախքան սկսելը, կատարեք հետևյալ քայլերը.

    Սահմանափակումներ

    Անվտանգություն

    Ստեղծեք առաջնային բանալի՝ օգտագործելով՝

    SQL Server Management Studio

Սահմանափակումներ

    Աղյուսակը կարող է ունենալ միայն մեկ հիմնական բանալի սահմանափակում:

    ՀԻՄՆԱԿԱՆ ԲԱՆԱԼԻ սահմանափակմամբ բոլոր սյունակները չպետք է զրոյական լինեն: Եթե ​​զրոյականությունը նշված չէ, ապա NOT NULL դրոշը սահմանվում է PRIMARY KEY սահմանափակմամբ բոլոր սյունակների համար:

Անվտանգություն

Թույլտվություններ

Առաջնային բանալիով նոր աղյուսակ ստեղծելու համար անհրաժեշտ է CREATE TABLE թույլտվություն տվյալների բազայում և ALTER թույլտվություն այն սխեմայի վրա, որում ստեղծվել է աղյուսակը:

Գոյություն ունեցող աղյուսակում առաջնային բանալի ստեղծելու համար անհրաժեշտ է ALTER թույլտվություն սեղանի վրա:

Առաջնային բանալիի ստեղծում

    Object Explorer-ում աջ սեղմեք աղյուսակի վրա, որին ցանկանում եք եզակի սահմանափակում ավելացնել և ընտրել Կոնստրուկտոր.

    IN Սեղանի դիզայներԿտտացրեք տողերի ընտրիչը տվյալների բազայի սյունակի համար, որը ցանկանում եք սահմանել որպես հիմնական բանալի: Բազմաթիվ սյունակներ ընտրելու համար սեղմեք և պահեք CTRL ստեղնը և սեղմեք մնացած սյունակների տողերի ընտրիչները:

    Աջ սեղմեք Սյունակի տողերի ընտրիչի վրա և ընտրեք Սահմանել առաջնային բանալին.

Բանալին աղբյուրի սյունակը նույնականացվում է համապատասխան տողերի ընտրիչի հիմնական բանալին խորհրդանիշով:

Եթե ​​առաջնային բանալին բաղկացած է մեկից ավելի սյունակից, ապա մեկ սյունակում կարող են լինել կրկնօրինակ արժեքներ, սակայն հիմնական բանալու բոլոր սյունակներից արժեքների բոլոր համակցությունները պետք է եզակի լինեն:

Երբ դուք սահմանում եք կոմպոզիտային բանալի, հիմնական բանալիում սյունակների հերթականությունը նույնն է, ինչ աղյուսակում ներկայացված սյունակների հերթականությունը: Այնուամենայնիվ, հիմնական բանալին ստեղծելուց հետո սյունակների հերթականությունը կարող է փոխվել: Լրացուցիչ տեղեկությունների համար տե՛ս.

Ստեղծեք հիմնական բանալի գոյություն ունեցող աղյուսակում

    IN Օբյեկտի Explorer

    Ստեղծեք հարցում.

    Կատարել. Այս օրինակը առաջնային բանալին է ստեղծում TransactionID սյունակում:

    ՕԳՏԱԳՈՐԾԵԼ AdventureWorks2012;ԳՆԱՑԵՔ ALTER TABLE Production.TransactionHistoryArchive ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID ԱՌԱՆՁՆԱԿԱՆ ԲԱՆԱԼԸ ԿԼՅՈՒՍՏԵՐ (TransactionID);ԳՆԱՑԵՔ

Ստեղծեք հիմնական բանալին նոր աղյուսակում

    IN Օբյեկտի ExplorerՄիացեք տվյալների բազայի շարժիչի օրինակին:

    Ստանդարտ վահանակում ընտրեք Ստեղծեք հարցում.

    Պատճենեք հետևյալ օրինակը հարցման պատուհանում և սեղմեք կոճակը Կատարել. Այս օրինակը ստեղծում է աղյուսակ և սահմանում է հիմնական բանալին TransactionID սյունակի համար:

    ՕԳՏԱԳՈՐԾԵԼ AdventureWorks2012;ԳՆԱՑԵՔ CREATE TABLE Production.TransactionHistoryArchive1 (TransactionID int NOT NULL , CONSTRAINT PK_TransactionHistoryArchive_TransactionID ԱՌԱՆՁՆԱԿԱՆ ԲԱՆԱԼԸ ԿԼԱՍՏԵՐՎԱԾ (TransactionID));ԳՆԱՑԵՔ

    Լրացուցիչ տեղեկությունների համար տես բաժինները և .

Ձեր ուշադրությանն եմ ներկայացնում SQL սկսնակների համար հոդվածի 2-րդ մասի անվճար թարգմանությունը

Յուրաքանչյուր վեբ ծրագրավորողի համար կարևոր է տվյալների բազաների հետ շփվելու հնարավորությունը: Երկրորդ մասում շարունակում ենք լեզուն սովորել SQLև կիրառել մեր հմտությունները DBMS-ում MySQL. Մենք կուսումնասիրենք ինդեքսները, տվյալների տեսակները և ավելի բարդ հարցումները:

Այն, ինչ ձեզ հարկավոր է

Խնդրում ենք ծանոթանալ առաջին մասի «Ինչ է պետք» բաժինը, որը գտնվում է.

Եթե ​​ցանկանում եք այս օրինակները գործարկել ձեր սերվերի վրա, արեք հետևյալը.

  1. Բացեք ձեր վահանակը MySQLև մուտք գործեք:
  2. Ստեղծեք «my_first_db» տվյալների բազան՝ օգտագործելով հարցումը ՍՏԵՂԾԵԼ, եթե այն նախկինում չի ստեղծվել։
  3. Փոխեք բազան՝ օգտագործելով օպերատորը ՕԳՏԱԳՈՐԾԵԼ.

Ցուցանիշներ

Ինդեքսները (կամ ստեղները) սովորաբար օգտագործվում են տվյալներ ընտրող հայտարարությունների կատարման արագությունը բարելավելու համար (օրինակ՝ ԸՆՏՐԵԼ) աղյուսակներից։

Դրանք տվյալների բազայի լավ ճարտարապետության կարևոր մասն են, դժվար է դրանք դասակարգել որպես «օպտիմալացում»: Սովորաբար ինդեքսները սկզբում ավելացվում են, բայց հետագայում կարող են ավելացվել՝ օգտագործելով հարցում ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿ.

Տվյալների բազայի սյունակների ինդեքսավորման հիմնական պատճառներն են.

  • Գրեթե յուրաքանչյուր աղյուսակ ունի հիմնական բանալին ( ՀԻՄՆԱԿԱՆ ԲԱՆԱԼ), սովորաբար սա «id» սյունակն է:
  • Եթե ​​սյունակը նախատեսված է եզակի արժեքներ պահելու համար, այն պետք է ունենա եզակի ինդեքս ( ՅՈՒՐԱՔԱՆԱԿԱՆ).
  • Եթե ​​Ձեզ անհրաժեշտ է հաճախակի որոնում սյունակի վրա (օգտագործելով այն նախադասության մեջ ՈՐՏԵՂ), այն պետք է ունենա կանոնավոր ցուցանիշ ( ԻՆԴԵՔՍ).
  • Եթե ​​սյունակն օգտագործվում է մեկ այլ աղյուսակի հետ առնչվելու համար, հնարավորության դեպքում այն ​​պետք է լինի օտար բանալի ( ՕՏԱՐ ԲԱՆԱԼԻ) կամ սովորական ցուցանիշ:

Հիմնական բանալի (PRIMARY KEY)

Գրեթե բոլոր աղյուսակներն ունեն առաջնային բանալի, սովորաբար ամբողջ թիվ՝ ավտոմատ ավելացման տարբերակով ( AUTO_INCREMET).

Ենթահղումները հաճախ առաջացնում են կատարողականի զգալի անկում, այնպես որ օգտագործեք դրանք զգուշությամբ:

UNION. Տվյալների համադրում

Օգտագործելով հարցում ՄԻՈՒԹՅՈՒՆ, կարող եք համատեղել բազմաթիվ SELECT հարցումների արդյունքները:

Այս օրինակը միավորում է «N» տառով սկսվող վիճակները ավելի մեծ բնակչություն ունեցող նահանգների հետ.

(SELECT * FROM վիճակներ WHERE անունը LIKE «n%») UNION (SELECT * FROM վիճակներից WHERE բնակչություն > 10000000);

Խնդրում ենք նկատի ունենալ, որ Նյու Յորքը մեծ նահանգ է և սկսվում է «N» տառով: Սակայն ցուցակում այն ​​հայտնվում է միայն մեկ անգամ, քանի որ կրկնօրինակները հանվում են ինքնաբերաբար:

Նաև խնդրանքների գեղեցկությունը ՄԻՈՒԹՅՈՒՆայն է, որ դրանք կարող են օգտագործվել տարբեր աղյուսակների հետ հարցումները միավորելու համար:

Օրինակ, մենք ունենք սեղանների աշխատակիցներ (աշխատակիցներ), մենեջերներ (մենեջերներ) և հաճախորդներ (հաճախորդներ): Յուրաքանչյուր աղյուսակ ունի էլփոստի հասցեով դաշտ: Եթե ​​մենք ցանկանում ենք ստանալ բոլոր էլփոստի հասցեները մեկ հարցումով, կարող ենք անել հետևյալը.

(SELECT email FROM-ի աշխատակիցներից) UNION (SELECT email FROM մենեջերներից) UNION (SELECT email FROM customers WHERE subscribed = 1);

Լրացնելով այս հարցումը՝ մենք կստանանք բոլոր աշխատակիցների և ղեկավարների փոստային հասցեները, և միայն այն հաճախորդների, ովքեր բաժանորդագրված են փոստային ցուցակին:

INSERT Շարունակություն

Մենք արդեն խոսել ենք խնդրանքի մասին ՆԵՐԴՐԵԼնախորդ հոդվածում։ Այժմ, երբ մենք նայեցինք ինդեքսներին, կարող ենք խոսել լրացուցիչ հարցումների հնարավորությունների մասին ՆԵՐԴՐԵԼ.

ՆԵՐԴՐԵՔ ... ԿՐԿՆՈՐԴ ԲԱՆԱԼԻ ԹԱՐՄԱՑՄԱՆ ՄԱՍԻՆ

Սա ամենից հաճախ օգտագործվող պայմանն է: Սկզբում հարցումը փորձում է կատարել ՆԵՐԴՐԵԼ, և եթե հարցումը ձախողվի կրկնօրինակ առաջնայինի պատճառով ( ՀԻՄՆԱԿԱՆ ԲԱՆԱԼ) կամ եզակի ( ԵՍՔԻ ԲԱՆԱԼ) բանալին, ապա հարցումը կատարվում է ԹԱՐՄԱՑՆԵԼ.

Եկեք նախ ստեղծենք թեստային աղյուսակ:

Սա սննդի պահպանման սեղան է։ «Պաշար» դաշտը պահպանում է պահեստում առկա ապրանքների քանակը:

Հիմա եկեք փորձենք աղյուսակի մեջ մտցնել գոյություն ունեցող արժեք և տեսնենք, թե ինչ է տեղի ունենում:

Մենք սխալ ենք ստացել։

Ենթադրենք, մենք ստացել ենք նոր հացաբուլկեղեն և ցանկանում ենք թարմացնել տվյալների բազան, բայց մենք չգիտենք, թե արդյոք տվյալների բազայում արդեն գրառում կա: Մենք կարող ենք նախ ստուգել ձայնագրության առկայությունը, այնուհետև գործարկել մեկ այլ ներդիր հարցում: Կամ դուք կարող եք ամեն ինչ անել մեկ պարզ հարցման մեջ.

Աշխատում է նույնը, ինչ ՆԵՐԴՐԵԼ, բայց մեկ կարևոր հատկանիշով. Եթե ​​գրառումն արդեն գոյություն ունի, այն ջնջվում է, և այնուհետև հարցումը կատարվում է ՆԵՐԴՐԵԼ, և մենք սխալի հաղորդագրություն չենք ստանա:

Խնդրում ենք նկատի ունենալ, քանի որ տեղադրվում է բոլորովին նոր տող, ինքնաաճացման դաշտը մեծանում է մեկով:

Սա առաջին հերթին կրկնօրինակման սխալների առաջացումը կանխելու միջոց է՝ հավելվածն աշխատեցնելու համար: Հնարավոր է, որ ձեզ անհրաժեշտ լինի տեղադրել նոր տող առանց որևէ սխալ տպելու, նույնիսկ եթե կրկնօրինակում կա:

Սխալներ կամ թարմացված տողեր չկան:

Տվյալների տեսակները

Աղյուսակի յուրաքանչյուր սյունակ պետք է լինի որոշակի տեսակ: Մենք արդեն օգտագործել ենք տեսակներ INT, ՎԱՐՉԱՐԵվ DATE, բայց մանրամասն չանդրադառնար դրանց վրա։ Մենք նաև կանդրադառնանք տվյալների ևս մի քանի տեսակների:

Սկսենք թվային տվյալների տեսակներից: Ես դրանք բաժանում եմ երկու խմբի՝ ամբողջ թվեր և կոտորակներ:

Ամբողջական

Ամբողջ թվով սյունակում կարող են պահպանվել միայն բնական թվեր (առանց տասնորդական կետի): Լռելյայն դրանք կարող են լինել դրական կամ բացասական: Եթե ​​ընտրված է տարբերակը ՉՍՏՈՐԱԳՐՎԱԾ, ապա միայն դրական թվեր կարող են պահպանվել։

MySQL-ն աջակցում է տարբեր չափերի և միջակայքերի 5 տեսակի ամբողջ թվերի.

Կոտորակային թվային տվյալների տեսակները

Այս տեսակները կարող են պահել կոտորակային թվեր՝ FLOAT, DOUBLE և DECIMAL:

FLOAT-ը վերցնում է 4 բայթ, DOUBLE-ը՝ 8 բայթ և նման է նախորդին: DOUBLE-ն ավելի ճշգրիտ է:

DECIMAL(M,N) ունի փոփոխական ճշգրտություն: M-ը թվանշանների առավելագույն թիվն է, N-ը տասնորդական կետից հետո թվանշանների թիվն է:

Օրինակ, DECIMAL(13,4)-ն ունի 9 տասնորդական և 4 տասնորդական տեղ:

Լարային տվյալների տեսակները

Դուք կարող եք կռահել անունից, որ նրանք կարող են պահել տողեր:

CHAR(N)-ը կարող է պահել N նիշ և ունի ֆիքսված արժեք: Օրինակ, CHAR(50)-ը միշտ պետք է պարունակի 50 նիշ մեկ տողում ամբողջ սյունակում: Առավելագույն հնարավոր արժեքը 255 նիշ է

VARCHAR(N)-ն աշխատում է նույնը, բայց միջակայքը կարող է տարբեր լինել: N - նշանակում է առավելագույն արժեքը: Եթե ​​պահված տողը N նիշից կարճ է, ապա այն ավելի քիչ տեղ կզբաղեցնի կոշտ սկավառակի վրա: Առավելագույն հնարավոր արժեքը 65535 նիշ է:

Երկար լարերի համար առավել հարմար են TEXT տիպի տարբերակները։ TEXT-ն ունի 65535 նիշի սահման, MEDIONTEXT-ը՝ 16,7 միլիոն, իսկ LONGTEXT-ը՝ 4,3 միլիարդ նիշ: MySQL-ը սովորաբար դրանք պահում է սերվերի առանձին պահեստներում, որպեսզի հիմնական պահեստը հնարավորինս փոքր և արագ լինի:

.

Եզրակացություն

Շնորհակալություն հոդվածը կարդալու համար: SQL-ը կարևոր լեզու և գործիք է վեբ մշակողների զինանոցում:

Հիմնական բանալին աղյուսակի դաշտ է, որը եզակի կերպով նույնականացնում է տվյալների բազայի աղյուսակի յուրաքանչյուր տող/գրառում: Հիմնական բանալիները պետք է պարունակեն եզակի արժեքներ: Հիմնական բանալի սյունակը չի կարող արժեք ունենալ:

Աղյուսակը կարող է ունենալ միայն մեկ հիմնական բանալի, որը կարող է բաղկացած լինել մեկ կամ մի քանի դաշտից: Երբ մի քանի դաշտեր օգտագործվում են որպես հիմնական բանալի, դրանք կոչվում են կոմպոզիտային բանալի:

Եթե ​​աղյուսակը ունի հիմնական բանալի սահմանված ցանկացած դաշտ(ներում), ապա դուք չեք կարող ունենալ նույն արժեք ունեցող երկու գրառում այդ դաշտ(ների) համար:

Նշում– Դուք կարող եք օգտագործել այս հասկացությունները տվյալների բազայի աղյուսակներ ստեղծելիս:

Առաջնային բանալիի ստեղծում

Ահա շարահյուսությունը՝ ID հատկանիշը Հաճախորդների աղյուսակում որպես հիմնական բանալի սահմանելու համար:

ՍՏԵՂԾԵՔ ՍԵՂԱՆԱԿԻ ՀԱՃԱԽՈՐԴՆԵՐ (ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ՀԱՍՑԵԻ ՆՄԱՆ (25) , ԱՇԽԱՏԱՎԱՐՁԻ ՏԱՍՆԱԿԱՆ (18, 2), ԱՌԱՋՆԱԿԱՆ ԲԱՆԱԼ (ID));

«ID» սյունակի վրա առաջնային բանալու սահմանափակում ստեղծելու համար, երբ արդեն գոյություն ունի CUSTOMERS աղյուսակը, օգտագործեք հետևյալ SQL շարահյուսությունը.

ՓՈՓՈԽԵԼ ՍԵՂԱՆԻ ՀԱՃԱԽՈՐԴՆԵՐԸ ԱՎԵԼԱՑՆԵՆ ՀԻՄՆԱԿԱՆ ԲԱՆԱԼԻՆ (ID);

Նշում

Եթե ​​դուք օգտագործում եք ALTER TABLE հայտարարությունը առաջնային բանալի ավելացնելու համար, ապա հիմնական բանալին (սյունակները) պետք է արդեն հայտարարված լինեն որպես NULL արժեքներ չպարունակող (եթե աղյուսակը ստեղծվել է առաջինը):

Բազմաթիվ սյունակների վրա առաջնային բանալի սահմանելու համար օգտագործեք ստորև բերված SQL շարահյուսությունը.

ՍՏԵՂԾԵՔ ՍԵՂԱՆԱԿԻ ՀԱՃԱԽՈՐԴՆԵՐ (ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ՀԱՍՑԵԻ ՆՇԱՆԱԿԸ (25) , ԱՇԽԱՏԱՎԱՐՁԻ ՏԱՍՆԱԿԱՆ (18, 2), ՀԻՄՆԱԿԱՆ ԲԱՆԱԼ (ID, NAME));

ID և NAME սյունակներում առաջնային բանալու սահմանափակում ստեղծելու համար, երբ արդեն գոյություն ունի CUSTOMERS աղյուսակը, օգտագործեք հետևյալ SQL շարահյուսությունը:

ՓՈՓՈԽԵԼ ՍԵՂԱՆԻ ՀԱՃԱԽՈՐԴՆԵՐԸ ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿՈՒՄ PK_CUSTID ՀԻՄՆԱԿԱՆ ԲԱՆԱԼԻՆ (ID, NAME);

Հիմնական բանալի ջնջում

Դուք կարող եք մաքրել հիմնական բանալիների սահմանափակումները աղյուսակից՝ օգտագործելով ստորև տրված շարահյուսությունը:

ՓՈԽՆԵԼ ՍԵՂԱՆԻ ՀԱՃԱԽՈՐԴՆԵՐԸ ՆԿԱՏՈՒՄ ԵՆ ՀԻՄՆԱԿԱՆ ԲԱՆԱԼԻՆ;

Տվյալների բազայի նախագծման գործընթացում որոշումներ են կայացվում այն ​​մասին, թե որ աղյուսակները պետք է ներառվեն տվյալների բազայում, ինչ անուններ կունենան դրանք (իդենտիֆիկատորներ), ինչ տեսակի տվյալներ կպահանջվեն աղյուսակները կառուցելու համար և ինչ օգտատերերին հասանելի կլինի դրանցից յուրաքանչյուրը: . Բացի այդ, աղյուսակների արդյունավետ ստեղծման համար անհրաժեշտ է պատասխանել հետևյալ հարցերին.

  • Ինչ տեսակի և չափի սյունակներ կկազմեն աղյուսակներից յուրաքանչյուրը, և ի՞նչ անուններ պետք է ընտրել աղյուսակի սյունակների համար:
  • Ո՞ր սյունակները կարող են պարունակել NULL արժեք:
  • Կօգտագործվե՞ն դրանք։ ամբողջականության սահմանափակումներ, լռելյայն արժեքներ և կանոններ սյունակների համար:
  • Արդյո՞ք անհրաժեշտ է սյունակների ինդեքսավորում, ի՞նչ տեսակի ինդեքսներ կկիրառվեն կոնկրետ սյունակների վրա:
  • Որ սյունակները կներառվեն հիմնական և արտաքին բանալիներում:

MS SQL Server միջավայրում աղյուսակներ ստեղծելու համար օգտագործեք հրամանը.

<определение_таблицы>::= ՍՏԵՂԾԵՔ ՍԵՂԱՆԱԿ [ տվյալների բազայի_անուն.[սեփականատեր]: | սեփականատեր. ]սեղանի_անուն (<элемент_таблицы>[,...n])

<элемент_таблицы> ::= {<определение_столбца>} | <имя_столбца>ԱՍ<выражение> | <ограничение_таблицы>

Որպես կանոն, աղյուսակի (dbo) սեփականատերը այն մարդն է, ով ստեղծել է այն:

<Выражение>սահմանում է արժեքը հաշվարկված սյունակ. Հաշվարկված սյունակներ- դրանք վիրտուալ սյունակներ են, այսինքն՝ դրանք ֆիզիկապես չեն պահվում աղյուսակում և հաշվարկվում են՝ օգտագործելով նույն աղյուսակի սյունակների արժեքները: համար արտահայտության մեջ հաշվարկված սյունակկարող են լինել կանոնավոր սյունակների անուններ, հաստատուններ և ֆունկցիաներ, որոնք կապված են մեկ կամ մի քանի օպերատորների կողմից: Ենթհարցերը չեն կարող մասնակցել նման արտահայտությանը։ Հաշվարկված սյունակներկարող է ներառվել SELECT կետում, երբ նշում է հարցման արդյունքում վերադարձվող սյունակների ցանկը: Հաշվարկված սյունակներչի կարող ներառվել օտարերկրյա բանալիում, դրանց համար լռելյայն արժեքները չեն օգտագործվում: Բացի այդ, հաշվարկված սյունակներչի կարող մասնակցել INSERT և DELETE գործողություններին:

<определение_столбца>::= (սյունակի_անուն<тип_данных>) [ [ Կանխադրված<выражение>] | [ ԻՆՔՆՈՒԹՅՈՒՆ (սկիզբ, քայլ) ]]] [<ограничение_столбца>][...n]]

Սյունակի սահմանման մեջ ուշադրություն դարձրեք IDENTITY պարամետրին, որը ցույց է տալիս, որ համապատասխան սյունակը կլինի հաշվիչի սյունակ. Այս հատկությամբ միայն մեկ սյունակ կարող է սահմանվել յուրաքանչյուր աղյուսակի համար: Դուք կարող եք լրացուցիչ նշել սկզբնական արժեքը և ավելացման քայլը: Եթե ​​նշված արժեքները նշված չեն, երկուսն էլ լռելյայն են 1: Եթե NOT FOR REPLICATION-ի համար նշված է IDENTITY բանալի բառով, ապա սերվերը ավտոմատ կերպով արժեքներ չի ստեղծի այդ սյունակի համար, այլ թույլ կտա կամայական արժեքներ տեղադրել: սյունակը։

Օգտագործված սահմանափակումներն են սյունակի սահմանափակումներըԵվ սեղանի սահմանափակումներ. Նրանց տարբերությունն այն է սյունակի սահմանափակումվերաբերում է միայն կոնկրետ ոլորտին, և սեղանի սահմանափակում- մեկ կամ մի քանի դաշտերի խմբերին:

<ограничение_столбца>::= [ CONSTRAINT constraintname ] ( [ NULL | NOT NULL ] | [ (ՀԻՄՆԱԿԱՆ ԲԱՆԱԼ | ՅՈՒՆԱԿԱՆ ) [ CLUSTERED | NONCLUSTERED ] [ WITH FILLFACTOR=fillfactor ] [ ON (ֆայլի խմբի անունը | DEFAULT ) [REFORE ]]] table_genus_name [(column_name_table_genus) ] [ ՋՆՋԵԼՈՒ ՄԻՋ (ԿԱՍԿԱԴ | ՈՉ ԳՈՐԾՈՂՈՒԹՅԱՆ) ] [ ԹԱՐՄԱՑՄԱՆ ՄԱՍԻՆ (ԿԱՍԿԱԴ | ՈՉ ԳՈՐԾՈՂՈՒԹՅԱՆ) ] [ ՉԻ ԿՐԿՆԵԼՈՒ ՀԱՄԱՐ ]] | ՍՏՈՒԳԵԼ [ ՈՉ ԿՐԿՆԵԼՈՒ ՀԱՄԱՐ ](<лог_выражение>) } <ограничение_таблицы>::= ( [ (ՀԻՄՆԱԿԱՆ ԲԱՆԱԼ | ԵԶԱՏԱԿԱՆ ) [ ԿԼԱՍՏԵՐՎԱԾ | ՈՉ ԿԼՅՈՒՍՏԵՐ ] ((սյունակի_անունը [,...n])) ] |ՕՏԱՐ ԲԱՆԱԼԻ[(սյունակի_անունը [,...n])] ՀԻՄՆԱԿԱՆՆԵՐ աղյուսակի_անունը [(սյունակի_անունը table_gen [ ,...n])] [ՋՆՋԵԼՈՒ ՄԱՍԻՆ (ԿԱՍԿԱԴ | ՈՉ ԳՈՐԾՈՂՈՒԹՅԱՆ) ] [ ԹԱՐՄԱՑՄԱՆ ՄԱՍԻՆ (ԿԱՍԿԱԴ | ՈՉ ԳՈՐԾՈՂՈՒԹՅԱՆ)] | ՉԻ ԿՐԿՆԵԼՈՒ ՀԱՄԱՐ] | ՍՏՈՒԳԵԼ [ՉԻ ԿՐԿՆԵԼՈՒ ՀԱՄԱՐ] (տրամաբանական արտահայտություն)

Դիտարկենք ներկայացված նմուշների անհատական ​​պարամետրերը, որոնք կապված են սահմանափակումների հետ տվյալների ամբողջականությունը. Ամբողջականության սահմանափակումներգերակայություն ունենալ գործարկիչների, կանոնների և լռելյայնների նկատմամբ: TO ամբողջականության սահմանափակումներառնչվում են առաջնային բանալիների սահմանափակումՀԻՄՆԱԿԱՆ ԲԱՆԱԼ արտաքին բանալիների սահմանափակումԱՐՏԱՔԻՆ ԲԱՆԱԼ, ՅՈՒՐԱՔԱՆԱԿԱՆ սահմանափակում, NULL սահմանափակում, CHECK սահմանափակում:

Առաջնային բանալու սահմանափակում (PRIMARY KEY)

Աղյուսակը սովորաբար ունի սյունակ կամ սյունակների համակցություն, որոնց արժեքները եզակիորեն նույնացնում են աղյուսակի յուրաքանչյուր տողը: Այս սյունակը (կամ սյունակները) կոչվում է առաջնային բանալինսեղան և անհրաժեշտ է դրա ամբողջականությունն ապահովելու համար: Եթե ​​առաջնային բանալին պարունակում է մեկից ավելի սյունակ, ապա մեկ սյունակի արժեքները կարող են կրկնօրինակվել, բայց բոլոր սյունակների արժեքների ցանկացած համակցություն: առաջնային բանալինպետք է լինի եզակի:

Ստեղծելիս առաջնային բանալին SQL Server-ը ինքնաբերաբար ստեղծում է եզակի ինդեքս սյունակների վրա, որոնք հիմնական բանալու մաս են կազմում: Այն արագացնում է այս սյունակների տվյալների հասանելիությունը, երբ օգտագործվում է առաջնային բանալինհարցումներում։

Աղյուսակը կարող է ունենալ միայն մեկ PRIMARY KEY սահմանափակում, և հիմնական բանալիում ներառված սյունակներից ոչ մեկը չի կարող լինել NULL: Երբ փորձում եք օգտագործել այն որպես առաջնային բանալինսյունակ (կամ սյունակների խումբ), որի համար հիմնական հիմնական սահմանափակումներըչեն կատարվում, առաջնային բանալին չի ստեղծվի, և համակարգը կցուցադրի սխալի հաղորդագրություն:

Քանի որ PRIMARY KEY սահմանափակումն ապահովում է տվյալների եզակի լինելը, այն հաճախ սահմանվում է հաշվիչ սյուներ. Ստեղծագործություն ամբողջականության սահմանափակումներՀԻՄՆԱԿԱՆ ԲԱՆԱԼԸ հնարավոր է ինչպես ստեղծման ժամանակ, այնպես էլ երբ փոխելով սեղանը. Նշանակումներից մեկը առաջնային բանալինդրույթն է հղման ամբողջականությունըտվյալներ մի քանի աղյուսակներից: Բնականաբար, դա կարող է իրականացվել միայն այլ աղյուսակներում համապատասխան արտաքին բանալիներ սահմանելու միջոցով:

ԱՐՏԱՔԻՆ ՀԻՄՆԱԿԱՆ ՍԱՀՄԱՆԱՓԱԿՈՒՄ

Արտաքին բանալիների սահմանափակումպահպանման հիմնական մեխանիզմն է հղման ամբողջականությունըՀարաբերական տվյալների բազայի աղյուսակների միջև: «FOREIGN KEY» պարամետրում որպես օտար բանալի նշված երեխայի աղյուսակի սյունակը օգտագործվում է դրանում գտնվող մայր աղյուսակի սյունակին հղում տալու համար: առաջնային բանալին. Մայր աղյուսակի անվանումը և դրա սյունակները առաջնային բանալիննշված են Հղումներ կետում: Որպես օտար բանալի սահմանվող սյունակներում տվյալները կարող են ունենալ միայն նույն արժեքները, ինչ դրանց հետ կապված սյունակներում առաջնային բանալինծնողական սեղան. Անհրաժեշտ չէ, որ սյունակների անունները համընկնեն երեխայի և ծնողների աղյուսակները կապելու համար: Առաջնային բանալին կարող է սահմանվել մեկ անուն ունեցող սյունակի վրա, մինչդեռ սյունակը, որը ենթակա է ԱՐՏԱՔԻՆ ԲԱՆԱԼԻ սահմանափակման, կարող է ունենալ բոլորովին այլ անուն: Միակ պահանջն այն է, որ սյունակները համապատասխանեն տվյալների տեսակին և չափին:

Առաջնային բանալին կարող է հղվել ոչ միայն այլ աղյուսակների սյունակներով, այլև այն սյունակներով, որոնք գտնվում են նույն աղյուսակում, ինչ հենց առաջնային բանալին. սա թույլ է տալիս ստեղծել ռեկուրսիվ կառուցվածքներ:

Օտար բանալին կարող է կապված լինել ոչ միայն առաջնային բանալինմեկ այլ սեղան. Այն կարող է սահմանվել երկրորդ աղյուսակի ՅՈՒՆԱԿԱՆ սյունակների կամ ցանկացած այլ սյունակների համար, սակայն աղյուսակները պետք է լինեն նույն տվյալների բազայում:

Օտարերկրյա բանալիների սյունակները կարող են պարունակել NULL արժեք, սակայն FOREIGN KEY սահմանափակման ստուգումն անտեսվում է: Օտարերկրյա բանալին կարող է ինդեքսավորվել, այնուհետև սերվերն ավելի արագ կգտնի անհրաժեշտ տվյալները: Արտաքին բանալին սահմանվում է ինչպես ստեղծման, այնպես էլ ժամը փոփոխվող սեղաններ.

Սահմանափակում հղման ամբողջականությունըսահմանում է այն պահանջը, որ երեխայի աղյուսակի յուրաքանչյուր գրառումի համար պետք է լինի գրառում մայր աղյուսակում: Այս դեպքում արգելվում է փոխհարաբերությունների սյունակի արժեքը ծնող աղյուսակի գրառումում երեխայի գրառումի առկայության դեպքում, ինչպես նաև ծնող գրառումը ջնջելը (կասկադային փոփոխությունների և ջնջումների արգելքը), որը երաշխավորված է կանխադրվածով։ ON DELETE NO ACTION և ON UPDATE NO ACTION պարամետրերը: Կասկադային էֆեկտները միացնելու համար օգտագործեք ON DELETE CASCADE և ON UPDATE CASCADE պարամետրերը: