namai - Aptarnavimas
Vientisumo apribojimų apibrėžimas. Pirminių raktų trupmeninių skaitmeninių duomenų tipų kūrimas

PRIMARY KEY apribojimas

PAGRINDINIS RAKTAS yra stulpelio lygio vientisumo apribojimas – palaikomų taisyklių rinkinys, kuris formaliai pažymi stulpelį arba stulpelių grupę kaip unikalų kiekvienos lentelės eilutės identifikatorių.

Jei atėjote į Firebird iš duomenų bazių sistemų, kurios palaiko rakto nustatymo „pirminio indekso“ koncepciją (dažniausiai failais pagrįstos sistemos, tokios kaip Paradox, Access ir MySQL), tada Firebird ir SQL standartų pasaulis jums yra pažįstami. Pirminis raktas yra ne indeksas, o apribojimas. Viena iš tokio apribojimo taisyklių yra ta, kad apribojimas turi turėti specifinį unikalų vieno ar kelių su juo susietų netuščių elementų indeksą.

Paprasčiausiai sukūrus tokį indeksą pirminis raktas nesukuriamas. Tačiau sukūrus pirminio rakto apribojimą sukuriamas reikalingas indeksas, susidedantis iš apribojimo deklaracijoje išvardytų stulpelių.

DĖMESIO! Nereikia importuoti esamo „pirminio indekso“ iš senos failais pagrįstos sistemos arba kurti tokio indekso laukiant, kol bus paskelbtas pirminio rakto apribojimas. „Firebird“ negali taikyti pirminio rakto apribojimo esamam indeksui – bent jau esamose versijose, įskaitant 1.5 – ir užklausų optimizavimo priemonė neveiks tinkamai, kai indeksai bus dubliuojami.

Lentelėje gali būti tik vienas pirminis raktas. Kai apibrėžiate apribojimą, „Firebird“ automatiškai sukuria reikiamą indeksą naudodama įvairias pavadintas taisykles. Pirminių raktų indeksų pavadinimai aptariami toliau.

DĖMESIO! Jei konvertuojate duomenų bazę į Firebird iš bet kurio šaltinio, išskyrus InterBase ar Oracle, turite atkreipti ypatingą dėmesį į schemą, susijusią su pirminių raktų pavadinimais ir apribojimais.

Nors pats apribojimas PIRMINIS RAKTAS nėra nuorodos apribojimas, jis paprastai yra privaloma bet kurio nuorodos apribojimo dalis, nes yra galimas UŽSIENIO RAKTŲ apribojimo sąlygos REFERENCES objektas. Daugiau informacijos rasite 17 skyriuje.

Pirminio rakto pasirinkimas

Stulpelių, kaip pirminio rakto, identifikavimas nepatenka į šio leidinio taikymo sritį. Buvo parašyta daug puikių knygų apie normalizavimą, perteklinio mažinimo ir pasikartojančių grupių duomenų rinkiniuose procesą bei teisingą elemento, kuris vienareikšmiškai atstoja vieną lentelės eilutę, identifikavimą. Jei dar nesinaudojote reliacinėmis duomenų bazėmis, geros duomenų modeliavimo knygos išmokimas nebus per didelis.

Pirminio rakto kandidatas, kuris gali būti vienas stulpelis arba stulpelių grupė, turi du būtinus reikalavimus.

* Atributas NOT NULL turi būti deklaruotas visuose vieno ar kelių stulpelių grupės stulpeliuose. Rakto vientisumą galima pasiekti tik lyginant reikšmes, o NULL nėra reikšmė.

* Stulpelis arba stulpelių grupė turi būti unikalūs – tai yra, lentelėje negali būti daugiau nei viena eilutė su tomis pačiomis reikšmėmis. Pavyzdžiui, vairuotojo pažymėjimas arba socialinio draudimo numeris gali būti laikomi kandidatais, nes juos sugeneruoja sistemos, neleidžiančios pasikartojančių numerių.

Prie šių teorinių „požiūrių“ reikia pridėti dar trečdalį.

* Bendras galimų raktų dydis turi būti 252 baitai arba mažesnis. Tai ne tik simbolių skaičiavimas. Ši riba turi būti sumažinta – kai kuriais atvejais radikaliai – jei yra keli stulpeliai, ne dvejetainė lyginimo seka arba kelių baitų simbolių rinkinys.

Kaip tikri duomenys gali paskatinti jus nesėkmei

Naudodami darbuotojas.fdb duomenų bazės lentelę EMPLOYEE iš /examples katalogo Firebird šakniniame kataloge (employee.gdb versijoje 1.0.x), pažiūrėkime, kaip realūs duomenys gali lemti, kad jūsų teorinės prielaidos apie unikalumą gali būti klaidingos. Štai deklaracija, kurioje rodomi šioje lentelėje saugomi reikšmingi duomenys:

KURTI STALO DARBUOTOJĄ (

FIRST_NAME VARCHAR (15) NOT NULL,

/* prielaida: darbuotojas turi turėti vardą */

LAST_NAME VARCHAR (20) NE NULL,

/* prielaida: darbuotojas turi turėti pavardę */

PHONE_EXT VARCHAR (4),

HIRE_DATE DATE NUMATYTOJI CURRENT_DATE NE NULL,

DEPT_NO CHAR(3) NOT NULL,

JOB_CODE VARCHAR (5) NOT NULL,

JOB_GRADE SMALLINT NOT NULL,

JOB_COUNTRY VARCHAR(15) NOT NULL,

ATLYGINIMO SKAIČIUS (15, 2) NUMATYTOJI NUSTATYMAS 0 NE NULIS,

FULL_NAME APSKAIČIUOTA FIRST_NAME || || PAVARDĖ) ;

Tiesą sakant, ši struktūra neturi kandidatų raktų. Neįmanoma identifikuoti vienos darbuotojo eilutės naudojant (FIRST_NAME, LAST_NAME) kaip raktą, nes dviejų elementų derinio tikimybė, kad organizacijoje bus dubliuojama, yra nuo vidutinės iki didelės. Negalėsime išsaugoti dviejų darbuotojų, vardu John Smith, įrašų.

Norėdami gauti raktus, turite ką nors išrasti. Šis „kažkas“ yra mechanizmas, žinomas kaip surogatinis raktas.

Surogatiniai raktai

Pakaitinį raktą jau aptarėme 14 skyriaus įvadinėje temoje apie raktus. Pakaitinis pirminis raktas yra vertė, kuri garantuotai yra unikali ir neturinti semantinio turinio bei naudojama kaip pakaitinis raktas lentelės struktūroje, kuri negali pateikti kandidato. raktas į savo struktūrą. Dėl šios priežasties EMP_NO pridedamas prie lentelės EMPLOYEE (deklaruojamas per domeną), kad veiktų kaip pakaitinis raktas:

KURTI DOMENĄ EMPNO SMALLINT ;

PAKEISTI STALO DARBUOTOJĄ

ADD EMP_NO EMPNO NOT NULL,

PRIDĖTI APRIBOJIMĄ PK_EMPLOYEE

PIRMINIS RAKTAS (EMP_NO) ;

Šioje duomenų bazėje taip pat yra generatorius, pavadintas EMP_NO_GEN, ir trigeris Prieš įterpimą pavadinimu SET_EMP_NO lentelėje EMPLOYEE, kad būtų galima gauti nurodyto rakto vertę, kai pridedama nauja eilutė. Vabzdys. „Automatinio didinimo klavišų įgyvendinimas“ 31 skyriuje išsamiai aprašoma ši technika. Tai rekomenduojamas būdas įdiegti pakaitinius raktus „Firebird“.

Galbūt norėsite apsvarstyti pakaitinio pirminio rakto naudojimo pranašumus ne tik tais atvejais, kai lentelė negali pasiūlyti kandidato, bet ir tais atvejais, kai jūsų raktas yra sudėtinis.

Sudėtiniai pirminiai raktai

Analizuodami duomenis, kartais duomenų struktūroje galite rasti vieną unikalų stulpelį. Teorija yra rasti du ar daugiau stulpelių, sugrupuotų kaip raktas, kuris garantuos eilutės unikalumą. Kai daugelis stulpelių sujungiami į raktą, raktas vadinamas sudėtiniu raktu arba kartais sudėtingu raktu.

Jei turite patirties su duomenų bazių sistemomis, tokiomis kaip Paradox, kurios naudojo sudėtinius raktus hierarchiniams ryšiams įgyvendinti, jums gali būti sunku įsivaizduoti gyvenimą be jų. Kol kas praktikoje sudėtiniai raktai turėtų būti laikomi labai ribotais DBVS, pvz., „Firebird“, kurios nepereina fizinių indeksų struktūrų diske, kad įgyvendintų ryšius.

„Firebird“ nereikia sudėtinių indeksų, be to, sudėtiniai indeksai kelia tam tikrų didelių lentelių projektavimo ir veikimo problemų.

* Sudėtiniai klavišai dažniausiai susideda iš neatominių raktinių elementų, t.y. pasirinkti stulpeliai turi reikšmę (jie yra „prasmingi duomenys“) ir yra pažeidžiami išorinių pakeitimų bei rankinio įvesties klaidų.

* Svetimi raktai iš kitų lentelių, kurios nurodo šią lentelę, dubliuoja kiekvieną sudėtinio rakto elementą. Naudojant ne atominius klavišus, pažeidžiamas nuorodos vientisumas. Neatominių elementų derinys padidina riziką.

* Užsienio raktai, kaip ir pirminiai raktai, turi pastovius indeksus. Sudėtiniams indeksams taikomi griežtesni dydžio apribojimai nei vieno stulpelio indeksams.

* Sudėtiniai indeksai paprastai būna dideli. Dideli indeksai naudoja daugiau duomenų bazės puslapių, todėl indekso operacijos (rūšiavimas, sujungimas ir palyginimas) yra lėtesnės nei būtina.

Pirminių raktų stulpelių atomiškumas

Gera praktika yra neįtraukti jokių stulpelių, kurie turi reikšmę kaip duomenys pirminiuose ir išoriniuose raktuose. Tai pažeidžia vieną iš pagrindinių reliacinės duomenų bazės projektavimo principų – atomiškumą. Atomiškumo principas reikalauja, kad kiekvienas duomenų elementas egzistuotų visiškai atskirai, o jo egzistavimą reglamentuotų viena vidinė taisyklė.

Kad pagrindinis raktas būtų atominis, turite būti už žmogaus sprendimų ribų. Jei žmonės ją kuria ar klasifikuoja, tai nėra atomazga. Jei jam taikoma bet kuri kita taisyklė, išskyrus NOT NULL ir unikalumo reikalavimus, tai nėra atominė. Anksčiau pateiktame pavyzdyje net vairuotojo pažymėjimas arba socialinio draudimo numeris neatitinka pirminio rakto atomiškumo reikalavimų, nes jie yra išorinių sistemų objektai.

Pirminio rakto deklaracijos sintaksė

Galite naudoti kelias sintaksės parinktis, kad stulpeliui arba stulpelių grupei priskirtumėte apribojimą PAGRINDINIS RAKTAS. Visi stulpeliai, kurie yra pirminio rakto elementai, turi būti iš anksto nustatyti su atributu NOT NULL. Kadangi negalite pridėti NOT NULL apribojimo į stulpelį po to, kai jis buvo sukurtas, prieš naudodami kitus apribojimus turite pasirūpinti šiuo apribojimu.

PAGRINDINIS RAKTO apribojimas gali būti taikomas bet kuriame iš šių metaduomenų kūrimo etapų:

* stulpelio apibrėžime CREATE TABLE arba ALTER TABLE sakinyje kaip stulpelio apibrėžimo dalis;

* lentelės apibrėžime CREATE TABLE arba ALTER TABLE sakinyje kaip atskirai apibrėžtas lentelės apribojimas.

Pirminio rakto apibrėžimas kaip stulpelio apibrėžimo dalis

Ši seka sukuria ir įpareigoja nenulinį domeną, tada pagal tą domeną apibrėžia pirminio rakto stulpelį ir tuo pat metu tam stulpeliui pritaiko PIRMINIO RAKTO apribojimą:

KURTI DOMENĄ D_IDENTITY KAIP BIGINT NOT NULL;

KURTI LENTELĖS ASMENĮ (

PERSON_ID D_IDENTITY PIRMINIS RAKTAS,

„Firebird“ sukuria lentelės apribojimą, pavadintą INTEG_M, ir indeksą pavadinimu RDB$PRIMARYnn. (pl kiekvienu atveju yra skaičius, gautas iš generatoriaus. Du skaičiai nesusiję vienas su kitu.) Jūs negalite įtakoti, kokie yra šie pavadinimai, ir negalite jų keisti.

Rezultatas bus panašus, jei naudosite tą patį metodą pridėdami stulpelį, naudodami teiginį ALTER TABLE ir sukurdami pirminį raktą viename sakinyje:

ALTER LENTELĖS KNYGA

PRIDĖTI BOOK_ID D_IDENTITY PIRMINIS RAKTAS;

Pirminio rakto apibrėžimas kaip pavadintas apribojimas

Kitas būdas apibrėžti pirminį raktą lentelės apibrėžime yra pridėti apribojimo deklaraciją stulpelių apibrėžimų pabaigoje. Apribojimų deklaracijos pateikiamos paskutinės, nes jos priklauso nuo stulpelių, į kuriuos jos nurodo, egzistavimo. Šis metodas suteikia galimybę įvardyti apribojimus. Šioje deklaracijoje pirminio rakto apribojimas įvardijamas kaip PK_ATABLE:

KURTI LENTELĘ ATABLE (

ID BIGINT NE NULL,

ANOTHER_COLUMN VARCHAR (20),

CONSTRAINT PK_ATABLE PRIMARY KEY(ID));

Dabar „Firebird“ vietoj sistemos sugeneruoto pavadinimo RDB$PRIMARYnnn naudoja PK_ATABLE kaip šio apribojimo pavadinimą. 1.5 ir naujesnėse versijose „Firebird“ taip pat taiko vartotojo apibrėžtą apribojimo pavadinimą palaikomajam unikaliam indeksui. Šiame pavyzdyje indeksas bus pavadintas PK_ATABLE, o kitose versijose jos pavadinimas būtų RDB$PRIMARYnnn.

„Firebird 1.5“ taip pat leidžia naudoti vartotojo apibrėžtus apribojimo ir jį palaikančio indekso pavadinimus.

Naudojant tinkintą indeksą

Prieš Firebird 1.5 nebuvo įmanoma naudoti mažėjančio indekso pirminiam raktui palaikyti. Nuo 1.5 versijos galima išlaikyti pirminį raktą su mažėjančiu indeksu. Norėdami tai padaryti, „Firebird 1.5“ prideda sintaksės plėtinį kaip USING sąlygą, leidžiančią sukurti ASC (didėjantį) arba DESC (mažėjantį) indeksą ir suteikti jam kitokį nei apribojimo pavadinimą.

AS c ir DESC nustato paieškos kryptį. Ši sąvoka išsamiau aptariama 18 skyriuje.

Šis teiginys sukurs pirminio rakto apribojimą, pavadintą PK ATEST, ir palaikomąjį mažėjimo indeksą, pavadintą IDX_PK_ATEST:

KURTI LENTELĘ ATEST (

ID BIGINT NE NULL,

DUOMENYS VARCHAR(10));

ALTER TABLE ATEST

PRIDĖTI APRIBOJIMĄ PK_ATEST PIRMINĮ RAKTĄ (ID)

NAUDOJANT DESC INDEX IDX_PK_ATEST;

Taip pat veiks alternatyvi sintaksė:

KURTI LENTELĘ ATEST (

ID BIGINT NE NULL,

DUOMENŲ VARCHAR (10),

CONSTRAINT PK_ATEST PIRMINIS RAKTAS (ID)

NAUDOJANT DESC INDEX IDX PK ATEST;

DĖMESIO! Jei sukuriate DESCENDING indeksą pagal pirminio arba unikalaus rakto apribojimą, turite nurodyti USING DESC INDEX visiems pašaliniams raktams, kurie nurodo jį.

Pridėkite pirminį raktą prie esamos lentelės

Pridėjimas prie apribojimų lentelės gali būti atidėtas. Įprasta kūrėjų praktika apibrėžti visas lenteles be lentelės apribojimų ir tada jas įtraukti naudojant atskirą scenarijų. Pagrindinė šios praktikos priežastis: dideli scenarijai dažnai sugenda, nes autoriai pamiršta kai kurias priklausomybes. Paprasčiausiai bus mažiau galvos skausmo, jei sukursite duomenų bazę tokia seka, kuri sumažins priklausomybės klaidų taisymo ir scenarijų paleidimo laiką ir nusivylimą.

Paprastai pirmajame scenarijuje deklaruojame lenteles ir patvirtiname jų sukūrimą:

KURTI LENTELĘ ATABLE (

ID BIGINT NE NULL,

ANOTHER_COLUMN VARCHAR (20),

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

KURTI LENTELĘ KITĄ LENTELĘ (

PAKEISTI LENTELĘ ATABLE

PRIDĖTI APRIBOJIMĄ PK_ATABLE

PIRMINIS RAKTAS (ID);

PAKEISTI LENTELĘ KITA LENTELĘ...

Kitame skyriuje, kai pažvelgsime į UŽSIENIO RAKTŲ apibrėžimus, išaiškės duomenų bazės kūrimo patikimų priklausomybių sekoje pranašumai.

Iš knygos Duomenų bazės: paskaitų konspektai autorius autorius nežinomas

3. Integralumo apribojimas pagal būseną Reliacinių duomenų objekto vientisumo apribojimas pagal būseną yra vadinamasis duomenų invariantas Šiuo atveju vientisumą reikia patikimai atskirti nuo saugumo, o tai savo ruožtu reiškia duomenų apsaugą nuo

Iš knygos The C# 2005 programavimo kalba ir .NET 2.0 platforma. pateikė Troelsenas Andrew

Atributų naudojimo apribojimas Pagal numatytuosius nustatymus pasirinktiniai atributai gali būti taikomi bet kuriai programos kodo daliai (metodams, klasėms, savybėms ir kt.). Todėl, jei tik tai prasminga, galima naudoti VehicleDescription apibrėžti (be kita ko) metodus,

Iš knygos DIY Linux serveris autorius

11.2.2. Prieigos ribojimas Manau, kad būtina atidžiau pažvelgti į Limit block direktyvą. Ši direktyva apibrėžia prieigos prie konkretaus katalogo tipą ir parametrus. Apsvarstykite galimybę įtraukti į sąrašą 11.9. Įtraukimas į sąrašą 11.9. Limit direktyvos naudojimo pavyzdys

Iš knygos Objektinio programavimo pagrindai pateikė Meyer Bertrand

Iš knygos „Prolog“ programavimas dirbtiniam intelektui autorius Bratko Ivanas

Kliento prieigos ribojimas Norint apriboti kliento prieigą prie tam tikro komponento h, bus naudojama galimybė į klasės deklaraciją įtraukti dvi ar daugiau funkcijų sekcijų. Deklaracija atrodytų taip: klasė S2 savybėf ...g ...ypatybė (A, B)h ......pabaiga Komponentai f ir g

Iš knygos Padvigubinti pardavimus internetinėje parduotuvėje autorius Parabellum Andrejus Aleksejevičius

5.1. Paieškos ribojimas Siekdama tikslo, Prolog sistema automatiškai ieško pasirinkimų ir grįžta, jei kuri nors iš jų nepavyksta. Šio tipo paieška yra naudingas programinės įrangos mechanizmas, nes jis atleidžia vartotoją nuo to

Iš knygos Firebird DUOMENŲ BAZĖS KŪRĖJO VADOVAS pateikė Borri Helen

Apribojimas Antrasis EDI formulės elementas yra terminas (nuo angliško termino) arba apribojimas. Tai gali būti laiko limitas (pavyzdžiui, 50 % nuolaida tik dviem dienoms) arba kiekio limitas (pavyzdžiui, vertinga dovana pirmiesiems 50 klientų). Be to, veikia trumpi terminai

Iš knygos Omert@. Kompiuterių saugos ir informacijos apsaugos vadovas dideliems bosams pateikė Axleris Alexas

Nuorodos apribojimas Nuorodos apribojimas įgyvendinamas kaip UŽSIENIS RAKTAS. Išorinio rakto apribojimas egzistuoja tik kitos lentelės kontekste ir tos lentelės unikaliame rakte, kuris yra tiesiogiai arba netiesiogiai nurodytas sąlygoje REFERENCES, kai apribojimas deklaruojamas.

Iš knygos Linux įsilaužėlio akimis autorius Flenovas Michailas Jevgenievičius

NOT NULL Constraint Firebird nepalaiko nulinės reikšmės atributo, kaip tai daro kai kurios nestandartinės DBVS. Pagal standartus visuose Firebird stulpeliuose gali būti nulinė reikšmė, nebent būtų nurodytas aiškus NOT NULL apribojimas.

Iš knygos „InterBase World“. InterBase/FireBird/Yaffil duomenų bazių programų architektūra, administravimas ir kūrimas autorius Kovyazinas Aleksejus Nikolajevičius

Iš knygos Anonimiškumas ir saugumas internete. Nuo „arbatinuko“ iki vartotojo autorius Kolisnichenko Denisas Nikolajevičius

Iš autorės knygos

4.11.5. Tinklo apribojimai Dideliuose tinkluose labai sunku apibūdinti kiekvieną kompiuterį. Norėdami palengvinti šią užduotį, galite naudoti grupės įrašus. Pavyzdžiui, turite leisti prieigą prie interneto tik 192.168.1.x tinklui (su 255.255.255.0 kauke). Tai reiškia, kad pirmieji 24 bitai (pirmieji trys

Iš autorės knygos

9.5.8. Kanalo apribojimas Organizuodami prieigą prie interneto, atskiriems vartotojams dažnai reikia užtikrinti didesnį ryšio greitį. Kaip tai padaryti, kai pagal nutylėjimą visi yra lygūs ir gali dirbti maksimaliu šiuo metu galimu greičiu?

Iš autorės knygos

PATIKRINTI apribojimą Vienas iš naudingiausių duomenų bazės apribojimų yra tikrinimo apribojimas. Idėja labai paprasta – patikrinkite į lentelę įterptą reikšmę, ar yra kokia nors sąlyga ir, priklausomai nuo sąlygos įvykdymo, įterpkite arba neįterpkite duomenis Sintaksė

Iš autorės knygos

P2.4. Prieigos apribojimas P2.4.1. Prieigos prie svetainės (arba svetainių sąrašo) uždraudimas Tarkime, kad turite užblokuoti prieigą prie konkrečios svetainės (arba svetainių sąrašo). Norėdami tai padaryti, eikite į Atsiskaitymas | Klientai | Filtrai | Prieš grupę (A2.10 pav.). Vykdykite meniu komandą Veiksmas |

Iš autorės knygos

P2.4.2. Greičio apribojimas Norėdami apriboti konkretaus vartotojo greitį, pasirinkite jį vartotojų sąraše, dešiniuoju pelės mygtuku spustelėkite ir pasirinkite Ypatybės. Eikite į skirtuką Apribojimai (A2.14 pav.), atžymėkite laukelį Numatytasis.

P pirminis raktas yra lentelės laukas, unikaliai identifikuojantis kiekvieną duomenų bazės lentelės eilutę / įrašą. Pirminiuose raktuose turi būti unikalių verčių. Pirminio rakto stulpelyje negali būti reikšmės.

Lentelėje gali būti tik vienas pirminis raktas, kurį gali sudaryti vienas ar daugiau laukų. Kai keli laukai naudojami kaip pirminis raktas, jie vadinami sudėtiniu raktu.

Jei bet kuriame (-iuose) lauke (-iuose) yra apibrėžtas lentelės pirminis raktas, negalite turėti dviejų įrašų, turinčių vienodą to lauko (-ų) reikšmę.

Pastaba– Galite naudoti šias sąvokas kurdami duomenų bazių lenteles.

Pirminio rakto kūrimas

Čia yra sintaksė, skirta apibrėžti ID atributą kaip pirminį raktą lentelėje Klientai.

KURTI LENTELĘ KLIENTAI (ID INT NOT NULL, PAVADINIMAS VARCHAR (20) NOT NULL, AMŽIAUS INT NE NULL, ADRESO CHAR (25) , ALGOS DEŠIMTALIS (18, 2), PIRMINIS RAKTAS (ID));

Norėdami sukurti pirminio rakto apribojimą stulpelyje „ID“, kai lentelė KLIENTAI jau yra, naudokite šią SQL sintaksę:

ALTER TABLE KLIENTAI PRIDĖTI PIRMINĮ RAKTĄ (ID);

Pastaba

Jei naudojate teiginį ALTER TABLE, kad pridėtumėte pirminį raktą, pirminio rakto stulpelis (-iai) jau turi būti deklaruotas kaip neturintis NULL reikšmių (jei lentelė buvo sukurta pirmiausia).

Norėdami apibrėžti pirminį raktą keliuose stulpeliuose, naudokite toliau pateiktą SQL sintaksę:

KURTI LENTELĘ KLIENTUS (ID INT NOT NULL, PAVADINIMAS VARCHAR (20) NOT NULL, AMŽIAUS INT NE NULL, ADRESO CHAR (25) , ALGOS DESIMTALIS (18, 2), PIRMINIS RAKTAS (ID, PAVADINIMAS));

Jei norite sukurti pirminio rakto apribojimą stulpeliams ID ir NAME, kai lentelė KLIENTAI jau yra, naudokite šią SQL sintaksę.

ALTER TABLE KLIENTAI PRIDĖDAMI APRIBOJIMĄ PK_CUSTID PIRMINĮ RAKTĄ (ID, PAVADINIMAS);

Pirminio rakto ištrynimas

Galite išvalyti pirminio rakto apribojimus iš lentelės, naudodami toliau pateiktą sintaksę.

ALTER TABLE KLIENTAI ATMESTI PIRMINĮ RAKTĄ;

Jūsų dėmesiui pristatau nemokamą straipsnio SQL pradedantiesiems 2 dalies vertimą

Kiekvienam interneto kūrėjui svarbu turėti galimybę bendrauti su duomenų bazėmis. Antroje dalyje tęsiame kalbos mokymąsi SQL ir pritaikyti savo įgūdžius DBVS MySQL. Išnagrinėsime indeksus, duomenų tipus ir sudėtingesnes užklausas.

Ko tau reikia

Žr. pirmosios dalies skyrių „Ko jums reikia“, kuris yra.

Jei norite paleisti šiuos pavyzdžius savo serveryje, atlikite šiuos veiksmus:

  1. Atidarykite savo konsolę MySQL ir prisijunk.
  2. Sukurkite duomenų bazę „my_first_db“ naudodami užklausą KURTI, jei jis nebuvo sukurtas anksčiau.
  3. Pakeiskite pagrindą naudodami operatorių NAUDOTI.

Indeksai

Indeksai (arba raktai) dažniausiai naudojami norint pagreitinti teiginių, atrenkančių duomenis (pvz., PASIRINKTI) iš lentelių.

Jie yra svarbi geros duomenų bazių architektūros dalis; sunku juos priskirti „optimizavimui“. Paprastai indeksai pridedami iš pradžių, bet gali būti įtraukti vėliau naudojant užklausą PAKEISTI LENTELĘ.

Pagrindinės duomenų bazės stulpelių indeksavimo priežastys:

  • Beveik kiekviena lentelė turi pirminį raktą ( PIRMINIS RAKTAS), paprastai tai yra „id“ stulpelis.
  • Jei stulpelis skirtas saugoti unikalias reikšmes, jis turi turėti unikalų indeksą ( UNIKALUS).
  • Jei jums reikia dažnai ieškoti stulpelyje (naudokite jį sakinyje KUR), jis turi turėti reguliarų indeksą ( INDEKSAS).
  • Jei stulpelis naudojamas susieti su kita lentele, jei įmanoma, tai turėtų būti išorinis raktas ( SVETIMAS RAKTAS) arba įprastas indeksas.

Pagrindinis raktas (PRIMARY KEY)

Beveik visos lentelės turi pirminį raktą, dažniausiai sveikąjį skaičių su automatinio padidinimo parinktimi ( AUTO_INCREMET).

Dėl antrinių užklausų dažnai labai pablogėja našumas, todėl naudokite jas atsargiai.

SĄJUNGOS: duomenų sujungimas

Naudojant užklausą SĄJUNGOS, galite sujungti kelių SELECT užklausų rezultatus.

Šiame pavyzdyje sujungiamos būsenos, kurios prasideda raide „N“, su didesnėmis populiacijomis:

(SELECT * FROM būsenos WHERE pavadinimas LIKE "n%") UNION (SELECT * FROM būsenos WHERE gyventojų > 10000000);

Atkreipkite dėmesį, kad Niujorkas yra didelė valstija ir prasideda raide „N“. Tačiau sąraše jis pasirodo tik vieną kartą, nes dublikatai pašalinami automatiškai.

Taip pat prašymų grožis SĄJUNGOS yra tai, kad juos galima naudoti norint sujungti skirtingų lentelių užklausas.

Pavyzdžiui, turime lentelių darbuotojus (darbuotojus), vadovus (vadybininkus) ir klientus (klientus). Kiekvienoje lentelėje yra laukas su el. pašto adresu. Jei norime gauti visus el. pašto adresus vienoje užklausoje, galime atlikti šiuos veiksmus:

(PASIRINKITE el. paštą NUO darbuotojų) SĄJUNGOS (SELECT el. paštą IŠ vadybininkų) SĄJUNGOS (PASIRINKITE el. laišką NUO klientų, KUR užsiprenumeravo = 1);

Užpildę šią užklausą, gausime visų darbuotojų ir vadovų pašto adresus ir tik tų klientų, kurie yra užsiregistravę adresų sąraše.

INSERT Tęsinys

Mes jau kalbėjome apie prašymą ĮDĖTI ankstesniame straipsnyje. Dabar, kai pažvelgėme į indeksus, galime kalbėti apie papildomas užklausų galimybes ĮDĖTI.

ĮTERPTI ... Į DUKLIABĄ RAKTŲ ATNAUJINĮ

Tai dažniausiai naudojama sąlyga. Pirmiausia užklausa bandoma įvykdyti ĮDĖTI ir jei užklausa nepavyksta dėl pasikartojančios pirminės ( PIRMINIS RAKTAS) arba unikalus ( UNIKALUS RAKTAS) klavišą, tada užklausa vykdoma ATNAUJINTI.

Pirmiausia sukurkime bandomąją lentelę.

Tai maisto laikymo stalas. Lauke „Stock“ saugomas sandėlyje esančių produktų skaičius.

Dabar pabandykime į lentelę įterpti esamą reikšmę ir pažiūrėkime, kas atsitiks.

Gavome klaidą.

Tarkime, gavome naują kepyklą ir norime atnaujinti duomenų bazę, bet nežinome, ar duomenų bazėje jau yra įrašas. Pirmiausia galime patikrinti, ar yra įrašas, o tada paleisti kitą įterpimo užklausą. Arba galite padaryti viską viena paprasta užklausa:

Veikia taip pat kaip ĮDĖTI, bet turi vieną svarbią savybę. Jei įrašas jau yra, jis ištrinamas ir tada vykdoma užklausa ĮDĖTI, ir negausime jokių klaidų pranešimų.

Atkreipkite dėmesį, nes įterpiama visiškai nauja eilutė, automatinio padidėjimo laukas padidinamas vienu.

Tai yra būdas išvengti dubliavimo klaidų, kad programa veiktų. Gali tekti įterpti naują eilutę nespausdinant jokių klaidų, net jei yra dubliavimas.

Nėra klaidų ar atnaujintų eilučių.

Duomenų tipai

Kiekvienas lentelės stulpelis turi būti tam tikro tipo. Mes jau naudojome tipus INT, VARCHAR Ir DATA, bet plačiau apie juos nesigilino. Taip pat apžvelgsime dar kelis duomenų tipus.

Pradėkime nuo skaitmeninių duomenų tipų. Suskirstau juos į dvi grupes: sveikuosius skaičius ir trupmenas.

Visas

Sveikasis skaičius stulpelyje gali saugoti tik natūraliuosius skaičius (be kablelio). Pagal numatytuosius nustatymus jie gali būti teigiami arba neigiami. Jei pasirinkta parinktis NEPASIRAŠYTA, tada galima išsaugoti tik teigiamus skaičius.

MySQL palaiko 5 skirtingų dydžių ir diapazonų sveikųjų skaičių tipus:

Daliniai skaitmeninių duomenų tipai

Šie tipai gali saugoti trupmeninius skaičius: FLOAT, DOUBLE ir DECIMAL.

FLOAT užima 4 baitus, DOUBLE – 8 baitus ir yra panašus į ankstesnį. DOUBLE yra tikslesnis.

DECIMAL(M,N) turi kintamą tikslumą. M – didžiausias skaitmenų skaičius, N – skaitmenų skaičius po kablelio.

Pavyzdžiui, DECIMAL(13,4) turi 9 skaitmenis po kablelio ir 4 skaitmenis po kablelio.

Eilučių duomenų tipai

Iš pavadinimo galite atspėti, kad jie gali saugoti eilutes.

CHAR(N) gali saugoti N simbolių ir turi fiksuotą reikšmę. Pavyzdžiui, CHAR(50) viso stulpelio eilutėje visada turi būti 50 simbolių. Didžiausia galima reikšmė yra 255 simboliai

VARCHAR(N) veikia taip pat, tačiau diapazonas gali skirtis. N – žymi didžiausią reikšmę. Jei saugoma eilutė yra trumpesnė nei N simbolių, ji užims mažiau vietos standžiajame diske. Didžiausia galima reikšmė yra 65535 simboliai.

TEXT tipo variantai labiau tinka ilgoms stygoms. TEXT yra 65535 simbolių limitas, MEDIUMTEXT – 16,7 mln., o LONGTEXT – 4,3 milijardo simbolių. „MySQL“ dažniausiai juos saugo atskirose serverio saugyklose, kad pagrindinė saugykla būtų kuo mažesnė ir greitesnė.

.

Išvada

Ačiū, kad perskaitėte straipsnį. SQL yra svarbi kalba ir įrankis žiniatinklio kūrėjų arsenale.

Paskutinis atnaujinimas: 2019-04-27

Užsienio raktai leidžia nustatyti ryšius tarp lentelių. Išorinis raktas nustatomas stulpeliuose iš priklausomos, pavaldžios lentelės ir nurodo vieną iš pagrindinės lentelės stulpelių. Paprastai išorinis raktas nurodo pirminį raktą iš susijusios pagrindinės lentelės.

Bendroji užsienio rakto nustatymo lentelės lygiu sintaksė yra tokia:

UŽSIENIS RAKTAS (1 stulpelis, 2 stulpelis, ... stulpelisN) NUORODOS pagrindinė_lentelė (pagrindinės_lentelės_stulpelis1, pagrindinė_lentelės_stulpelis2, ... pagrindinė_lentelės_stulpelisN)

Norėdami sukurti išorinio rakto apribojimą, po FOREIGN KEY nurodykite lentelės stulpelį, kuriame bus nurodytas išorinis raktas. O po raktinio žodžio NUORODOS nurodomas susijusios lentelės pavadinimas, o po to skliausteliuose atitinkamo stulpelio, į kurį nukreips išorinis raktas, pavadinimas. Po išraiškos REFERENCES yra ON DELETE ir ON UPDATE išraiškos, kurios atitinkamai nurodo veiksmą ištrinant ir atnaujinant eilutę iš pagrindinės lentelės.

Pavyzdžiui, apibrėžkime dvi lenteles ir susiekime jas naudodami išorinį raktą:

KURTI LENTELĘ Klientai (ID INT PRIMARY KEY AUTO_INCREMENT, Amžius INT, Vardas VARCHAR(20) NOT NULL, Pavardė VARCHAR(20) NOT NULL, Telefonas VARCHAR(20) NOT NULL UNIQUE); KURTI LENTELĘ Užsakymai (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) NUORODOS Klientai (Id));

Šiuo atveju yra apibrėžtos klientų ir užsakymų lentelės. Klientai yra pagrindinis ir atstovauja klientui. Užsakymai yra priklausomi ir atspindi kliento pateiktą užsakymą. Lentelė Užsakymai per stulpelį CustomerId susieta su lentele Klientai ir jos stulpeliu Id. Tai reiškia, kad stulpelis „CustomerId“ yra išorinis raktas, nukreipiantis į stulpelį „Id“ iš lentelės „Klientai“.

Norėdami nurodyti išorinio rakto apribojimo pavadinimą, galite naudoti operatorių CONSTRAINT:

CREATE TABLE Orders (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, CONSTRAINT orders_custonmers_fk FOREIGN KEY (CustomerId) NUORODOS Klientai (Id));

IŠTRINTI ir ATNAUJINTI

Naudodami teiginius ON DELETE ir ON UPDATE, galite nustatyti veiksmus, kurie atliekami atitinkamai ištrinant arba pakeitus susijusią eilutę iš pagrindinės lentelės. Kaip veiksmą galima naudoti šias parinktis:

    CASCADE: automatiškai ištrina arba modifikuoja priklausomos lentelės eilutes, kai ištrinamos arba keičiamos susijusios pagrindinės lentelės eilutės.

    NUSTATYTI NULL: kai ištrinate arba atnaujinate susijusią eilutę iš pagrindinės lentelės, išorinio rakto stulpelis nustatomas į NULL. (Šiuo atveju išorinio rakto stulpelis turi palaikyti NULL nustatymą)

    APRIBOTI: atmeta pagrindinės lentelės eilučių ištrynimą arba keitimą, jei priklausomojoje lentelėje yra susijusių eilučių.

    NĖRA VEIKSMŲ: tas pats, kas APRIBOTI.

    NUSTATYTI NUMATYTOJI: kai ištrinate susijusią eilutę iš pagrindinės lentelės, išorinio rakto stulpelyje nustatoma numatytoji reikšmė, nurodyta naudojant atributą DEFAULT. Nepaisant to, kad ši parinktis iš esmės yra prieinama, InnoDB variklis nepalaiko šios išraiškos.

Kaskadinis trynimas

Pakopinis trynimas leidžia automatiškai ištrinti visas susijusias eilutes iš priklausomos lentelės, kai ištrinate eilutę iš pagrindinės lentelės. Norėdami tai padaryti, naudokite parinktį CASCADE:

KURTI LENTELĘ Užsakymai (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, COREIGN KEY (CustomerId) NUORODOS Klientai (Id) ON DELETE CASCADE);

Išraiška ON UPDATE CASCADE veikia panašiai. Kai pakeičiate pirminio rakto reikšmę, su juo susijusio išorinio rakto reikšmė pasikeičia automatiškai. Tačiau kadangi pirminiai raktai keičiasi labai retai ir paprastai nerekomenduojama naudoti stulpelių su kintamomis reikšmėmis kaip pirminius raktus, išraiška ON UPDATE praktiškai naudojama retai.

NULL nustatymas

Kai nustatote pašalinio rakto parinktį SET NULL, išorinio rakto stulpelyje turi būti leidžiama NULL:

KURTI LENTELĘ Užsakymai (ID INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, COREIGN KEY (CustomerId) NUORODA Klientai (ID) ON DELETE SET NULL);

) pažiūrėjome, kaip yra struktūrizuota reliacinė (lentelių) duomenų bazė ir išsiaiškinome, kad pagrindiniai reliacinės duomenų bazės elementai yra: lentelės, stulpeliai ir eilutės, o matematine prasme: ryšiai, atributai ir eilės. Taip pat dažnai eilutės vadinamos įrašais, stulpeliai – stulpeliais, o įrašo ir stulpelio sankirta – langeliu.

Svarbu atsiminti, kad eilučių turinys ir stulpelių pavadinimai turi būti unikalūs toje pačioje duomenų bazėje.

Duomenų tipai duomenų bazėse

Svarbu suprasti, kad duomenų bazes galite kurti bet kokio tipo duomenims: tekstams, datoms, laikams, įvykiams, skaičiams. Priklausomai nuo informacijos tipo, reliacinės duomenų bazės skirstomos į tipus. Kiekvienas duomenų tipas (atributas) turi savo pavadinimą:

  • INTEGER – duomenys iš sveikųjų skaičių;
  • FLOAT – duomenys iš trupmeninių skaičių, vadinamieji slankiojo kablelio duomenys;
  • CHAR, VARCHAR - teksto duomenų tipai (simbolis);
  • LOGICAL — loginių duomenų tipas (taip/ne);
  • DATE/TIME – laiko duomenys.

Tai yra pagrindiniai duomenų tipai, kurių iš tikrųjų yra daug daugiau. Be to, kiekviena programavimo kalba turi savo sistemos atributų (duomenų tipų) rinkinį.

Kas yra reliacinių duomenų bazių lentelių pirminis ir išorinis raktas

Pirminis raktas

Pirmiau priminėme: kiekviena duomenų bazės eilutė (įrašas) turi būti unikali. Tai yra pirminis raktas konkrečių reikšmių rinkinių pavidalu, kuris maksimaliai identifikuoja kiekvieną įrašą. Jį galima apibrėžti skirtingai. Pirminis raktas: konkrečių savybių rinkinys, būdingas kiekvienam įrašui. Pirminis raktas nurodomas kaip pirminis raktas.

Pagrindinis raktas (PK) labai svarbu kiekvienam stalui. Leiskite man paaiškinti kodėl.

  • Pirminis raktas neleidžia kurti identiškų įrašų (eilučių) lentelėje;
  • PK suteikia loginį ryšį tarp lentelių toje pačioje duomenų bazėje (reliacinėms duomenų bazėms).

Verta išsamiau panagrinėti loginį ryšį tarp lentelių.

Svetimas raktas

Užsienio raktas, trumpiau FK. Suteikia nedviprasmišką loginį ryšį tarp vienos duomenų bazės lentelių.

Pavyzdžiui, yra dvi lentelės A ir B. Lentelėje A (batai) yra pirminis raktas: dydis, lentelėje B (spalva) turėtų būti stulpelis, vadinamas dydžiu. Šioje lentelėje „dydis“ bus išorinis raktas, skirtas loginiam lentelių B ir A sujungimui.

Sudėtingesnis pavyzdys.

Dvi duomenų lentelės: Žmonės ir Telefonų numeriai.

Lentelė: Žmonės

Lentelė: Telefonų numeriai

Telefonų numerių lentelėje PK yra unikalus. Šios lentelės FK yra Žmonių lentelės PK. Ryšį tarp telefono numerių ir žmonių užtikrina FK telefonų lentelės. Tai yra:

  • Zaicevas turi du telefonus;
  • Volkovas turi du telefonus;
  • Belkinas turi vieną telefoną.
pirminis raktas ir išorinis raktas

Baigdamas pridursiu, kad bet koks Duomenų bazės tvarkyklė turi techninę galimybę sukurti pirminį raktą.



 


Skaityti:



Mini techninio mąstymo testas

Mini techninio mąstymo testas

Kompleksinė paauglių bendrųjų gebėjimų diagnostika specializuoto ugdymo kontekste III DALIS 3. Kognityvinės sferos diagnostika 3.3. Bandymas...

Pateikite buto, namo ir kito nekilnojamojo turto pardavimo skelbimą nemokamai. Pateikite greito namo pardavimo skelbimą

Pateikite buto, namo ir kito nekilnojamojo turto pardavimo skelbimą nemokamai. Pateikite greito namo pardavimo skelbimą

Būsto pardavimas yra sudėtingas procesas, reikalaujantis atsižvelgti į daugybę niuansų. Norėdami pagreitinti procesą, ekspertai pataria kreiptis į profesionalus. Tačiau...

Uždirbti pinigų skaitant laiškus Skaitant laiškus, bet už tai atlyginama

Uždirbti pinigų skaitant laiškus Skaitant laiškus, bet už tai atlyginama

Paprasčiausias būdas užsidirbti pinigų internete, kur galima pradėti dirbti – užsidirbti pinigų skaitant reklaminius laiškus, kuriuos tau siunčia reklamos užsakovai...

Medžiaga tema: Koncertinė programa „Iš visos širdies“ TV laida iš visos širdies visi epizodai

Medžiaga tema: Koncertinė programa

Apskritai programa pasakojo apie nenuspėjamus ir sudėtingus sovietų žmonių likimus. Dauguma žiūrovų negalėjo sulaikyti ašarų, kai...

tiekimo vaizdas RSS