Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Iron
  • Ograničenje PRIMARY KEY. Korištenje više ključeva u jednoj transformaciji

Ograničenje PRIMARY KEY. Korištenje više ključeva u jednoj transformaciji

anotacija?, (simpleType | complexType)?, (jedinstveni | ključ | keyref)*

(Znak ? označava da se element može pojaviti nula ili jednom, znak * označava da se element može pojaviti nula, jednom ili više puta unutar elementa element.)

Atributi

Atribut Opis
id Nije potrebno. Određuje jedinstveni identifikator za element
ime Nije potrebno. Određuje ime elementa. Ovaj atribut je obavezan ako je roditeljski element element sheme
ref Nije potrebno. Odnosi se na ime drugog elementa. Atribut ref može uključivati ​​prefiks prostora imena. Ovaj atribut se ne može koristiti ako je roditeljski element element sheme
tip Nije potrebno. Određuje ili ime ugrađenog tipa podataka ili ime elementa simpleType ili complexType
supstitucijska grupa Nije potrebno. Određuje ime elementa koji se može zamijeniti ovim elementom. Ovaj atribut se ne može koristiti ako roditeljski element nije element sheme
default Nije potrebno. Određuje zadanu vrijednost elementa (može se koristiti samo ako je sadržaj elementa jednostavan tip ili tekst)
fiksno Nije potrebno. Određuje fiksnu vrijednost za element (može se koristiti samo ako je sadržaj elementa jednostavnog tipa ili teksta)
formu Nije potrebno. Određuje oblik elementa. Vrijednost "kvalificiran" označava da bi ovaj element trebao biti kvalificiran prefiksom prostora imena. Vrijednost "nekvalificiran" označava da ovaj element ne mora biti kvalificiran prefiksom prostora imena. Zadana vrijednost je vrijednost atributa elementFormDefault atributa elementa sheme. Ovaj atribut se ne može koristiti ako je roditeljski element element sheme
maxOccurs Nije potrebno. Određuje maksimalni broj puta da se element može pojaviti u nadređenom elementu. Vrijednost može biti bilo koji cijeli broj >= 0, ali ako trebate ukloniti ograničenje upotrebe, tada biste trebali navesti ključnu riječ "neograničeno". Zadana vrijednost je 1. Ovaj atribut se ne može koristiti ako je roditeljski element element sheme.
minOccurs Nije potrebno. Određuje minimalni broj puta da se element može pojaviti u nadređenom elementu. Vrijednost može biti bilo koji cijeli broj >= 0. Zadana vrijednost je 1. Ovaj atribut se ne može koristiti ako je roditeljski element element sheme
nillable Nije potrebno. Određuje može li se elementu dodijeliti eksplicitno nula vrijednost nula. Vrijednost true omogućava elementu da postavi atribut nil na true. Atribut nil je definiran kao dio imenskog prostora XML Schema. Zadana vrijednost je lažna
apstraktno Nije potrebno. Određuje da li se ovaj element može koristiti u dokumentu. Vrijednost true specificira da se element ne može koristiti u dokumentu. Umesto toga, na mestu dati element mora se pojaviti drugi element čiji atribut substitutionGroup sadrži prefiksno ime (QName) tog elementa. Zadana vrijednost je lažna
blok

Nije potrebno. Sprečava upotrebu elementa koji ima dati tip nasljeđivanje, umjesto datog elementa. Može biti #all ili lista proširenja/ograničenja/zamjena:

  • ekstenzija - onemogućava upotrebu elemenata izvedenih ekstenzijom
  • ograničenje - zabranjuje korištenje elemenata izvedenih iz ograničenja
  • zamjena - zabranjuje korištenje zamijenjenih elemenata
  • #all - zabranjuje upotrebu elemenata izvedenih iz svih metoda nasljeđivanja
final

Nije potrebno. Onemogućuje navedeni metod nasljeđivanja elemenata. Može biti #all ili lista ekstenzija/ograničenja:

  • ekstenzija - onemogućuje nasljeđivanje elementa s ekstenzijom
  • ograničenje - zabranjuje nasljeđivanje elementa korištenjem ograničenja
  • #all - onemogućuje sve metode nasljeđivanja
bilo kakvih atributa Nije potrebno. Bilo koji drugi atributi izvan imenskog prostora sheme

Primjeri upotrebe elemenata

Primjer #1
IN sljedeći primjer proglasio XML Schema sa četiri jednostavna elementa "fname", "lname", "age" i "dateborn":

Primjer #2
Sljedeći primjer deklarira XML shemu s elementom "note" složenog tipa. Element "napomena" sadrži četiri jednostavna elementa - "do", "od", "heading" i "body":

Primjer #3
Sljedeći primjer je sličan primjeru #2. Jedina razlika je u tome što se atribut ref koristi za upućivanje na nazive elemenata:

Element ključ definira vrijednost atributa ili elementa kao ključ (ne-null, jedinstven i uvijek prisutan) u elementu koji sadrži prikazani dokument. Element ima sljedeći format:

< prefiks: ključ

id= ID

name= NCName

(apstraktno?, (selektor, polje+ ))

prefiks: taster>

Atributi id I imejedinstven.

ključ, selektorIpolje:

xs: ključ>

U ovom primjeru, polja " forename" I " prezime" koristi se kao ključ imenovan puno ime.

Element keyref određuje da vrijednost atributa ili elementa odgovara vrijednostima izvan dati ključ ili jedinstveni element i ima sljedeći format:

< prefiks: keyref

id= ID

name= NCName

refer = Qname

(apstraktno?, (selektor, polje+))

prefiks:keyref>

Atributi id I ime imaju isto značenje kao i za element jedinstven, i traženi atribut refer specificira ime ključa ili jedinstvenog elementa definiranog u ovoj ili drugoj šemi.

Primjer upotrebe elementakeyref, selektorIpolje:

U ovom primjeru, polja "@ prvo" I "@ zadnji" podudaraju se s ključnim vrijednostima elementa definiranog iznad imena puno ime.

4.2.9. Definiranje složenog tipa u XML šemi

Složeni tip elementa complexType je XML element koji sadrži druge elemente i/ili atribute. Postoje četiri vrste složenih elemenata:

    prazni elementi;

4.2.9.1. Format definicije elementa complexType

Složena definicija tipa ima sljedeći format:

< prefiks: complexType

name= NCName

id= ID

sažetak = boolean : false

mixed = boolean : false

blok =(#all| Lista(proširenje| ograničenje))

final =(#all|Lista(proširenje|ograničenje))

(apstraktno?, (simpleContent | complexContent |

((sekvenca | grupa | sve | izbor)?,

((atributi | attributeGroup)*, anyAttribute?))))

prefiks: complexType>

Atributi ime I id u elementu complexType imaju isto značenje kao u elementu atributi, dok su atributi apstraktno, blok I final- isto značenje kao u elementu element. Atribut mješovito određuje da li se podaci o znakovima mogu pojaviti između podređenih elemenata definicije složenog tipa.

Kao što možete vidjeti iz definicije složenog tipa, ovom elementu se može dati jedna od sljedećih opcija sadržaja:

    element simpleContent;

    element complexContent;

    jedan od elemenata grupa, sve, izbor ili sekvenca(0 ili 1 puta), jedan od elemenata atributi ili attributeGroup(0 ili više puta) i element anyAttribute(0 ili 1 put).

Razmislite podređeni elementi element complexType.

4.2.9.2. sekvenca, bilo koji, izbor, svi i grupni elementi

Element sekvenca specificira da se podređeni elementi datog elementa moraju pojaviti u navedenom nizu i ima sljedeći format:

< prefiks: sekvenca

id= ID

maxOccurs = (nonNegativeInteger | neograničeno) : 1

minOccurs = nonNegativeInteger : 1

(apstraktno?, (element | grupa | izbor | sekvenca | bilo koji)*)

prefiks: sekvenca>

Opcijski atribut idmaxOccurs I minOccurs postaviti maksimalnu i minimalnu vrijednost za broj uključivanja date sekvence u roditeljski element.

Primjerkoristitielementredoslijed:

xs: element>

U primjeru, element pod nazivom personinfo(podaci o zaposlenima). Ovaj element sadrži podređene elemente ime I prezime, kao i redoslijed elemenata dijete(dijete) - ovaj niz može biti odsutan ili sadržavati neograničen broj elemenata dijete.

Kao što možete vidjeti iz deklaracije elementa sekvenca, sadržaj ovog elementa može sadržavati podređeni element bilo koji. Ovaj element vam omogućava da proširite XML dokument elementima koji nisu definirani u šemi i ima sljedeći format:

< prefiks: bilo koji

id= ID

maxOccurs = (nonNegativeInteger | neograničeno) : 1

minOccurs = nonNegativeInteger : 1

imenski prostor = ((##bilo koji| ##other) | Lista (anyURI |

(##targetNamespace| ##local))) : ##bilo koji

processContents = (strog| opušten| preskoči) : strog

(apstraktno?)

prefiks: bilo koji>

Opcijski atribut id specificira jedinstveni identifikator za element i opcione atribute maxOccurs I minOccurs postaviti maksimalnu i minimalnu vrijednost za broj uključivanja elemenata bilo koji na roditeljski element. Opcijski atribut imenskog prostora definira prostore imena koji sadrže elemente koji se mogu koristiti u nadređenom elementu i mogu biti jedna od sljedećih vrijednosti:

    ## bilo koji– elementi iz bilo kojeg imenskog prostora su dozvoljeni;

    ## ostalo– mogu biti prisutni elementi iz bilo kojeg imenskog prostora osim imenskog prostora specificiranog za roditeljski element;

    ## lokalni– elementi moraju biti specificirani ne iz imenskog prostora;

    ## ciljimenskog prostora– elementi iz imenskog prostora specificiranog za roditeljski element mogu biti prisutni;

    Lista(anyURI| (## targetNamespace|## lokalni))) - elementi sa date liste mogu biti prisutni.

Opcijski atribut processContents definira kako XML procesor treba organizirati obradu elemenata definiranih ovim elementom bilo koji i može imati jednu od sljedećih vrijednosti:

    strog– XML procesor mora dobiti šemu potrebnih imenskih prostora i potvrditi elemente;

    opušten– slično strog, ali ako se šema ne može dohvatiti, neće se generirati poruka o grešci;

    preskoči– XML procesor preskače validaciju elementa.

bilo koji:

< xs: elementime=" osoba">

xs: complexType>

xs: element>

Korišćenjem elementa bilo koji možete proširiti sadržaj elementa osoba(poslije elementa prezime) bilo kojim drugim elementom.

Element izbor omogućava postavljanje u roditeljski element samo jednog od elemenata prisutnih na listi i ima sljedeći format:

< prefiks: izbor

id= ID

maxOccurs = (nonNegativeInteger | neograničeno) : 1

minOccurs = nonNegativeInteger : 1

(apstraktno?, (element | grupa | izbor | sekvenca | bilo koji)*)

prefiks: izbor>

Opcijski atribut id specificira jedinstveni identifikator za element i opcione atribute maxOccurs I minOccurs postaviti maksimalnu i minimalnu vrijednost za broj uključivanja odabranog elementa u roditeljski element.

Primjerkoristitielementizbor:

< / xs:element>

Element osoba mora sadržavati jedan od prethodno opisanih elemenata: zaposlenik(uposlenik na neodređeno vrijeme) ili freelance(izvođač radova).

Element sve specificira da se elementi koje sadrži mogu pojaviti u nadređenom elementu bilo kojim redoslijedom, a svaki element se može pojaviti 0 ili 1 put. Element ima sljedeći format:

< prefiks: sve

id= ID

maxOccurs = 1 : 1

minOccurs = (0 | 1 ) : 1

(apstraktno?, element*)

prefiks: sve>

Opcijski atribut id specificira jedinstveni identifikator za element. Opcijski atribut maxOccurs mora imati vrijednost 1 i opcijski atribut minOccurs postavlja minimalnu vrijednost za broj puta kada je odabrani element uključen u roditeljski element ( 0 ili 1 ).

Primjer upotrebe elementasve:

< xs: elementime=" osoba">

Elementi ime I prezime može se pojaviti u elementu u elementu osoba bilo kojim redoslijedom, a jedan ili oba elementa mogu nedostajati.

Element grupa koristi se za specifikaciju grupe elemenata u složenoj definiciji tipa i ima sljedeći format:

< prefiks: grupa

id= ID

name= NCName

ref= Qname

maxOccurs = nonNegativeInteger | neograničeno : 1

minOccurs = nonNegativeInteger : 1

(apstraktno?, (sve | izbor | sekvenca))

prefiks: grupa>

Atribut ime specificira ime elementa. Potreban je samo ako je roditelj elementa element shema ili element redefinisati. Atribut ref specificira vezu do naziva druge grupe (atributi ime I ref se međusobno isključuju). Opcioni atributi maxOccurs I minOccurs postaviti maksimalnu i minimalnu vrijednost za broj uključivanja elemenata grupe u roditeljski element.

Primjer upotrebe elementagrupa:

< xs: grupaime=" customGroup">

xs: complexType>

U ovom primjeru definirana je grupa customGroup, koji se sastoji od dva elementa: kupac(kupac) i orderDetails(detalji narudžbe), a zatim se ova grupa koristi (po referenci) u definiciji složenog tipa orderType.

Pitanja potrebna programeru da kreira klijent-server aplikacije korišćenjem Firebird DBMS-a, koji je evolucija DBMS-a Borland Interbase 6. Dat je pregled koncepata i modela arhitekture klijent/server, kao i praktični saveti za rad sa Firebird klijentskim bibliotekama. Karakteristike tipova su detaljno opisane SQL podaci, Sintaksa i operatori jezika za upravljanje podacima (DML) i jezika definicije podataka (DDL). Mnogo pažnje se poklanja opisu transakcija i savjetima o njihovoj upotrebi u razvoju aplikacija. Opisuje programiranje na strani klijenta i servera, pisanje okidača i pohranjenih procedura, kreiranje i korištenje događaja baze podataka, rukovanje greškama u kodu na serveru i još mnogo toga. Materijal je popraćen brojnim primjerima, savjetima i praktičnim preporukama.

Za programere baza podataka

knjiga:

Ograničenje PRIMARY KEY

Odjeljci na ovoj stranici:

Ograničenje PRIMARY KEY

PRIMARNI KLJUČ je ograničenje integriteta na nivou kolone – skup održavanih pravila – koje formalno označava kolonu ili grupu kolona kao jedinstveni identifikator za svaki red u tabeli.

Ako na Firebird dođete iz RDBMS-a koji podržava koncept "primarnog indeksa" za definiranje ključa (obično sistemi bazirani na fajlovima kao što su Paradox, Access i MySQL), onda Firebird i svijet SQL standardi ti razumijes. Primarni ključ nije indeks, već ograničenje. Jedno od pravila za takvo ograničenje je da ograničenje mora imati specifično jedinstveni indeks jednog ili više nepraznih elemenata koji su s njim povezani.

Jednostavno kreiranje takvog indeksa ne stvara primarni ključ. Međutim, kreiranje ograničenja primarnog ključa rezultira kreiranjem potrebnog indeksa koji se sastoji od kolona navedenih u deklaraciji ograničenja.

PAŽNJA! Ne morate da uvezete postojeći "primarni indeks" iz naslijeđenog sistema baziranog na datotekama ili kreirate takav indeks dok čekate da se deklarira ograničenje primarnog ključa. Firebird ne može nametnuti ograničenje primarnog ključa na postojeći indeks - by najmanje in postojeće verzije, uključujući 1.5 - i optimizator upita neće raditi ispravno sa dupliranim indeksima.

Tabela može imati samo jedan primarni ključ. Kada definirate ograničenje, Firebird automatski kreira traženi indeks koristeći skup imenovanih pravila. U nastavku se raspravlja o imenima indeksa primarnog ključa.

PAŽNJA! Ako konvertujete bazu podataka u Firebird iz bilo kog izvora osim InterBasea ili Oraclea, onda morate Posebna pažnja po šemi za imena i ograničenja primarnog ključa.

Iako ograničenje PRIMARY KEY samo po sebi nije referentno ograničenje, ono je obično obavezan dio svakog referentnog ograničenja, budući da je potencijalna meta REFERENCES klauzule ograničenja FOREIGN KEY. Pogledajte poglavlje 17 za detalje.

Odabir primarnog ključa

Identificiranje stupaca kao kandidata za primarni ključ je izvan opsega ovog izdanja. Napisano je mnogo odličnih knjiga o normalizaciji, procesu smanjenja redundantnosti i ponavljanja grupa u skupovima podataka, te ispravnoj identifikaciji elementa koji jedinstveno predstavlja jedan red u tabeli. Ako ste novi u relacionim bazama podataka, neće koštati mnogo da pročitate dobru knjigu o modeliranju podataka.

Kandidat za primarni ključ, koji može biti jedna kolona ili grupa kolona, ​​ima dva obavezna zahtjeva.

* Atribut NOT NULL mora biti deklarisan za sve kolone u grupi od jedne ili više kolona. Integritet ključa može se nametnuti samo poređenjem vrijednosti, a NULL nije vrijednost.

* Kolona ili grupa kolona mora biti jedinstvena - to jest, ne može biti više od jednog reda sa istim vrijednostima u tabeli. Na primjer, broj vozačke dozvole ili socijalno osiguranje mogu se smatrati kandidatima jer ih generiraju sistemi koji ne dozvoljavaju duple brojeve.

Ovim teorijskim "postavkama" mora se dodati i treća.

* Ukupna veličina ključeva kandidata mora biti 252 bajta ili manje. Ne radi se samo o brojanju znakova. Ovo ograničenje se mora smanjiti – u nekim slučajevima drastično – ako postoji više kolona, ​​nebinarni niz sortiranja ili višebajtni skup znakova.

Kako vas stvarni podaci mogu dovesti do neuspjeha

Koristeći tabelu EMPLOYEE u bazi podataka employee.fdb iz direktorija /examples u korijenskom direktoriju Firebird (employee.gdb u verziji 1.0.x), da vidimo kako stvarni podaci mogu učiniti vaše teorijske pretpostavke o jedinstvenosti pogrešnim. Evo deklaracije koja pokazuje značajne podatke pohranjene u ovoj tabeli:

KREIRAJ STO ZAPOSLENI (

FIRST_NAME VARCHAR(15) NIJE NULL,

/* pogodite: zaposleni mora imati ime */

LAST_NAME VARCHAR(20) NIJE NULL,

/* pretpostavka: zaposleni mora imati prezime */

PHONE_EXT VARCHAR(4),

HIRE_DATE DATE DEFAULT CURRENT_DATE NOT NULL,

DEPT_NO CHAR(3) NIJE NULL,

JOB_CODE VARCHAR(5) NIJE NULL,

POSAO_GRADE SMALLINT NIJE NULL,

JOB_COUNTRY VARCHAR(15) NOT NULL,

PLATA NUMERIČKA (15, 2) ZADANO 0 NIJE NULL,

FULL_NAME IZRAČUNANO OD FIRST_NAME || " " || PREZIME);

Zapravo, ova struktura nema ključnog kandidata. Nije moguće identificirati jedan red zaposlenika koristeći (FIRST_NAME, LAST_NAME) kao ključ, jer kombinacija dva elementa može imati srednju do veliku vjerovatnoću da će biti duplicirana u organizaciji. Nećemo moći voditi evidenciju o dvojici zaposlenika po imenu John Smith.

Da biste dobili ključeve, morate nešto izmisliti. Ovo "nešto" je mehanizam poznat kao surogat ključ.

Surogat ključevi

Već smo pokrili surogat ključ u uvodnoj temi o ključevima u poglavlju 14. Surogat primarni ključ je vrijednost koja jamči jedinstvenost i nema značenje koja se koristi kao zamjena za ključ u strukturi tablice koja ne može pružiti ključnog kandidata u vlastitu strukturu. Iz tog razloga, EMP_NO (deklariran preko domene) se dodaje u tablicu EMPLOYEE da djeluje kao surogat ključ:

CREATE DOMAIN EMPNO SMALLINT ;

ALTER TABLE EMPLOYEE

ADD EMP_NO EMPNO NOT NULL,

DODAJ OGRANIČENJE PK_EMPLOYEE

PRIMARYKEY(EMP_NO) ;

Ova baza podataka također sadrži generator pod nazivom EMP_NO_GEN i okidač Prije umetanja pod nazivom SET_EMP_NO u tabeli EMPLOYEE da biste dobili vrijednost ovog ključa u trenutku umetanja nova linija. U sek. "Implementacija ključeva za automatsko povećanje" u poglavlju 31 detaljno opisuje ovu tehniku. Ovo je preporučeni način implementacije zamjenskih ključeva u Firebirdu.

Možda ćete htjeti razmotriti prednosti korištenja zamjenskog primarnog ključa, ne samo u slučajevima kada tabela ne može predložiti kandidata, već iu slučajevima kada je vaš ključni kandidat kompozitni.

Kompozitni primarni ključevi

U procesu analize podataka ponekad je moguće pronaći jednu jedinstvenu kolonu u strukturi podataka. Teorija je da se pronađu dvije ili više kolona grupisanih zajedno kao ključ koji će garantirati jedinstvenost reda. Kada se kombinuje više kolona kako bi se formirao ključ, ključ se naziva kompozitnim ključem ili ponekad složenim ključem.

Ako ste imali iskustva sa sistemima baza podataka kao što je Paradox koji su koristili kompozitne ključeve za implementaciju hijerarhijskih odnosa, vjerovatno ćete se teško odreći ideje da morate živjeti bez njih. Za sada, u praksi, kompozitne ključeve treba smatrati vrlo ograničenim u DBMS-ovima kao što je Firebird, gdje nema prelaska fizičkih indeksnih struktura na disku radi implementacije odnosa.

U Firebirdu nema potrebe za kompozitnim indeksima, a štaviše, kompozitni indeksi stvaraju neke probleme dizajna i performansi za velike tabele.

* Kompozitni ključevi se obično sastoje od ne-atomskih ključnih elemenata - tj. odabrani stupci imaju semantičko značenje (oni su "smisleni podaci") i nesumnjivo su osjetljivi na vanjske promjene i greške ručnog unosa.

* Strani ključevi iz drugih tabela koje se pozivaju na ovu tabelu će duplicirati svaki element složenog ključa. Referentni integritet je ugrožen kada se koriste ne-atomski ključevi. Kombinacija neatomskih elemenata povećava rizik.

* Ključevi - strani kao i primarni - imaju konstantne indekse. Kompozitni indeksi imaju stroža ograničenja veličine od indeksa sa jednim stupcem.

* Kompozitni indeksi imaju tendenciju velike veličine. Veliki indeksi koriste više stranica baze podataka, uzrokujući da indeksne operacije (sortiranje, spajanje i poređenje) budu sporije nego što je potrebno.

Atomičnost kolona primarnog ključa

Dobra je praksa ne uključivati ​​kolone koji imaju smisla kao podaci u primarnim i stranim ključevima. Time se krši jedan od osnovnih principa dizajna relacionih baza podataka - atomičnost. Princip atomicnosti zahtijeva da svaki element podataka postoji u potpunosti za sebe sa jednim jedinim interno pravilo upravljanje svojim postojanjem.

Da bi primarni ključ bio atomski, morate biti izvan ljudskih odluka. Ako ga ljudi sastavljaju ili klasifikuju, on nije atomski. Ako je predmet bilo kojeg pravila osim zahtjeva NOT NULL i jedinstvenosti, nije atomski. U gornjem primjeru, čak ni vozačka dozvola ili broj socijalnog osiguranja ne ispunjavaju zahtjeve atomiziranosti za primarni ključ jer su predmet eksternih sistema.

Sintaksa deklaracije primarnog ključa

Možete koristiti nekoliko sintakse da biste dodijelili ograničenje PRIMARY KEY stupcu ili grupi stupaca. Svi stupci koji su članovi primarnog ključa moraju biti unaprijed definirani s atributom NOT NULL. Budući da ne možete dodati NOT NULL ograničenje u stupac nakon što je kreiran, morate se pobrinuti za ovo ograničenje prije korištenja drugih ograničenja.

Ograničenje PRIMARY KEY može se primijeniti u bilo kojoj od sljedećih faza kreiranja metapodataka:

* u definiciji stupca u izrazu CREATE TABLE ili ALTER TABLE kao dio definicije stupca;

* u definiciji tablice u izrazu CREATE TABLE ili ALTER TABLE kao zasebno definirano ograničenje tablice.

Definicija primarnog ključa kao dio definicije stupca

Sljedeća sekvenca kreira i urezuje domenu koja ne dozvoljava prazna vrijednost, tada je definirana kolona primarnog ključa zasnovana na toj domeni, a ograničenje PRIMARY KEY se istovremeno primjenjuje na tu kolonu:

CREATE DOMAIN D_IDENTITY KAO BIGINT NOT NULL;

KREIRAJ TABLIČNU OSOBU (

PERSON_ID D_IDENTITY PRIMARNI KLJUČ,

Firebird kreira ograničenje tabele pod nazivom INTEG_M i indeks pod nazivom RDB$PRIMARYnn. (pl u svakom slučaju je broj koji je dao generator. Ova dva broja nisu međusobno povezana.) Ne možete promijeniti koja su ova imena i ne možete ih promijeniti.

Rezultat će biti sličan ako koristite isti pristup kada dodajete kolonu koristeći naredbu ALTER TABLE i kreirate primarni ključ u jednoj rečenici:

ALTER TABLEBOOK

ADD BOOK_ID D_IDENTITY PRIMARY KEY;

Definiranje primarnog ključa kao imenovanog ograničenja

Drugi način za definiranje primarnog ključa u definiciji tablice je dodavanje deklaracije ograničenja na kraju definicija stupca. Deklaracije ograničenja se postavljaju zadnje jer zavise od postojanja kolona na koje se odnose. Ova metoda vam daje mogućnost imenovanja ograničenja. Sljedeća deklaracija se odnosi na ograničenje primarnog ključa kao PK_ATABLE:

CREATE TABLE ATABLE (

ID BIGINT NIJE NULL,

ANOTHER_COLUMN VARCHAR(20),

OGRANIČENJE PK_ATABLE PRIMARY KEY(ID));

Firebird sada koristi PK_ATABLE kao ime ovog ograničenja umjesto da koristi sistemski generirano ime RDB$PRIMARYnnn. U Firebird-u 1.5 i novijim, on takođe nameće korisnički definisano ime ograničenja za jedinstveni indeks podrške. U ovom primjeru, indeks će biti nazvan PK_ATABLE, kada će ga druge verzije nazvati RDB$PRIMARYnnn.

Tokom procesa dizajna baze podataka, donosi se odluka o tome koje tabele treba da budu uključene u bazu podataka, koja imena (identifikatore) će imati, koje vrste podataka će biti potrebne za pravljenje tabela i koji će korisnici imati pristup svakoj od njima. Osim toga, za efektivno stvaranje tabele za odgovore na sljedeća pitanja:

  • Koje vrste i veličine kolona će činiti svaku od tabela, koja imena treba izabrati za kolone tabela?
  • Šta kolone mogu sadržavati null vrijednost ?
  • Hoće li se koristiti ograničenja integriteta, zadane vrijednosti i pravila za stupce?
  • Da li je potrebno indeksiranje stupaca, koje vrste indeksa će se primijeniti na određene stupce?
  • Koje kolone će biti uključene u primarni i strani ključ.

Za kreiranje tabela u MS okruženju SQL Server koristi se naredba:

<определение_таблицы>::= CREATE TABLE [ ime_baze podataka.[vlasnik]. | vlasnik. ]table_name (<элемент_таблицы>[,...n])

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

Obično je vlasnik tabele (dbo) osoba koja ju je kreirala.

<Выражение>postavlja vrijednost za izračunata kolona. Izračunate kolone su virtualne kolone, tj. nisu fizički pohranjene u tablici i izračunavaju se korištenjem vrijednosti stupaca iste tablice. U izrazu za izračunata kolona mogu biti prisutni regularni nazivi stupaca, konstante i funkcije povezane s jednim ili više operatora. Podupiti u takvom izrazu ne mogu sudjelovati. Izračunate kolone može biti uključeno u SELECT odjeljak kada navedete listu kolona koje treba vratiti kao rezultat izvršenja upita. Izračunate kolone ne mogu biti dio stranog ključa, ne koriste zadane vrijednosti. osim toga, izračunate kolone ne može učestvovati u operacijama INSERT i DELETE.

<определение_столбца>::= (ime_kolone<тип_данных>) [ [ ZADANO<выражение>] | [ IDENTITET (početak, korak) ]]] [<ограничение_столбца>][...n]]

U definiciji stupca obratite pažnju na parametar IDENTITY, koji označava da će odgovarajuća kolona biti counter column. Za tabelu se može definirati samo jedan stupac s ovim svojstvom. Možete dodatno odrediti početna vrijednost i korak inkrementa. Ako ove vrijednosti nisu specificirane, obje su zadane na 1. Ako ključna riječ IDENTITET NIJE ZA REPLIKACIJU, tada server neće automatski generirati vrijednosti za tu kolonu, već će dozvoliti da se proizvoljne vrijednosti umetnu u kolonu.

Ograničenja su ograničenja stupaca I ograničenja tabele. Razlika između njih je u tome ograničenje stupca odnosi se samo na određeno polje, i ograničenje tabele- na grupe od jednog ili više polja.

<ограничение_столбца>::= [ Ograničenje ime ] ( [ NULL | NOT NULL ] | [ (PRIMARNI KLJUČ | JEDINSTVEN ) [ CLUSTERED | NENCLUSTERED ] [ WITH FILLFACTOR=fillfactor ] [ ON (ime grupe datoteka | DEFAULT ) ] ] ] [ KEY [ C ] | table_genus_name [(naziv_stupca_table_genus) ] [ NA BRISANJE ( KASKADA | BEZ AKCIJE ) ] [ NA AŽURIRANJE ( KASCADA | BEZ AKCIJE ) ] [ NIJE ZA REPLIKACIJU ]] | PROVJERI [ NIJE ZA REPLIKACIJU](<лог_выражение>) } <ограничение_таблицы>::= ( [ (PRIMARNI KLJUČ | JEDINSTVEN ) [ CLUSTERED | NENCLUSTERED ] ((ime_kolone [,...n])) ] |STRANI KLJUČ[(naziv_kolone [,...n])] REFERENCE ime_roda_tabele [(naziv_stupca_rod_tabele [ ,...n])] [ NA BRISANJE ( KASKADA | BEZ AKCIJE ) ] [ NA AŽURIRANJE ( KASKADA | BEZ AKCIJE ) ] | NIJE ZA REPLIKACIJU ] | PROVJERI [ NIJE ZA REPLIKACIJU ] (boolean) )

Razmotrite pojedinačne parametre predstavljenih struktura povezanih s ograničenjima integritet podataka. Ograničenja integriteta imaju prednost nad okidačima, pravilima i zadanim vrijednostima. TO ograničenja integriteta odnositi se ograničenje primarnog ključa PRIMARNI KLJUČ, ograničenje stranog ključa STRANI KLJUČ, JEDINSTVENO ograničenje, NULL ograničenje vrijednosti, CHECK.

Ograničenje primarnog ključa (PRIMARY KEY)

Tabela obično ima kolonu ili kombinaciju kolona čije vrijednosti jedinstveno identificiraju svaki red u tablici. Ova kolona (ili kolone) se poziva primarni ključ stola i potrebno je da se osigura njegov integritet. Ako postoji više od jedne kolone u primarnom ključu, tada se vrijednosti unutar jedne kolone mogu duplicirati, ali bilo koja kombinacija vrijednosti iz svih kolona primarni ključ mora biti jedinstven.

Tokom stvaranja primarni ključ SQL Server automatski kreira jedinstveni indeks na stupcima koji su dio primarnog ključa. Ubrzava pristup podacima tih kolona kada se koriste primarni ključ u zahtjevima.

Tablica može imati samo jedno ograničenje PRIMARY KEY, a nijedan od stupaca uključenih u primarni ključ ne može biti NULL. Prilikom pokušaja korištenja kao primarni ključ kolona (ili grupa kolona) za koju ograničenja primarnog ključa se ne izvrše, primarni ključ neće biti kreiran, a sistem će prikazati poruku o grešci.

Pošto ograničenje PRIMARY KEY jamči jedinstvenost podataka, često se definira za counter kolone. Kreacija ograničenja integriteta PRIMARNI KLJUČ je moguć i tokom kreiranja i tokom promjena stola. Jedan od termina primarni ključ je osigurati referentni integritet više tabličnih podataka. Naravno, ovo se može implementirati samo definisanjem odgovarajućih stranih ključeva u drugim tabelama.

Ograničenje stranog ključa (FOREIGN KEY)

ograničenje stranog ključa je glavni mehanizam za održavanje referentni integritet između stolova relaciona baza podaci. Stupac podređene tablice specificiran kao strani ključ u parametru FOREIGN KEY koristi se za upućivanje na kolonu roditeljske tablice koja se nalazi u njoj primarni ključ. Ime roditeljske tablice i stupci primarni ključ navedeni su u klauzuli REFERENCES. Podaci u kolonama definiranim kao strani ključ mogu poprimiti samo iste vrijednosti kao u pridruženim stupcima primarni ključ roditelj stol. Nije potrebno da se nazivi stupaca podudaraju s nadređenim i podređenim tablicama. Primarni ključ se može definirati za kolonu s jednim imenom, dok kolona koja podliježe ograničenju STRANI KLJUČ može imati potpuno drugačije ime. Jedini uslov je da se kolone podudaraju u tipu podataka i veličini.

Primarni ključ se može pozivati ​​ne samo na kolone drugih tabela, već i na kolone koje se nalaze u istoj tabeli kao i sam primarni ključ; ovo vam omogućava da kreirate rekurzivne strukture.

Strani ključ se može povezati ne samo sa primarni ključ drugi sto. Također se može definirati na stupcima s UNIQUE ograničenjem na drugoj tablici ili bilo kojoj drugoj koloni, ali tabele moraju biti u istoj bazi podataka.

Stupci stranog ključa mogu sadržavati NULL, ali provjera ograničenja FOREIGN KEY se zanemaruje. Strani ključ se može indeksirati, tada će server brže pronaći potrebne podatke. Strani ključ je definiran i pri kreiranju i na stolovi za presvlačenje.

Ograničenje referentni integritet specificira zahtjev da za svaki zapis u podređenoj tabeli mora postojati zapis u nadređenoj tabeli. U tom slučaju se blokira promjena vrijednosti stupca veze u zapisu nadređene tabele u prisustvu podređenog zapisa, kao i brisanje nadređenog zapisa (zabranjujući kaskadne promjene i brisanja), što je zagarantovano zadanim ON DELETE NO ACTION i ON UPDATE NO ACTION parametri. Za omogućavanje kaskade koristite opcije ON DELETE CASCADE i ON UPDATE CASCADE.

Top Related Articles