uy - Xizmat
Butunlik cheklovlarining ta'rifi. Birlamchi kalitlarni kasr sonli ma'lumotlar turlarini yaratish

PRIMARY KEY cheklovi

ASOSIY KALT - ustun darajasidagi yaxlitlik cheklovi - qo'llab-quvvatlanadigan qoidalar to'plami - bu ustun yoki ustunlar guruhini jadvaldagi har bir satr uchun noyob identifikator sifatida rasmiy ravishda belgilaydi.

Agar siz Firebird-ga kalitlarni aniqlash uchun "asosiy indeks" tushunchasini qo'llab-quvvatlaydigan ma'lumotlar bazasi tizimlaridan kelgan bo'lsangiz (odatda Paradox, Access va MySQL kabi faylga asoslangan tizimlar), unda Firebird va SQL standartlari dunyosi sizga tanish. Asosiy kalit indeks emas, balki cheklovdir. Bunday cheklashning qoidalaridan biri shundaki, cheklov u bilan bog'langan bir yoki bir nechta bo'sh bo'lmagan elementlarning o'ziga xos noyob indeksiga ega bo'lishi kerak.

Bunday indeksni oddiygina yaratish birlamchi kalitni yaratmaydi. Biroq, asosiy kalit cheklovini yaratish cheklash deklaratsiyasida keltirilgan ustunlardan iborat kerakli indeksni yaratishga olib keladi.

DIQQAT! Mavjud "asosiy indeks" ni eski faylga asoslangan tizimdan import qilish yoki asosiy kalit cheklash e'lon qilinishini kutayotganda bunday indeksni yaratishning hojati yo'q. Firebird mavjud indeks ustiga birlamchi kalit cheklovini qo'ya olmaydi - hech bo'lmaganda mavjud versiyalarda, jumladan 1,5 - va indekslar takrorlanganda so'rov optimallashtiruvchisi to'g'ri ishlamaydi.

Jadvalda faqat bitta asosiy kalit bo'lishi mumkin. Cheklovni aniqlaganingizda, Firebird avtomatik ravishda turli nomdagi qoidalar yordamida kerakli indeksni yaratadi. Birlamchi kalit indeks nomlari keyinroq muhokama qilinadi.

DIQQAT! Agar siz ma'lumotlar bazasini InterBase yoki Oracle'dan boshqa har qanday manbadan Firebird-ga o'tkazayotgan bo'lsangiz, asosiy kalit nomlari va cheklovlarga oid sxemaga alohida e'tibor berishingiz kerak.

PRIMARY KEY cheklovining o'zi mos yozuvlar cheklovi bo'lmasa-da, u odatda FOREIGN KEY cheklovining REFERANSLAR bandining potentsial predmeti bo'lib, har qanday havola cheklovining talab qilinadigan qismi hisoblanadi. Tafsilotlar uchun 17-bobga qarang.

Asosiy kalitni tanlash

Ustunlarni asosiy asosiy nomzodlar sifatida aniqlash bu nashrning doirasidan tashqarida. Oddiylashtirish, ma'lumotlar to'plamlarida ortiqcha va takroriy guruhlarni kamaytirish jarayoni va jadvaldagi bitta qatorni noyob tarzda ifodalovchi elementni to'g'ri aniqlash haqida ko'plab ajoyib kitoblar yozilgan. Agar siz relyatsion ma'lumotlar bazalari uchun yangi bo'lsangiz, ma'lumotlarni modellashtirish bo'yicha yaxshi kitobni o'rganish narxi unchalik ko'p bo'lmaydi.

Bitta ustun yoki ustunlar guruhi bo'lishi mumkin bo'lgan asosiy kalit nomzod ikkita talabga ega.

* NOT NULL atributi bir yoki bir nechta ustunlar guruhidagi barcha ustunlar uchun e'lon qilinishi kerak. Kalit yaxlitligiga faqat qiymatlarni solishtirish orqali erishish mumkin va NULL qiymat emas.

* Ustun yoki ustunlar guruhi noyob bo'lishi kerak, ya'ni jadvalda bir xil qiymatlarga ega bir nechta satr ko'rsatilmaydi. Misol uchun, haydovchilik guvohnomasi yoki ijtimoiy sug'urta raqami nomzodlar deb hisoblanishi mumkin, chunki ular takroriy raqamlarga ruxsat bermaydigan tizimlar tomonidan yaratilgan.

Ushbu nazariy "munosabatlarga" uchinchisini qo'shish kerak.

* Nomzod kalitlarining umumiy hajmi 252 bayt yoki undan kam bo'lishi kerak. Bu shunchaki belgilarni sanashda emas. Agar bir nechta ustunlar, ikkilik bo'lmagan tartiblash ketma-ketligi yoki ko'p baytli belgilar to'plami mavjud bo'lsa, bu chegara qisqartirilishi kerak - ba'zi hollarda tubdan.

Haqiqiy ma'lumotlar sizni muvaffaqiyatsizlikka qanday sozlashi mumkin

Firebird ildiz katalogidagi /examples katalogidagi (1.0.x versiyada employee.gdb) xodim.fdb ma'lumotlar bazasi jadvalidan HIZMATDA foydalanib, keling, haqiqiy ma'lumotlar sizning noyoblik haqidagi nazariy taxminlaringizni qanday noto'g'ri bo'lishiga olib kelishini ko'rib chiqamiz. Bu jadvalda saqlangan mazmunli ma'lumotlarni ko'rsatadigan deklaratsiya:

JADVAL XODIMI YARATISH (

FIRST_NAME VARCHAR(15) NULL EMAS,

/* taxmin: xodimning ismi bo'lishi kerak */

LAST_NAME VARCHAR(20) NULL EMAS,

/* taxmin: xodimning familiyasi bo'lishi kerak */

PHONE_EXT VARCHAR(4),

HIRE_DATE TARA SADOLAT CURRENT_DATE NULL EMAS,

DEPT_NO CHAR(3) NULL EMAS,

JOB_CODE VARCHAR (5) NULL EMAS,

JOB_GRADE SMALLINT NULL EMAS,

JOB_COUNTRY VARCHAR(15) NULL EMAS,

ISH HAQI RAAQAMLI (15, 2) SUNUM 0 NO NO EMAS,

FULL_NAME FIRST_NAME HISOBLANGAN || || FAMILIYA) ;

Aslida, bu tuzilmada nomzod kalitlari yo'q. Kalit sifatida (FIRST_NAME, LAST_NAME) yordamida bitta xodim qatorini aniqlash mumkin emas, chunki bu ikki elementning kombinatsiyasi tashkilot ichida takrorlanish ehtimoli o‘rtacha va yuqori. Biz Jon Smit ismli ikki xodimning yozuvlarini saqlay olmaymiz.

Kalitlarni olish uchun siz biror narsani ixtiro qilishingiz kerak. Bu "bir narsa" surrogat kalit sifatida tanilgan mexanizmdir.

Surrogat kalitlari

Biz allaqachon 14-bobdagi kalitlarga oid kirish mavzusida surrogat kalitni yoritgan edik. Surrogat birlamchi kalit noyob bo‘lishi kafolatlangan va semantik tarkibga ega bo‘lmagan qiymatdir va jadval tuzilmasida nomzodni taqdim eta olmaydigan o‘rinbosar kalit sifatida ishlatiladi. o'z tuzilishidagi kalit. Shu sababli, EMP_NO o'rinbosar kalit sifatida ishlash uchun HIZMATLAR jadvaliga (domen orqali e'lon qilingan) qo'shiladi:

EMPNO SMALLINT domenini yaratish;

ALTER TABLE XODIMI

EMP_NO EMPNO NO NULL QO'SHISH,

CHEKLANGAN PK_EMPLOYEE QO'SHISH

ASOSIY KEY(EMP_NO) ;

Ushbu ma'lumotlar bazasida EMP_NO_GEN nomli generator va yangi qator qo'shilganda berilgan kalitning qiymatini olish uchun EMPLOYEE jadvalidagi SET_EMP_NO nomli kiritishdan oldin trigger mavjud. Sektda. 31-bobdagi "Avtomatik oshirish kalitlarini amalga oshirish" ushbu texnikani batafsil tavsiflaydi. Bu Firebird-da surrogat kalitlarni amalga oshirishning tavsiya etilgan usuli.

Siz o'rinbosar asosiy kalitdan foydalanishning afzalliklarini faqat jadval nomzodni taklif qila olmaydigan holatda emas, balki sizning asosiy nomzodingiz kompozit bo'lgan hollarda ham ko'rib chiqishingiz mumkin.

Kompozit asosiy kalitlar

Ma'lumotlarni tahlil qilishda, ba'zan siz ma'lumotlar strukturasida bitta noyob ustunni topishingiz mumkin. Nazariya, qatorning o'ziga xosligini kafolatlaydigan kalit sifatida birlashtirilgan ikki yoki undan ortiq ustunlarni topishdir. Ko'p ustunlar birlashtirilib kalit hosil qilsa, kalit kompozit kalit yoki ba'zan murakkab kalit deb ataladi.

Agar ierarxik munosabatlarni amalga oshirish uchun kompozit kalitlardan foydalangan Paradox kabi ma'lumotlar bazasi tizimlarida tajribangiz bo'lsa, ularsiz yashashni tasavvur qilish qiyin bo'lishi mumkin. Haligacha, amalda, aloqalarni amalga oshirish uchun diskdagi jismoniy indeks tuzilmalarini kesib o'tmaydigan Firebird kabi DBMSlarda kompozit kalitlarni juda cheklangan deb hisoblash kerak.

Firebird-da kompozit indekslarga ehtiyoj yo'q va bundan tashqari, kompozit indekslar katta jadvallar uchun dizayn va ishlashda ba'zi muammolarni keltirib chiqaradi.

* Kompozit kalitlar odatda atom bo'lmagan asosiy elementlardan iborat, ya'ni. tanlangan ustunlar ma'noga ega (ular "mazmunli ma'lumotlar") va, albatta, tashqi o'zgarishlarga va qo'lda kiritish xatolariga zaifdir.

* Ushbu jadvalga havola qilingan boshqa jadvallardagi tashqi kalitlar kompozit kalitning har bir elementini takrorlaydi. Atom bo'lmagan kalitlardan foydalanganda yo'naltiruvchi yaxlitlik buziladi. Atom bo'lmagan elementlarning kombinatsiyasi xavfni oshiradi.

* Xorijiy kalitlar, birlamchi kalitlar kabi, doimiy indekslarga ega. Kompozit indekslar bir ustunli indekslarga qaraganda qattiqroq o'lcham cheklovlariga ega.

* Kompozit indekslar odatda katta bo'ladi. Katta indekslar ko'proq ma'lumotlar bazasi sahifalaridan foydalanadi, bu esa indeks operatsiyalarini (saralash, qo'shish va taqqoslash) kerak bo'lgandan sekinroq bo'lishiga olib keladi.

Birlamchi kalit ustunlarining atomligi

Birlamchi va tashqi kalitlarga ma'lumot sifatida ma'noga ega bo'lgan ustunlarni qo'shmaslik yaxshi amaliyotdir. Bu relyatsion ma'lumotlar bazasini loyihalashning asosiy tamoyillaridan biri - atomiklikni buzadi. Atomlik printsipi har bir ma'lumot elementi butunlay o'z-o'zidan mavjud bo'lishini, uning mavjudligini boshqaradigan yagona ichki qoidaga ega bo'lishini talab qiladi.

Asosiy kalit atom bo'lishi uchun siz insoniy qarorlardan tashqarida bo'lishingiz kerak. Agar odamlar uni tuzsa yoki tasnif qilsa, u atom emas. Agar u NOT NULL va yagonalik talablaridan tashqari har qanday qoidaga bo'ysunsa, u atomik emas. Yuqoridagi misolda, hatto haydovchilik guvohnomasi yoki ijtimoiy xavfsizlik raqami ham birlamchi kalit uchun atomiklik talablariga javob bermaydi, chunki ular tashqi tizimlarning sub'ektlari hisoblanadi.

Birlamchi kalit deklaratsiyasi sintaksisi

Ustun yoki ustunlar guruhiga PRIMARY KEY cheklovini belgilash uchun bir nechta sintaksis opsiyalaridan foydalanishingiz mumkin. Birlamchi kalitning elementlari bo'lgan barcha ustunlar NOT NULL atributi bilan oldindan belgilanishi kerak. Ustun yaratilgandan keyin unga NOT NULL cheklovini qo'sha olmasligingiz sababli, boshqa cheklovlarni qo'llashdan oldin ushbu cheklovga e'tibor berishingiz kerak.

PRIMARY KEY cheklovi metadata yaratishning quyidagi bosqichlaridan birida qo‘llanilishi mumkin:

* ustun ta'rifining bir qismi sifatida CREATE TABLE yoki ALTER TABLE operatoridagi ustun ta'rifida;

* CREATE TABLE yoki ALTER TABLE iboralarida jadval taʼrifida alohida belgilangan jadval cheklovi sifatida.

Ustun ta'rifining bir qismi sifatida asosiy kalitni belgilash

Quyidagi ketma-ketlik null bo'lmagan domenni yaratadi va topshiradi, so'ngra ushbu domenga asoslangan asosiy kalit ustunini belgilaydi va bir vaqtning o'zida ushbu ustunga PRIMARY KEY cheklovini qo'llaydi:

D_IDENTITY DOMAINNI BIGINT EMAS NULL SIFATDA YARATING;

ODAM JADVAL YARATISH (

PERSON_ID D_IDENTITY ASOSIY KALT,

Firebird INTEG_M nomli jadval cheklovini va RDB$PRIMARYnn nomli indeksni yaratadi. (har bir holatda pl - generatordan olingan raqam. Ikki raqam bir-biriga bog'liq emas.) Siz bu nomlar nima ekanligiga ta'sir qila olmaysiz va ularni o'zgartira olmaysiz.

Agar siz ustun qo'shganda, ALTER TABLE iborasidan foydalansangiz va bitta bayonotda asosiy kalitni yaratsangiz, natija o'xshash bo'ladi:

JADVAL KITOBNI O'ZGARTIRISh

BOOK_ID D_IDENTITY ASOSIY KALIT QO'SHISH;

Birlamchi kalitni nomlangan cheklash sifatida belgilash

Jadval ta'rifida asosiy kalitni aniqlashning yana bir usuli - ustun ta'riflarining oxiriga cheklash deklaratsiyasini qo'shishdir. Cheklov deklaratsiyasi oxirgi o'rinda qo'yiladi, chunki ular tegishli ustunlar mavjudligiga bog'liq. Ushbu usul sizga cheklovlarni nomlash imkoniyatini beradi. Quyidagi deklaratsiyada asosiy kalit cheklovi PK_ATABLE deb nomlanadi:

JADVAL YARATISH (

ID BIGINT NULL EMAS,

BOSHQA_USTUN VARCHAR(20),

CONSTRAINT PK_ATABLE PRIMARY KEY(ID));

Endi, tizim tomonidan yaratilgan RDB$PRIMARYnnn nomini ishlatish o'rniga, Firebird ushbu cheklov nomi sifatida PK_ATABLE dan foydalanadi. Firebird 1.5 va undan keyingi versiyalarida u qo'llab-quvvatlovchi noyob indeksga foydalanuvchi tomonidan belgilangan cheklov nomini ham qo'llaydi. Ushbu misolda indeks PK_ATABLE deb nomlanadi, boshqa versiyalarda esa uning nomi RDB$PRIMARYnnn bo'ladi.

Firebird 1.5 shuningdek, cheklov va uni qo'llab-quvvatlaydigan indeks uchun foydalanuvchi tomonidan belgilangan nomlardan foydalanishga imkon beradi.

Maxsus indeksdan foydalanish

Firebird 1.5 dan oldin, asosiy kalitni qo'llab-quvvatlash uchun pasayish indeksidan foydalanish mumkin emas edi. 1.5 versiyasidan boshlab, kamayib borayotgan indeks bilan asosiy kalitni saqlash mumkin. Buning uchun Firebird 1.5 USING bandi koʻrinishidagi sintaksis kengaytmasini qoʻshadi, bu sizga ASC (koʻtarilish) yoki DESC (kamayish) indeksini yaratish va unga cheklov nomidan boshqa nom berish imkonini beradi.

AS c va DESC qidiruv yo'nalishini aniqlaydi. Ushbu kontseptsiya 18-bobda batafsilroq muhokama qilinadi.

Quyidagi bayonot PK ATEST deb nomlangan asosiy kalit cheklovini va IDX_PK_ATEST nomli qo'llab-quvvatlovchi kamayib borayotgan indeksni yaratadi:

TEST JADVAL YARATISH (

ID BIGINT NULL EMAS,

DATA VARCHAR(10));

JADVAL TESTNI ALTER

CHEKLASH PK_ATEST ASOSIY KALT (ID) QO'SHISH

DESC INDEX IDX_PK_ATEST FOYDALANISH;

Muqobil sintaksis ham ishlaydi:

TEST JADVAL YARATISH (

ID BIGINT NULL EMAS,

MA'LUMOTLAR VARCHAR(10),

CHEKLASH PK_ATEST ASOSIY KALT(ID)

DESC INDEX IDX PK ATEST FOYDALANISH;

DIQQAT! Agar siz birlamchi yoki yagona kalit cheklovi bo'yicha KASHAYTIRISH indeksini yaratsangiz, unga murojaat qiladigan barcha xorijiy kalitlar uchun ISHLAB CHIQISH INDEX ni belgilashingiz kerak.

Mavjud jadvalga asosiy kalit qo'shing

Cheklovlar jadvaliga qo'shish kechiktirilishi mumkin. Ishlab chiquvchilar orasida barcha jadvallarni jadval cheklovlarisiz belgilash va ularni alohida skript yordamida qo'shish odatiy holdir. Ushbu amaliyotning asosiy sababi: katta skriptlar ko'pincha muvaffaqiyatsizlikka uchraydi, chunki mualliflar ba'zi bog'liqliklarni unutishadi. Agar siz ma'lumotlar bazasini bog'liqlik xatolarini tuzatish va skriptlarni qayta ishga tushirish uchun vaqt va umidsizlikni kamaytiradigan ketma-ketlikda yaratsangiz, bosh og'rig'i kamroq bo'ladi.

Odatda birinchi skriptda biz jadvallarni e'lon qilamiz va ularning yaratilishini tasdiqlaymiz:

JADVAL YARATISH (

ID BIGINT NULL EMAS,

BOSHQA_USTUN VARCHAR(20),

< другие столбцы >) ;

BOSHQA JADVAL YARATISH (

JADVALNI ALTER

PK_ATABLE CHEKLASHTIRISH

ASOSIY KEY(ID);

BOSHQA JADVALNI O‘ZGARTIRISh...

Keyingi bobda FOREIGN KEY ta'riflarini ko'rib chiqsak, ishonchli bog'liqliklar ketma-ketligida ma'lumotlar bazasini yaratishning afzalliklari yaqqol namoyon bo'ladi.

Ma'lumotlar bazalari kitobidan: ma'ruza matnlari muallif muallif noma'lum

3. Yaxlitlikning davlat tomonidan cheklanishi. Shtat bo'yicha relyatsion ma'lumotlar ob'ektining yaxlitligini cheklash ma'lumotlarning o'zgarmasligi deb ataladi.Bu holda, yaxlitlikni xavfsizlikdan ishonchli farqlash kerak, bu esa o'z navbatida ma'lumotlarni himoya qilishni nazarda tutadi.

C# 2005 dasturlash tili va .NET 2.0 platformasi kitobidan. Troelsen Endryu tomonidan

Atributlardan foydalanishni cheklash Odatiy bo'lib, maxsus atributlar dastur kodining istalgan qismiga (usullar, sinflar, xususiyatlar va boshqalar) qo'llanilishi mumkin. Shuning uchun, agar bu mantiqiy bo'lsa, (boshqa narsalar qatorida) usullarni aniqlash uchun VehicleDescription dan foydalanish mumkin,

DIY Linux server kitobidan muallif

11.2.2. Kirishni cheklash Men cheklash bloki direktivasini batafsil ko'rib chiqishni zarur deb hisoblayman. Ushbu direktiv ma'lum bir katalogga kirishning turi va parametrlarini belgilaydi. Listing 11.9. Listing 11.9. Limit direktivasidan foydalanishga misol

Ob'ektga yo'naltirilgan dasturlash asoslari kitobidan Meyer Bertrand tomonidan

Sun'iy intellekt uchun Prologda dasturlash kitobidan muallif Bratko Ivan

Mijozlarga kirishni cheklash Mijozlarning ma'lum bir komponentiga kirishini cheklash uchun h, sinf deklaratsiyasiga ikki yoki undan ortiq xususiyat bo'limlarini kiritish imkoniyati qo'llaniladi. Deklaratsiya quyidagicha ko'rinishga ega bo'ladi: S2 sinf xususiyatif ...g ...xususiyati (A, B)h ......end f va g komponentlari

Onlayn do'konda savdoni ikki baravar oshirish kitobidan muallif Parabellum Andrey Alekseevich

5.1. Qidiruvni cheklash Maqsadga erishish jarayonida Prolog tizimi avtomatik ravishda variantlar bo'yicha qidiradi, agar ulardan birontasi bajarilmasa, qaytib keladi. Ushbu turdagi qidiruv foydali dasturiy mexanizmdir, chunki u foydalanuvchini majburlashdan ozod qiladi

Firebird MA'LUMOTLAR BAZASINI ISHLAB CHIQISH QO'RIBATI kitobidan Borri Helen tomonidan

Cheklash EDI formulasining ikkinchi elementi oxirgi muddat (inglizcha oxirgi muddatdan) yoki cheklashdir. Bu vaqt chegarasi (masalan, faqat ikki kun uchun 50% chegirma) yoki miqdor chegarasi (masalan, birinchi 50 mijoz uchun qimmatbaho sovg'a) bo'lishi mumkin. Bundan tashqari, qisqa muddatlar ishlaydi

Omert@ kitobidan. Katta boshliqlar uchun kompyuter xavfsizligi va axborotni himoya qilish bo'yicha qo'llanma Axler Aleks tomonidan

Referentsial cheklov FOREIGN KEY sifatida mos yozuvlar cheklovi amalga oshiriladi. Chet el kaliti cheklovi faqat boshqa jadval kontekstida va ushbu jadvalning yagona kaliti cheklov e'lon qilinganda REFERANSLAR bandida aniq yoki bilvosita ko'rsatilgan holda mavjud.

Linux kitobidan xaker ko'zlari bilan muallif Flenov Mixail Evgenievich

NOT NULL Constraint Firebird, ba'zi nostandart DBMSlar kabi null qiymat atributini qo'llab-quvvatlamaydi. Standartlarga ko'ra, Firebird'dagi barcha ustunlar, agar aniq NOT NULL cheklovi belgilanmagan bo'lsa, null qiymatni o'z ichiga olishi mumkin.

InterBase World kitobidan. InterBase/FireBird/Yaffil-da ma'lumotlar bazasi ilovalari arxitekturasi, ma'muriyati va rivojlanishi muallif Kovyazin Aleksey Nikolaevich

Internetda anonimlik va xavfsizlik kitobidan. "Choynik" dan foydalanuvchiga muallif Kolisnichenko Denis Nikolaevich

Muallifning kitobidan

4.11.5. Tarmoqni cheklash Katta tarmoqlarda har bir kompyuterni tavsiflash juda qiyin. Ushbu vazifani osonlashtirish uchun siz guruh yozuvlaridan foydalanishingiz mumkin. Masalan, faqat 192.168.1.x tarmog'i uchun Internetga kirishga ruxsat berishingiz kerak (255.255.255.0 niqobi bilan). Bu shuni anglatadiki, birinchi 24 bit (birinchi uchta

Muallifning kitobidan

9.5.8. Kanal cheklanishi Internetga kirishni tashkil qilishda alohida foydalanuvchilar ko'pincha yuqori ulanish tezligini ta'minlashlari kerak. Sukut bo'yicha hamma teng bo'lsa va hozirda mavjud bo'lgan maksimal tezlikda ishlay olsa, buni qanday qilish kerak?

Muallifning kitobidan

CHECK cheklovi Ma'lumotlar bazasidagi eng foydali cheklovlardan biri bu cheklash cheklovidir. G'oya juda oddiy - jadvalga kiritilgan qiymatni ba'zi shartlar uchun tekshiring va shartning bajarilishiga qarab, ma'lumotlarni kiriting yoki kiritmang.Sintaksis.

Muallifning kitobidan

P2.4. Kirishni cheklash P2.4.1. Saytga kirishni rad etish (yoki saytlar ro'yxati) Keling, ma'lum bir saytga (yoki saytlar ro'yxatiga) kirishni bloklashingiz kerak deb faraz qilaylik. Buning uchun Billing | ga o'ting Mijozlar | Filtrlar | Guruh oldidan (A2.10-rasm). Menyuning Action | buyrug'ini bajaring

Muallifning kitobidan

P2.4.2. Tezlik chegarasi Muayyan foydalanuvchining tezligini cheklash uchun uni foydalanuvchilar ro'yxatidan tanlang, sichqonchaning o'ng tugmachasini bosing va "Xususiyatlar" ni tanlang. Cheklovlar yorlig'iga o'ting (A2.14-rasm), "Standart" oynasidagi belgini olib tashlang.

P rimary Key - bu ma'lumotlar bazasi jadvalidagi har bir satr/yozuvni yagona identifikatsiya qiluvchi jadvaldagi maydon. Birlamchi kalitlar noyob qiymatlarni o'z ichiga olishi kerak. Asosiy kalit ustunida qiymat bo'lishi mumkin emas.

Jadvalda faqat bitta asosiy kalit bo'lishi mumkin, u bir yoki bir nechta maydonlardan iborat bo'lishi mumkin. Birlamchi kalit sifatida bir nechta maydonlar ishlatilsa, ular kompozit kalit deb ataladi.

Agar jadval biron-bir maydon(lar)da aniqlangan asosiy kalitga ega bo'lsa, u holda siz ushbu maydon(lar) uchun bir xil qiymatga ega bo'lgan ikkita yozuvga ega bo'lolmaysiz.

Eslatma- Ma'lumotlar bazasi jadvallarini yaratishda ushbu tushunchalardan foydalanishingiz mumkin.

Birlamchi kalit yaratish

Bu yerda Mijozlar jadvalidagi asosiy kalit sifatida ID atributini aniqlash uchun sintaksis.

JADVAL MUZUCHLARINI YARATING(ID INT NULL NO, NOMI VARCHAR (20) NO NULL, AGE INT NO NULL, MANZIL CHAR (25) , O'nlik ish haqi (18, 2), ASOSIY KEY (ID));

MIJOLAR jadvali allaqachon mavjud bo'lganda "ID" ustunida asosiy kalit cheklovini yaratish uchun quyidagi SQL sintaksisidan foydalaning:

ALTER TABLE MIJOLAR ASOSIY KALT (ID);

Eslatma

Agar siz asosiy kalitni qo'shish uchun ALTER TABLE iborasidan foydalansangiz, asosiy kalit ustun(lar)i allaqachon NULL qiymatlarni o'z ichiga olmagan deb e'lon qilingan bo'lishi kerak (agar jadval birinchi bo'lib yaratilgan bo'lsa).

Bir nechta ustunlarda asosiy kalitni aniqlash uchun quyidagi SQL sintaksisidan foydalaning:

JADVAL MUZUCHLARINI YARATING(ID INT NULL NO, NOMI VARCHAR (20) NO NULL, AGE INT NO NULL, MANZIL CHAR (25) , O'NLIK ISHLAB CHIQARISH (18, 2), ASOSIY KALT (ID, ISIM));

MIJOLAR jadvali allaqachon mavjud bo'lganda ID va NAME ustunlarida asosiy kalit cheklovini yaratish uchun quyidagi SQL sintaksisidan foydalaning.

ALTER JADVAL MIJOLAR CHEKLASH PK_CUSTID BIRINCHI KEY (ID, NAME);

Asosiy kalitni o'chirish

Siz quyida keltirilgan sintaksisdan foydalanib, jadvaldagi asosiy kalit cheklovlarini olib tashlashingiz mumkin.

ALTER TABLE MIJOLAR ASOSIY KEYITNI TOSHLADI;

Men sizning e'tiboringizga yangi boshlanuvchilar uchun SQL 2-qism maqolasining bepul tarjimasini taqdim etaman

Har bir veb-ishlab chiquvchi uchun ma'lumotlar bazalari bilan o'zaro aloqada bo'lish juda muhimdir. Ikkinchi bo'limda biz tilni o'rganishni davom ettiramiz SQL va bizning ko'nikmalarimizni DBMSga qo'llaymiz MySQL. Biz indekslar, ma'lumotlar turlari va murakkabroq so'rovlarni o'rganamiz.

Sizga nima kerak

Iltimos, joylashgan birinchi qismning "Sizga nima kerak" bo'limiga qarang.

Agar siz ushbu misollarni serveringizda ishga tushirishni istasangiz, quyidagilarni bajaring:

  1. Konsolni oching MySQL va tizimga kiring.
  2. So'rov yordamida "my_first_db" ma'lumotlar bazasini yarating YARATMOQ, agar u ilgari yaratilmagan bo'lsa.
  3. Operator yordamida bazani o'zgartiring FOYDALANISH.

Indekslar

Indekslar (yoki kalitlar) odatda ma'lumotlarni tanlaydigan bayonotlarni bajarish tezligini oshirish uchun ishlatiladi (masalan, TANLASH) jadvallardan.

Ular yaxshi ma'lumotlar bazasi arxitekturasining muhim qismidir, ularni "optimallashtirish" deb tasniflash qiyin. Odatda indekslar dastlab qo'shiladi, lekin keyinroq so'rov yordamida qo'shilishi mumkin JADVAL ALTER.

Ma'lumotlar bazasi ustunlarini indekslashning asosiy sabablari:

  • Deyarli har bir jadvalda asosiy kalit mavjud ( ASOSIY KALT), odatda bu "id" ustunidir.
  • Agar ustun noyob qiymatlarni saqlash uchun mo'ljallangan bo'lsa, u noyob indeksga ega bo'lishi kerak ( O'ZBEKISTON).
  • Agar sizga ustunda tez-tez qidirish kerak bo'lsa (uni jumlada ishlatish QAYERDA), u muntazam indeksga ega bo'lishi kerak ( INDEKS).
  • Agar ustun boshqa jadval bilan bog'lanish uchun ishlatilsa, iloji bo'lsa, u tashqi kalit bo'lishi kerak ( Xorijiy kalit) yoki oddiy indeks.

Birlamchi kalit (PRIMARY KEY)

Deyarli barcha jadvallar birlamchi kalitga ega, odatda avtomatik oshirish opsiyasiga ega butun son ( AUTO_INCREMET).

Quyi so'rovlar ko'pincha unumdorlikni sezilarli darajada pasayishiga olib keladi, shuning uchun ularni ehtiyotkorlik bilan ishlating.

UNION: Ma'lumotlarni birlashtirish

So'rovdan foydalanish UNION, siz bir nechta SELECT so'rovlari natijalarini birlashtira olasiz.

Bu misol “N” harfi bilan boshlanadigan holatlarni aholi soni kattaroq davlatlar bilan birlashtiradi:

(SELECT * FROM shtatlari WHERE nomi LIKE "n%") UNION (SELECT * FROM shtatlari WHERE aholisi > 10000000);

E'tibor bering, Nyu-York katta shtat bo'lib, "N" harfi bilan boshlanadi. Biroq, ro'yxatda faqat bir marta paydo bo'ladi, chunki dublikatlar avtomatik ravishda o'chiriladi.

Shuningdek, so'rovlarning go'zalligi UNION ular turli jadvallarga nisbatan so'rovlarni birlashtirish uchun ishlatilishi mumkin.

Masalan, bizda jadvallar xodimlari (xodimlar), menejerlar (menejerlar) va mijozlar (mijozlar) mavjud. Har bir jadvalda elektron pochta manzili ko'rsatilgan maydon mavjud. Agar biz barcha elektron pochta manzillarini bitta so'rovda olishni istasak, quyidagilarni amalga oshirishimiz mumkin:

(Xodimlardan elektron pochtani tanlang) UNION (menejerlardan elektron pochta manzilini tanlang) UNION (obuna bo'lgan mijozlardan elektron pochta manzilini tanlang = 1);

Ushbu so'rovni bajarish orqali biz barcha xodimlar va menejerlarning pochta manzillarini va faqat pochta ro'yxatiga obuna bo'lgan mijozlarni olamiz.

INSERT Davomi

Biz allaqachon so'rov haqida gaplashdik KIRITMOQ oldingi maqolada. Endi biz indekslarni ko'rib chiqdik, biz qo'shimcha so'rovlar imkoniyatlari haqida gapirishimiz mumkin KIRITMOQ.

QO'ShIRING ... DUBLIKAT KALİT YANGILANISHIDA

Bu eng ko'p ishlatiladigan holat. Avval so'rovni bajarishga harakat qiladi KIRITMOQ, va agar so'rov takroriy birlamchi tufayli bajarilmasa ( ASOSIY KALT) yoki noyob ( NONO KALIT) tugmasi bo'lsa, so'rov bajariladi YANGILANISH.

Avval test jadvalini tuzamiz.

Bu oziq-ovqat saqlash uchun stol. "Aktsiyadorlik" maydonida stokda mavjud bo'lgan mahsulotlar soni saqlanadi.

Keling, jadvalga mavjud qiymatni kiritishga harakat qilaylik va nima sodir bo'lishini ko'ramiz.

Biz xatolik oldik.

Aytaylik, bizda yangi novvoyxona bor va ma’lumotlar bazasini yangilamoqchimiz, lekin ma’lumotlar bazasida allaqachon yozuv bor yoki yo‘qligini bilmaymiz. Biz avval yozuvning mavjudligini tekshirishimiz va keyin boshqa kiritish so'rovini bajarishimiz mumkin. Yoki bitta oddiy so'rovda hamma narsani qilishingiz mumkin:

Xuddi shunday ishlaydi KIRITMOQ, lekin bitta muhim xususiyatga ega. Agar yozuv allaqachon mavjud bo'lsa, u o'chiriladi va so'rov bajariladi KIRITMOQ, va biz hech qanday xato xabarlarini olmaymiz.

E'tibor bering, chunki butunlay yangi qator qo'shiladi, avtomatik oshirish maydoni bittaga oshiriladi.

Bu ilovaning ishlashini ta'minlash uchun birinchi navbatda takrorlash xatolarining oldini olishning bir usuli. Agar takrorlash mavjud bo'lsa ham, hech qanday xatoliksiz yangi qatorni kiritishingiz kerak bo'lishi mumkin.

Hech qanday xato yoki yangilangan qatorlar yo'q.

Ma'lumotlar turlari

Jadvaldagi har bir ustun ma'lum bir turdagi bo'lishi kerak. Biz allaqachon turlardan foydalanganmiz INT, VARCHAR Va DATE, lekin ular haqida batafsil to'xtalmadi. Yana bir nechta ma'lumotlar turlarini ko'rib chiqamiz.

Raqamli ma'lumotlar turlaridan boshlaylik. Men ularni ikki guruhga ajrataman: butun sonlar va kasrlar.

Butun

Butun son ustuni faqat natural sonlarni saqlashi mumkin (kasrsiz). Odatiy bo'lib, ular ijobiy yoki salbiy bo'lishi mumkin. Agar variant tanlansa Imzosiz, keyin faqat ijobiy raqamlar saqlanishi mumkin.

MySQL turli o'lchamdagi va diapazondagi 5 turdagi butun sonlarni qo'llab-quvvatlaydi:

Fraksiyonel sonli ma'lumotlar turlari

Bu turlar kasr sonlarni saqlashi mumkin: FLOAT, DOUBLE va DECIMAL.

FLOAT 4 baytni oladi, DOUBLE 8 baytni oladi va avvalgisiga o'xshaydi. DOUBLE aniqroq.

DECIMAL(M,N) oʻzgaruvchan aniqlikka ega. M - raqamlarning maksimal soni, N - kasrdan keyingi raqamlar soni.

Masalan, DECIMAL(13,4) da 9 kasr va 4 kasr mavjud.

String ma'lumotlar turlari

Nomidan ular satrlarni saqlashi mumkinligini taxmin qilishingiz mumkin.

CHAR(N) N ta belgini saqlashi mumkin va belgilangan qiymatga ega. Masalan, CHAR(50) har doim butun ustundagi satrda 50 ta belgidan iborat bo'lishi kerak. Maksimal mumkin bo'lgan qiymat - 255 belgi

VARCHAR(N) bir xil ishlaydi, lekin diapazon farq qilishi mumkin. N - maksimal qiymatni bildiradi. Agar saqlangan satr N ta belgidan qisqa bo'lsa, u qattiq diskda kamroq joy egallaydi. Maksimal mumkin bo'lgan qiymat - 65535 belgi.

TEXT tipidagi variantlar uzun satrlar uchun ko'proq mos keladi. TEXT 65535 belgi chegarasiga ega, MEDIUMTEXT 16,7 million va LONGTEXT 4,3 milliard belgi chegarasiga ega. MySQL odatda ularni serverdagi alohida omborlarda saqlaydi, shuning uchun asosiy xotira imkon qadar kichik va tez bo'ladi.

.

Xulosa

Maqolani o'qiganingiz uchun tashakkur. SQL veb-ishlab chiquvchining arsenalidagi muhim til va vositadir.

Oxirgi yangilanish: 27.04.2019

Chet el kalitlari jadvallar orasidagi aloqalarni o'rnatishga imkon beradi. Chet el kaliti qaram, bo'ysunuvchi jadval ustunlariga o'rnatiladi va asosiy jadvaldagi ustunlardan biriga ishora qiladi. Odatda, xorijiy kalit tegishli asosiy jadvaldagi asosiy kalitga ishora qiladi.

Jadval darajasida tashqi kalitni o'rnatishning umumiy sintaksisi:

FOREIGN KALİT (1-ustun, 2-ustun, ... ustunN) MA'LUMOTLAR asosiy_jadval (asosiy_jadval_ustun1, asosiy_jadval_ustun2, ...asosiy_jadval_ustunN)

Chet el kalit cheklovini yaratish uchun FOREIGN KEY dan keyin siz tashqi kalitni ifodalovchi jadval ustunini belgilaysiz. REFERENCES kalit so'zidan keyin esa tegishli jadval nomi ko'rsatiladi, keyin esa qavslar ichida chet el kaliti ko'rsatadigan tegishli ustun nomi ko'rsatiladi. REFERENCES iborasidan keyin ON DELETE va ON UPDATE iboralari mavjud bo'lib, ular mos ravishda asosiy jadvaldan qatorni o'chirish va yangilashda amalni belgilaydi.

Masalan, ikkita jadvalni aniqlaymiz va ularni tashqi kalit yordamida bog'laymiz:

CREATE TABLE mijozlari (Id INT PRIMARY KEY AUTO_INCREMENT, Age INT, Ism VARCHAR(20) NOT NULL, Familiya VARCHAR(20) NOT NULL, Phone VARCHAR(20) NOT NULL UNIQUE); Buyurtmalar jadvalini yaratish (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, EXORIGN KEY (CustomerId) REFERANSLAR Mijozlar (Id));

Bunday holda, Mijozlar va Buyurtmalar jadvallari aniqlanadi. Mijozlar asosiy hisoblanadi va mijozni ifodalaydi. Buyurtmalar bog'liq va mijoz tomonidan joylashtirilgan buyurtmani ifodalaydi. Buyurtmalar jadvali CustomerId ustuni orqali Mijozlar jadvali va uning Id ustuniga bog'langan. Ya'ni, CustomerId ustuni mijozlar jadvalidagi Id ustuniga ishora qiluvchi xorijiy kalitdir.

Chet el kalit cheklovi nomini belgilash uchun CONSTRAINT operatoridan foydalanishingiz mumkin:

Buyurtmalar jadvalini yaratish (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, CONSTRAINT orders_custonmers_fk FOREIGN KEY (CustomerId) REFERANSLAR Mijozlar (Id));

OʻCHIRISHDA va YANGILANISHDA

ON DELETE va ON UPDATE operatorlaridan foydalanib, asosiy jadvaldan tegishli qator o‘chirilganda yoki o‘zgartirilganda bajariladigan amallarni o‘rnatishingiz mumkin. Harakat sifatida quyidagi variantlardan foydalanish mumkin:

    CASCADE: Asosiy jadvaldagi tegishli satrlar o'chirilgan yoki o'zgartirilganda, qaram jadvaldagi qatorlarni avtomatik ravishda o'chiradi yoki o'zgartiradi.

    SET NULL: Asosiy jadvaldan tegishli qatorni o'chirish yoki yangilashda tashqi kalit ustunini NULL ga o'rnatadi. (Bu holda, xorijiy kalit ustuni NULL sozlamalarini qo'llab-quvvatlashi kerak)

    CHEKLASH: Agar bog'liq jadvalda tegishli qatorlar mavjud bo'lsa, asosiy jadvaldagi qatorlarni o'chirish yoki o'zgartirishni rad etadi.

    HARAKAT YO‘Q: RESTRICT bilan bir xil.

    SET DEFAULT: Tegishli qatorni asosiy jadvaldan o‘chirishda tashqi kalit ustunini DEFAULT atributi yordamida belgilangan standart qiymatga o‘rnatadi. Ushbu parametr printsipial jihatdan mavjud bo'lishiga qaramay, InnoDB dvigateli ushbu ifodani qo'llab-quvvatlamaydi.

Kaskadli o'chirish

Kaskadli o'chirish, asosiy jadvaldan bir qatorni o'chirishda bog'liq bo'lgan barcha qatorlarni avtomatik ravishda o'chirish imkonini beradi. Buning uchun CASCADE opsiyasidan foydalaning:

JADVAL Buyurtmalarini YARATING (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, EXORIGN KEY (CustomerId) REFERANSLAR Mijozlar (Id) DELETE CASCADE BO‘YICHA);

ON UPDATE CASCADE ifodasi ham xuddi shunday ishlaydi. Birlamchi kalitning qiymatini o'zgartirganingizda, unga bog'langan tashqi kalitning qiymati avtomatik ravishda o'zgaradi. Biroq, asosiy kalitlar juda kam o'zgarganligi sababli va odatda o'zgaruvchan qiymatlari bo'lgan ustunlarni asosiy kalit sifatida ishlatish tavsiya etilmaydi, ON UPDATE ifodasi amalda kamdan-kam qo'llaniladi.

NULL o'rnatish

Chet el kaliti uchun SET NULL parametrini o'rnatganingizda, tashqi kalit ustuni NULL ruxsat etilgan bo'lishi kerak:

JADVAL Buyurtmalarini yaratish (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERANSLAR Mijozlar (Id) ON DELETE SET NULL);

) relyatsion (jadvalli) ma’lumotlar bazasi qanday tuzilganligini ko‘rib chiqdik va relyatsion ma’lumotlar bazasining asosiy elementlari: jadvallar, ustunlar va satrlar, matematik tilda esa: munosabatlar, atributlar va kortejlar ekanligini aniqladik. Shuningdek, ko'pincha satrlar yozuvlar, ustunlar ustunlar, yozuv va ustunning kesishishi katak deb ataladi.

Shuni yodda tutish kerakki, satr tarkibi va ustun nomlari bir xil ma'lumotlar bazasida yagona bo'lishi kerak.

Ma'lumotlar bazalarida ma'lumotlar turlari

Har qanday turdagi ma'lumotlar uchun ma'lumotlar bazalarini yaratishingiz mumkinligini tushunish muhimdir: matnlar, sanalar, vaqtlar, voqealar, raqamlar. Axborot turiga ko'ra relyatsion ma'lumotlar bazalari turlarga bo'linadi. Har bir ma'lumot turi (atributi) o'z belgisiga ega:

  • INTEGER - butun sonlardan olingan ma'lumotlar;
  • FLOAT - suzuvchi nuqta ma'lumotlari deb ataladigan kasr raqamlaridan olingan ma'lumotlar;
  • CHAR, VARCHAR - matnli ma'lumotlar turlari (belgi);
  • LOGICAL — ma’lumotlarning mantiqiy turi (ha/yo‘q);
  • DATE/TIME - vaqt ma'lumotlari.

Bu ma'lumotlarning asosiy turlari bo'lib, ulardan ko'plari bor. Bundan tashqari, har bir dasturlash tilida o'ziga xos tizim atributlari (ma'lumotlar turlari) mavjud.

Relyatsion ma'lumotlar bazasi jadvallarining asosiy kaliti va tashqi kaliti nima

Asosiy kalit

Biz yuqorida esladik: ma'lumotlar bazasining har bir satri (yozuvi) noyob bo'lishi kerak. Bu har bir yozuvni maksimal darajada aniqlaydigan maxsus qiymatlar to'plami ko'rinishidagi asosiy kalit. Buni boshqacha aniqlash mumkin. Birlamchi kalit: Har bir yozuvga xos bo'lgan o'ziga xos xususiyatlar to'plami. Asosiy kalit asosiy kalit sifatida belgilanadi.

Asosiy kalit (PK) har bir stol uchun juda muhim. Buning sababini tushuntiraman.

  • Birlamchi kalit jadvalda bir xil yozuvlarni (qatorlarni) yaratishga imkon bermaydi;
  • PKlar bir xil ma'lumotlar bazasidagi jadvallar o'rtasida mantiqiy bog'lanishni ta'minlaydi (relyatsion ma'lumotlar bazalari uchun).

Jadvallar orasidagi mantiqiy bog'liqlik haqida batafsilroq to'xtalib o'tishga arziydi.

Xorijiy kalit

Xorijiy kalit, qisqacha FK. Bitta ma'lumotlar bazasi jadvallari o'rtasida aniq mantiqiy bog'lanishni ta'minlaydi.

Misol uchun, ikkita jadval A va B. A jadvalida (poyabzal) asosiy kalit mavjud: o'lcham, B jadvalida (rang) o'lcham deb nomlangan ustun bo'lishi kerak. Ushbu jadvalda "o'lcham" B va A jadvallarini mantiqiy bog'lash uchun tashqi kalit bo'ladi.

Yana murakkab misol.

Ikkita ma'lumotlar jadvali: odamlar va telefon raqamlari.

Jadval: Odamlar

Jadval: Telefon raqamlari

Telefon raqamlari jadvalida PK noyobdir. Ushbu jadvalning FK - Odamlar jadvalining PK. Telefon raqamlari va odamlar o'rtasidagi aloqa FK telefon jadvallari orqali ta'minlanadi. Ya'ni:

  • Zaytsevning ikkita telefoni bor;
  • Volkovning ikkita telefoni bor;
  • Belkinda bitta telefon bor.
asosiy kalit va tashqi kalit

Xulosa qilib shuni qo'shimcha qilamanki, har qanday, Ma'lumotlar bazasi menejeri birlamchi kalit yaratish uchun texnik qobiliyatga ega.



 


O'qing:



Agar Aliexpress-dagi buyurtmangiz bekor qilinsa nima qilish kerak?

Agar Aliexpress-dagi buyurtmangiz bekor qilinsa nima qilish kerak?

Va biz sotuvchi sizning buyurtmangizni yopganini ko'rdik. Lekin siz hech qachon mol olmadingiz. Keling, bu holatda nima qilish kerakligini aniqlaylik. Yangi boshlanuvchilar uchun, bunga arzimaydi ...

Pochta bo'limida etkazib berishda naqd pul olish qoidalari

Pochta bo'limida etkazib berishda naqd pul olish qoidalari

Nashr qilingan sana: 04.12.2018 Masofadan xarid qilishda buyurtma uchun toʻlov, qoida tariqasida, oldindan toʻlov yoki yetkazib berishda naqd pul bilan amalga oshiriladi. Biz...

Nima uchun Aliexpress-dagi sotuvchi tovarlarni jo'natish uchun uzoq vaqt talab etadi?

Nima uchun Aliexpress-dagi sotuvchi tovarlarni jo'natish uchun uzoq vaqt talab etadi?

Aliexpress-ga yaqinda kelgan va ushbu platforma bilan endigina tanishishni boshlagan yangi boshlanuvchilar ertami-kechmi buyurtma uchun to'lov bosqichiga o'tadilar.Va...

Aliexpress-da nizoni ochish bo'yicha bosqichma-bosqich ko'rsatmalar

Aliexpress-da nizoni ochish bo'yicha bosqichma-bosqich ko'rsatmalar

Arzon narx va katta assortiment odamlarni Aliexpress-da xarid qilishga jalb qiladi, ammo xitoyliklar bilan ishlashning nozik tomonlari haqida hamma ham bilmaydi...

tasma tasviri RSS