Aké sú externé klávesy SQL. Aký je primárny kľúč v databáze? Veľa pre mnohých

Vzťahuje sa na: SQL Server (od roku 2016) SQL AZURE BALG SQL AZUREPERAPERAL DATA BACKAKA

Primárne a externé klávesy sú dva typy obmedzení, ktoré možno použiť na zabezpečenie integrity údajov v tabuľkách SQL Server. Toto sú dôležité databázové objekty.

Táto téma je opísaná v nasledujúcich častiach.

Kľúčové obmedzenia

Obmedzenia zahraničných kľúčov

Súvisiace úlohy

Zvyčajne je tu stĺpec v tabuľke alebo kombinácii stĺpcov obsahujúcich hodnoty, ktoré jednoznačne definujú každý riadok stola. Tento stĺpec alebo stĺpce, sa nazývajú primárny kľúč (PK) tabuľky a zabezpečuje integritu podstaty tabuľky. Obmedzenia primárneho kľúča sú často definované v stĺpci identifikátora, pretože zaručujú jedinečnosť údajov.

Keď zadáte limit primárneho kľúča pre tabuľku komponentov, komponent databázového motora zaisťuje jedinečnosť dát automaticky vytvorením jedinečného indexu pre stĺpce primárnych kľúčov. Tento index poskytuje aj rýchly prístup k údajom pri používaní primárneho kľúča v dotazoch. Ak je primárne kľúčové obmedzenie nastavené na viac ako jeden stĺpec, hodnoty môžu byť duplikované v rámci jedného stĺpca, ale každá kombinácia hodnôt všetkých stĺpcov pri určovaní limitu primárneho kľúča by mala byť jedinečná.

Ako je uvedené v nasledujúcom výkrese, stĺpci Identifikačné číslo produktu a Vendorid. Stôl Nákup.ProductVendor Vytvorte kompozitný limit primárneho kľúča pre túto tabuľku. Je zaručená, že každý reťazec v tabuľke Productvendor má jedinečnú kombináciu hodnôt Identifikačné číslo produktu a Vendorid.. Tým sa zabráni vloženiu opakovacích línií.

    Tabuľka môže mať iba jedno primárne kľúčové obmedzenie.

    Primárny kľúč nemôže obsahovať viac ako 16 stĺpcov a celková dĺžka kľúča nemôže prekročiť 900 bajtov.

    Index generovaný obmedzením primárneho kľúča nemôže znamenať výstup počtu indexov v tabuľke za 999 neclustrovaných indexov a 1 klastrovanie.

    Ak nie je špecifikovaný na obmedzenie primárneho kľúča, či je index zoskupený alebo bez uzamykateľného, \u200b\u200bvytvorí sa zoskupený index, ak nie je nikto v tabuľke.

    Všetky stĺpce s primárnym kľúčovým obmedzením musia byť definované ako neplatené null. Ak nie je špecifikovaná platnosť hodnoty , potom sú všetky stĺpce s limitom primárneho kľúča nastavené ako neumožňujú null.

    Ak je primárny kľúč definovaný na stĺpci typu dát definovaného CLR, implementácia tohto typu by mal podporovať binárne triedenie.

Externý kľúč (FK) je stĺpec alebo kombinácia stĺpcov, ktorá sa používa na presadzovanie komunikácie medzi dátami v dvoch tabuľkách, aby sa mohli monitorovať údaje, ktoré možno uložiť do tabuľky externého tlačidla. Ak sa jeden alebo viac stĺpcov, v ktorých je primárny kľúč umiestnený pre jednu tabuľku, sa označuje v jednom alebo viacerých stĺpcoch inej tabuľky, potom externý klávesový odkaz vytvorí prepojenie medzi týmito dvoma tabuľkami. Tento stĺpec sa stáva externým kľúčom v druhej tabuľke.

Napríklad tabuľka Sales.SaalesorderHear. spojené s tabuľkou Sales.salesperson. Používanie externého tlačidla, pretože existuje logické prepojenie medzi príkazmi na predaj a predajcov manažérov. Stĺpec Predajca. Stôl Sales.SaalesorderHear. Zodpovedá stĺpci primárneho kľúča v tabuľke Predajca.. Stĺpec Predajca. Stôl Sales.SaalesorderHear. je externý kľúč pre tabuľku Predajca.. Nastavením tohto pripojenia na hodnotu externého kľúča pre Predajca. nie je možné vložiť do tabuľky Predajca.Ak v súčasnosti nie je obsiahnutý v tabuľke Predajca..

Maximálny počet tabuliek a stĺpcov, na ktorých sa tabuľka môže vzťahovať na externé kľúče (odchádzajúce odkazy), je 253. SQL Server 2016 zvyšuje limit na počte ďalších tabuliek a stĺpcov, ktoré môžu odkazovať na stĺpce v jednej tabuľke (prichádzajúce odkazy ), od 253 až 10 000. (Hladina kompatibility sa vyžaduje aspoň 130.) Zvýšenie má tieto obmedzenia: \\ t

    Prebytok 253 Odkazy na externé tlačidlá je podporované len pre DML Delete Operations. Operácie aktualizácie a zlúčenia nie sú podporované.

    Prebytok 253 Odkazy na externé klávesy nie sú v súčasnosti dostupné pre indexy stĺpcovia optimalizované pre pamäť tabuľky, databázu natiahnuť alebo rozdelené externé kľúčové tabuľky.

Indexy v obmedzeniach zahraničného kľúča

Na rozdiel od obmedzení primárneho kľúča pri vytváraní externého obmedzenia kľúča nie je zodpovedajúci index automaticky vytvorený. Často je však potrebné vytvoriť index pre externý kľúč manuálne z nasledujúcich dôvodov:

    Cudzie stĺpce kľúčov sa často používajú v kritériách pripojenia pri zdieľaní údajov dotačných dotazov z príslušných tabuliek. Toto je implementované mapovaním stĺpca alebo stĺpcov pri obmedzovaní externého tlačidla v jednej tabuľke s jedným alebo viacerými primárnymi stĺpcami alebo jedinečným kľúčom v inej tabuľke. Index umožňuje, aby zložka komponentu databázového motora rýchlo nájsť súvisiace údaje v tabuľke externého tlačidla. Vytvorenie indexu však nie je povinné. Údaje z dvoch súvisiacich tabuliek môžu byť kombinované, aj keď sa medzi tabuľkami nedefinujú vnútorné kľúčové alebo vonkajšie kľúčové obmedzenia, ale externé kľúčové spojenie medzi týmito dvoma tabuľkami ukazuje, že tieto dve tabuľky sú optimalizované na ko-použitie v žiadosti, kde Kľúče sa používajú ako kritériá.

    Pomocou obmedzení zahraničného kľúča v súvisiacich tabuľkách sa kontrolujú zmeny v obmedzeniach primárneho kľúča.

Vylepšiť integritu

Hlavnou úlohou obmedzenia externého tlačidla je spravovanie údajov, ktoré možno uložiť do tabuľky externého tlačidla, ale toto obmedzenie tiež riadi zmenu údajov v tabuľke primárnej klávesnice. Napríklad pri vymazaní reťazca pre obchodného manažéra z tabuľky Sales.salesperson.Ktorý identifikátor sa používa v predajných príkazoch v tabuľke Sales.SaalesorderHear.Referenčná integrita týchto dvoch tabuliek sa zlomí. Objednávky na predaj vzdialeného manažéra v tabuľke Predajca. bude neplatný bez komunikácie s údajmi v tabuľke Predajca..

Obmedzenie externého kľúča zabraňuje výskytu tejto situácie. Obmedzenie zabezpečuje integritu odkazov nasledovne: zakazuje zmenu údajov v tabuľke primárnej klávesnice, ak takéto zmeny robia neplatný odkaz v tabuľke externého tlačidla. Ak sa pokúsite odstrániť reťazec v primárnej tabuľke kľúčov alebo zmeniť hodnotu tohto tlačidla, zistí, že vzdialená alebo zmenená hodnota primárneho kľúča zodpovedá určitej hodnote v obmedzení externého kľúča v inej tabuľke, akcia nebude vykonať. Ak chcete úspešne zmeniť alebo odstrániť reťazec s externým obmedzením kľúčov, musíte najprv vymazať externé kľúčové údaje v tabuľke externého tlačidla alebo zmeniť údaje v tabuľke externého tlačidla, či je pripojený externý kľúč s ostatnými primárnymi kľúčovými údajmi.

Kaskádová referenčná integrita

Pomocou kaskádových referenčných obmedzení integrity môžete určiť akcie, ktoré komponent komponentov databázy bude trvať, keď sa používateľ pokúša odstrániť alebo aktualizovať kľúč, ku ktorému iní externé tlačidlá označujú. Možno definovať nasledujúce kaskádové akcie.

Žiadna akcia.
Súčasťou komponentu databázového motora vygeneruje chybu, po ktorej je spustená odstránenie alebo aktualizácia reťazca v materskej tabuľke.

Kaskáda.
Zodpovedajúce riadky sa aktualizujú alebo vymažú z referenčnej tabuľky, ak je tento reťazec aktualizovaný alebo odstránený z materskej tabuľky. Kaskádová hodnota nie je možné zadať, ak typový stĺpec Časová značka. Je súčasťou externého alebo referenčného kľúča. Akcia Cascade On Delete nie je možné zadať v tabuľke, pre ktorú je definovaný namiesto vymazania spúšte. Návrh kaskády na aktualizáciu nie je možné špecifikovať vo vzťahu k tabuľkám, pre ktoré sú definované namiesto spúšťačov aktualizácie.

Nastaviť null.
Všetky hodnoty tvoriace externé tlačidlo sú priradené , keď je zodpovedajúci riadok v materskej tabuľke aktualizovaný alebo odstránený. Ak chcete vykonať toto obmedzenie, externé stĺpce kľúčov by mali umožniť nulové hodnoty. Nepodarilo sa špecifikovať vo vzťahu k tabuľkám, pre ktoré sú definované namiesto aktualizačných spúšťačov.

Nastaviť predvolené nastavenie.
Všetky hodnoty, ktoré tvoria externý kľúč, pri vymazaní alebo aktualizácii príslušného riadku materskej tabuľky sú nastavené na predvolenú hodnotu. Ak chcete vykonať toto obmedzenie, musia mať všetky stĺpce externého tlačidla predvolené definície. Ak stĺpec umožňuje hodnoty null a predvolená hodnota nie je definovaná, null sa stáva predvolenou hodnotou stĺpca. Nepodarilo sa špecifikovať vo vzťahu k tabuľkám, pre ktoré sú definované namiesto aktualizačných spúšťačov.

Kľúčové slová Cascade, Nastavte NULL, Nastaviť predvolené nastavenie a žiadna akcia nie je možné kombinovať v tabuľkách, ktoré majú vzájomné referenčné väzby. Ak komponent komponentov databázového motora nerozpoznáva žiadne kľúčové slovo akcie, zastaví sa a vráti späť súvisiace kaskádové operácie, nastaviť null a nastavené predvolené. Ak vymažte inštrukciu obsahuje kombináciu kľúčových slov kaskády, nastaviť NULL, Nastaviť predvolené nastavenie a žiadnu akciu, potom všetky kaskádové operácie, nastaviť NULL a Nastaviť predvolené nastavenie sa vykonajú pred vyhľadávaním databázového motora komponentov žiadne akcie.

Spúšťače a kaskádové odkazy

Cascade Referencie Spustiť po aktualizácii alebo po odstránení spúšťačov nasledovne:

    Všetky kaskádové odkazy priamo spôsobené zdrojovým pokynmi vymazania alebo aktualizácie sa vykonávajú ako prvé.

    Ak sa po spustení definovaných pre zmenené tabuľky, tieto spúšťače sú splnené po splnení všetkých kaskádových akcií. Tieto spúšťače sa spúšťajú, aby sa zvrátili kaskádové akcie. Ak je definovaných niekoľko spúšťačov pre jednu tabuľku, bežia v náhodnom poradí, pokiaľ nie sú zvolené prvé aj posledné spúšťače tabuľky špecifikované. Tento postup je určený postupom.

    Ak sa vyskytnú sekvencie kaskádových akcií z tabuľky, čo bolo priamym cieľom odstrániť alebo aktualizovať akcie, poradie spúšťačov spúšte nie je definované týmito sekvenciami. Avšak, jeden postup akcií vždy spúšťa všetky jeho spúšťače predtým, ako začne robiť nasledujúci.

    Po spustení tabuľky, ktorý bol priamym cieľom vymazania alebo aktualizácie akcie, sa spustí bez ohľadu na to, či sa zmenili aspoň niektoré riadky. V tomto prípade kaskádovanie nemá vplyv na žiadne iné tabuľky.

    Ak jeden z predchádzajúcich spúšťačov vykonáva odstrániť alebo aktualizovať operácie cez iné tabuľky, tieto operácie môžu spôsobiť vlastné sekvencie kaskádových akcií. Tieto sekundárne sekvencie sa spracujú pre každú operáciu vymazania alebo aktualizácie po vykonaní všetkých spúšťačov primárnych sekvencií činností. Tento proces môže byť rekurzívne opakovaný pre následné vymazanie alebo aktualizačné operácie.

    Vykonávanie, meniť, odstrániť operácie alebo iné operácie DDL v rámci spúšťačov môže viesť k spusteniu spúšťačov DDL. To môže viesť k ďalšiemu odstráneniu alebo aktualizácii operácií, ktoré začne ďalšie sekvencie kaskádových akcií a spustia ich spúšťače.

    Ak sa vyskytne chyba v akejkoľvek konkrétnej sekvencii kaskádových referencií, v tejto sekvencii sa spustí žiadny postup po pripojení a pre vymazanie alebo aktualizáciu operácií sa vykoná.

    Tabuľka, pre ktorú je definovaná namiesto Trrigera, môže byť aj návrhom návrhu, ktorým sa označuje špecifická kaskádová akcia. Avšak, po spúšť Trigger Trigger Tabuľka môže vykonať vložku, aktualizovať alebo vymazať pokyny pre inú tabuľku alebo zobrazenie, ktorý pre tento objekt spustí namiesto časovača.

Nasledujúca tabuľka uvádza všeobecné úlohy spojené s obmedzeniami primárneho kľúča a externým kľúčom.

Takto sme sa priblížili na veľmi dôležitú tému - primárne a externé kľúče. Ak sa prvýkrát používa takmer všetko, potom sa druhý z nejakého dôvodu ignoruje. A márne. Externé klávesy nie sú problémom, je to skutočná pomoc pri integrite údajov.

1.2.5. Primárny kľúč

Už sme hovorili dosť veľa o kľúčových poliach, ale nikdy ich nepoužívali. Najzaujímavejšia vec, ktorú všetko fungovalo. To je výhoda a možno aj nedostatok databázy Microsoft SQL Server a MS Access Database. V tabuľkách Paradoxom nebude tento trik prejsť a bez prítomnosti kľúčového poľa, tabuľka sa bude len prečítať.

Kľúče sú do určitej miery obmedzenia a mohli by sa zobraziť s operátorom šeku, pretože oznámenie nastane podobne a dokonca používa vyhlásenie o obmedzení. Pozrime sa na tento proces v príklade. Ak to chcete urobiť, vytvorte tabuľku dvoch "gid" a "vcname". V tomto prípade je pole "GUNT" nainštalované ako primárny kľúč:

Vytvorenie tabuľky globálne_Unique_data (GUNT UniqueIdentifier Predvolené Newid (), vcname Varchar (50), Obmedzenie PK_GUID Primárne tlačidlo (GUID))

Najlepšie tu je obmedzený reťazec. Ako vieme, po tomto kľúčovom mene je názov obmedzenia a kľúčové reklamy nie sú výnimkou. Pre pomenovanie primárneho kľúča odporúčam použiť typ PK_IN NÁZOV, kde názov je názov poľa, ktorý by mal byť hlavným kľúčom. Redukcia PK pochádza z primárneho kľúča (primárny kľúč).

Potom, namiesto kontrole kľúčového slova, ktorý sme použili v obmedzeniach, stojí za to za hlavné kľúčové vyhlásenie, to je to, čo naznačuje, že nemusíme kontrolovať, ale primárny kľúč. V zátvorkách označte jeden alebo niekoľko polí, ktoré budú kľúčom.

Nezabudnite, že v kľúčovom poli môže existovať žiadna rovnaká hodnota v dvoch riadkoch, v tomto obmedzení primárneho kľúča identicky obmedziť jedinečnosť. To znamená, že ak urobíte pole na ukladanie názvu v primárnom kľúči, potom v takomto tabuľke nebude napísaný dva Ivanov s rôznymi menami. To narúša limit primárneho kľúča. Preto sú kľúče obmedzenia a sú vyhlásené, ako aj obmedzenie kontroly. Ale to nie je pravda pre primárne kľúče a sekundárne jedinečnosť.

V tomto príklade sa zobrazí pole UniqueIdentifier (GUID) ako primárny kľúč. Predvolená hodnota pre toto pole je výsledkom procesu newid servera.

Pozornosť

Pre tabuľku je možné vytvoriť iba jeden primárny kľúč.

Pre jednoduchosť príkladov je žiaduce použiť číselný typ ako kľúč a ak databáza umožňuje, bude lepšie, ak je typ "autoincrement" (automaticky zvyšuje / klesajúci číslo). V MS SQL Serveri je toto pole identity a v MS Access, toto je pole typu "počítadlo".

Nasledujúci príklad ukazuje, ako vytvoriť tabuľku produktov, v ktorom sa ako primárny kľúč objaví celé pole s automatickým zoomom:

Vytvorenie tabuľkových výrobkov (ID INT INTENTITY (1, 1), produkt Varchar (50), Ceny, Numerické číslo (10, 2), Obmedzenie PK_ID Primárne tlačidlo (ID))

Je to taký typ kľúča, ktorý budeme používať najčastejšie, pretože kľúčové pole bude uložené na vnímanie počtu a jednoduchšie a pracovať s nimi.

Primárny kľúč môže pozostávať z viac ako jedného stĺpca. Nasledujúci príklad vytvára tabuľku, v ktorej polia "ID" a "tovar" tvoria primárny kľúč, čo znamená, že index jedinečnosti sa vytvorí na oboch oblastiach:

Vytvorenie tabuľkových produktov1 (ID INT INTITTY (1, 1), produkt Varchar (50), cenové peniaze, číselné číslo (10, 2), obmedzenie PK_ID Primárne tlačidlo (ID, [Názov produktu]))

Veľmi často, programátori vytvárajú databázu s kľúčovým poľom vo forme celého čísla, ale je jasné, že niektoré oblasti by mali byť jedinečné. A prečo nie vytvoriť primárny kľúč z týchto oblastí, ktoré by mali byť jedinečné a nebudú musieť vytvoriť samostatné riešenia pre tento problém.

Jediným nedostatkom primárneho kľúča niekoľkých stĺpcov je problémom vytvárania pripojení. Tu sa musíte dostať z rôznych metód, ale problém je stále vyriešený. Stačí zadať jedinečné pole typu Identifier a komunikujte ho. ÁNO, V tomto prípade máme jedinečný primárny kľúč a pole typu UniqueIdentifier, ale táto redundancia nebude viac ako tá istá tabuľka, kde primárny kľúč jedinečný identifikátor a na poliach, ktoré unikátne obmedzenie musí byť jedinečné. Čo si môžete vybrať? Záleží na konkrétnej úlohe a z toho, s čím je vhodnejšie pracovať.

1.2.6. Externý kľúč

Externý kľúč je tiež obmedzenie obmedzenia a zobrazí spojenie medzi týmito dvoma tabuľkami. Predpokladajme, že máte dve tabuľky:

  • Názvy - Obsahuje mená ľudí a pozostáva z Identifierových polí (kľúčové pole), meno.
  • Telefóny - Telefónny stôl, ktorý sa skladá z identifikátora (pole Key), externý kľúč na komunikáciu s tabuľkou mien a reťazcovým poľa na ukladanie telefónneho čísla.

Jedna osoba môže mať niekoľko telefónov, takže sme rozdelili ukladanie dát do rôznych tabuliek. Obrázok 1.4 Vizuálne zobrazuje spojenie medzi oboma tabuľkami. Ak ste už pracovali s pripojenými tabuľkami, bude to pre vás stačiť. Ak počujete o pripojení prvýkrát, potom sa pozrieme na problém bližšie.

Napríklad podniknite tabuľku troch. Tabuľka 1.3 zobrazuje obsah tabuľky "mien". Tu sú len tri riadky a každý má svoj vlastný jedinečný hlavný kľúč. Pre jedinečnosť, keď vytvoríme tabuľku, vytvorte kľúč automaticky zvýšeným poľa.

Tabuľka 1.3 Tabuľka názvov obsahu

Tabuľka 1.4. Obsah tabuľky telefónov

Tabuľka 1.4 obsahuje päť telefónnych čísel. V poli hlavného tlačidla je tiež jedinečným hlavným kľúčom, ktorý môže byť tiež automaticky zvýšiť. Sekundárny kľúč je spojenie s hlavným kľúčom tabuľky mien. Ako funguje toto pripojenie? Petrova v tabuľke názvov ako hlavný kľúč stojí za číslo 1. V tabuľke telefónov na sekundárnom kľúči, hľadáme číslo 1 a získame čísla telefónnych čísel Petrov. Rovnaké so zvyškom záznamov. Vizuálne komunikácia je možné vidieť na obrázku 1.5.

Takéto skladovanie údajov je veľmi pohodlné. Ak neexistovala možnosť vytvárať súvisiace tabuľky, tabuľka názvov by musela skóre všetkých telefónnych čísel v jednom poli. Je nepohodlné z hľadiska používania, podpory a vyhľadávania údajov.

V tabuľke môžete vytvoriť niekoľko mien, ale nastane otázka - koľko. Jedna osoba môže mať len 1 telefón, a ja sme napríklad 3, nepočítajú pracovníkov. Veľký počet polí vedie k redundancii údajov.

Je možné, aby každý telefón v tabuľke názvov spustil samostatnú čiaru s priezviskom, ale je to jednoduché len pre taký jednoduchý príklad, keď potrebujete len zadať meno a ľahko môžete urobiť viac záznamov pre Petrov s niekoľkými telefónmi čísla. A ak sú polia 10 alebo 20? Tvorba dvoch tabuliek pripojených externým kľúčom je možné vidieť v zozname 1.6.

Zoznam 1.6. Vytvorenie tabuliek súvisiacich s externým kľúčom

Vytvorenie názvov tabuľky (IDNAME INT IDENTITY (1,1), VCNAME VARCHAR (50), CONTRAINT PK_GUID Primárne kľúč (IDNAME),) Vytvorenie telefónnych telefónov (IDPHONE ITT ITTITITY (1,1), IDNAME INT, VCPHONE VARCHAR (10), Obmedzenie PK_IDPhone primárny kľúč (idphone), obmedzenie fk_idname cudzí kľúč (idname) Referencie Názvy (IDNAME))

Opatrne preskúmajte obsah zoznamu. Je to dosť zaujímavé, pretože používajú niektorých operátorov, o ktorých sme už uvažovali a ďalší príklad nebráni. Pre obe tabuľky sa vytvorí pole kľúčov, čo je najprv, má typ int a automaticky sa zvyšuje, počnúc 1 s prírastkom na jeden. Pole kľúčov je vytvorené hlavným kľúčom pomocou obmedzenia obmedzenia.

V popise tabuľky phone, posledný riadok obsahuje pre nás nové oznámenie, konkrétne externé kľúčové vyhlásenie pomocou zahraničného kľúčového operátora. Ako vidíte, toto je tiež obmedzenie a trochu neskôr uvidíte prečo. V zátvorkách je uvedené pole tabuľky, ktoré musí byť spojené s inou tabuľkou. Potom existuje odkazy na kľúčové slovo (odkaz), názov tabuľky, s ktorým musí byť názov (mená) a v zátvorkách ("IDNAME"). Máme teda väzbu, ktorá sa zobrazuje na obrázku 1.4.

Pozor!

Externý kľúč môže odkazovať len na primárny kľúč inej tabuľky alebo obmedziť jedinečnosť. To znamená, že po odkazoch na kľúčové slovo by mali byť názov tabuľky a v zátvorkách, môžete zadať iba primárny kľúč alebo pole s jedinečným limitom. Nie je možné špecifikovať iné polia.

Teraz, ak môžete vyplniť tabuľky údajov. Nasledujúce tri príkazy pridajú tri priezviská, ktoré sme videli v tabuľke 1.3:

Vložte do názvov (Vcname) Hodnoty ("Petrov") Vložte hodnoty ("Ivanov") ("Ivanov") vložte do názvov (vcname) hodnoty ("Sidorov")

Ak ste už pracovali s SQL, môžete pridať záznamy a telefónnu tabuľku. Vymknem tieto príkazy a môžete ich vidieť v súbore cordes_keys.sql adresára Chapter1 na kompaktnom disku.

Našou úlohou je teraz vidieť, aké sú reštriktívne akcie cudzieho kľúča, poďme na to. Uviedli sme explicitné prepojenie medzi dvoma oblasťami v rôznych tabuľkách. Ak sa pokúsite pridať položku s identifikátorom do telefónu do telefónneho stola, čo nie je v poli rovnakého mena (názov by mohol byť vykonaný na iný) tabuľku s priezviskom, potom sa vyskytne chyba. Tým sa porušuje spojenie medzi oboma tabuľkami a obmedzenie externého tlačidla neumožňuje existovať so záznamami bez oznámenia.

Obmedzenie je platné a pri zmene alebo vymazaní záznamov. Napríklad, ak sa pokúsite odstrániť reťazec s priezviskom Petrov, potom sa vyskytne chyba externého limitu kľúča. Nemôžete odstrániť záznamy, pre ktoré externe súvisiace riadky. Ak chcete začať s, musíte odstrániť všetky telefóny pre tento záznam a až potom, čo bude možné odstrániť reťazec s názvom Petrov.

Pri vytváraní externého tlačidla môžete zadať na odstránenie kaskády alebo na aktualizáciu kaskády. V tomto prípade, ak vymažete záznam petríc z tabuľky mien alebo zmeňte identifikátor, potom sa automaticky aktualizujú všetky položky v tabuľke telefónov spojených s reťazcom Petrov. Nikdy. Nie, musíte písať veľké písmená: nikdy to neurobte. Všetko by malo byť odstránené alebo meniť manuálne. Ak užívateľ náhodou odstráni záznam z tabuľky mien, potom sa zodpovedajúce telefóny vymažú. Bod potom vytvoriť externý kľúč, ak polovica jeho reštriktívnych schopností zmizne! Všetko je potrebné vykonať len manuálne a identifikátory nie je možné zmeniť vôbec.

Vymazanie samotných tabuliek by mali tiež začať s podriadenou tabuľkou, ktorá je s telefónom, a potom môžete odstrániť tabuľku hlavných mien.

Nakoniec, ukážem, ako krásne získať korešpondenciu mená a telefónov z dvoch tabuliek:

Vyberte vcname, Vcphone z menov, telefóny, kde menas.idname \u003d telefóny.idname

Podrobnejšie budeme hovoriť o takýchto požiadavkách v kapitole 2. Teraz som uviedol príklad, aby ste videli silu pridružených tabuliek.

Tabuľka môže obsahovať až 253 externých kľúčov, čo je dostatočné postačujúce aj na vytvorenie najkomplexnejších databáz. Osobne som musel pracovať s databázami, kde počet externých kľúčov neprekročilo 7 na jednej tabuľke. Ak je viac, potom je to najpravdepodobnejšie, že databáza je navrhnutá nesprávne, hoci existujú výnimky.

Samotná tabuľka môže mať tiež maximálne 253 externých kľúčov. Externé klávesy v tabuľke sú menej časté, väčšinou nie viac ako 3. Najčastejšie v tabuľke môže byť mnoho odkazov na iné tabuľky.

Externé tlačidlo môže odkazovať na rovnakú tabuľku, v ktorej je vytvorená. Máte napríklad tabuľku príspevkov v organizácii, ako je uvedené v tabuľke 1.5. Stôl sa skladá z troch polí: primárny kľúč, externý kľúč a názov príspevku. V akejkoľvek organizácii môže byť mnoho príspevkov, ale bude celkom logické v jednej tabuľke, aby sa zobrazili svoje mená a štruktúru podania. Na to musí byť externý kľúč spojený s primárnym kľúčom tabuľky pozície.

Tabuľka 1.5. Tabuľka s vnútorným pripojením

V dôsledku toho dostávame, že generálny riaditeľ má externý kľúč nula, t.j. Tento príspevok je v čele všetkých ostatných. Obchodný riaditeľ a riaditeľ všeobecných otázok, externý kľúč udáva riadok generálneho riaditeľa. To znamená, že tieto dve pracovné miesta sú podriadené generálnemu riaditeľovi priamo. Atď.

Pozrime sa, ako môžete vytvoriť všetko vo forme SQL dotazu:

Vytvorenie pozícií tabuľky (Identita IDPOZITA INT (1,1), IDPORAntPosition int, vcname Varchar (30), obmedzenie PK_idPosition Primárne kľúč (Idnosti), obmedzenie FK_IDPAREntosition Zahraničný kľúč (Idnosti) Pozícia odkazov

Ako vidíte, externý kľúč sa jednoducho označuje na rovnakú tabuľku, ktorú vytvárame. Na CD, v adresári CHAPTER1 môžete vidieť v súbore corcays_keys_to_self.sql, príklad vytvorenia tejto tabuľky, naplnenie údajov a zobrazenia príspevkov, pričom zohľadní ich podanie. V ďalšej kapitole budeme podrobnejšie zvážiť prácu s takýmito tabuľkami.

Vzťah k jednému

Doteraz sme sa pozreli na klasické pripojenie, keď jeden riadok hlavnej tabuľky údajov zodpovedá jednému riadku z pridruženej tabuľky. Toto spojenie sa nazýva jeden. Existujú však iné spojenia, a teraz sa pozrieme na jeden viac - jeden až jeden, keď je jeden vstupný hlavný stôl spojený s jedným vstupom iného. Ak ho chcete implementovať, stačí pripojiť primárne kľúče oboch tabuliek. Keďže primárne tlačidlá sa nedajú opakovať, v oboch tabuľkách je možné pripojiť iba jeden riadok.

Nasledujúci príklad vytvorí dve tabuľky, ktoré majú odkaz medzi primárnymi klávesmi:

Vytvorenie názvov tabuľky (IDNAME UniqueIdentifier Predvolené NewID (), Vcname Varchar (50), Obmedzenie PK_GUID Primárne kľúč (IDNAME)) Vytvorenie stolových telefónov (Idphone UniqueIdentifier Default Newid (), VcPhone Varchar (10), Obmedzenie PK_IDPhone Primárny kľúč (Idphone), Obmedzenie fk_idphone cudzí kľúč (idphone) Referencie Názvy (IDNAME))

Externý kľúč je potrebný len na jednej z tabuliek. Vzhľadom k tomu, že spojenie ide jeden k jednému, nezáleží na tom, aká tabuľka na vytvorenie.

Veľa pre mnohých

Najťažšie pripojenie je mnoho pre mnoho, keď mnoho záznamov z jednej tabuľky zodpovedá mnohým vstupom z inej tabuľky. Na implementáciu to, dve tabuľky sú malé, sú potrebné tri tabuľky.

Najprv musíte pochopiť, keď je možné použiť pripojenie na mnohých? Predpokladajme, že máte dve tabuľky: zoznam obyvateľov domu a zoznam telefónnych čísel. V jednom apartmáne môže byť viac ako jedno číslo, čo znamená, že jeden názov môže patriť dva telefóny. Ukazuje sa na spojenie s mnohými. Na druhej strane, v tom istom byte môže byť dve rodiny (komunálny byt alebo len byt, ktorý využíva telefónny telefón), čo znamená, že spojenie medzi telefónom a rezidentom je tiež jeden pre mnohých. A najťažšou možnosťou je dva telefóny v komunálnom apartmáne. V tomto prípade majú obe izby niekoľko obyvateľov bytu. Ukazuje sa preto, že "Mnohé" rodiny môžu používať "Mnohé" telefóny (pripojenie je mnoho pre mnoho).

Ako si uvedomiť spojenie s mnohými mnohými? Na prvý pohľad je v relačnom modeli nemožné. Pred 10 rokmi som hľadal rôzne možnosti na dlhú dobu a v dôsledku toho som jednoducho vytvoril jednu tabuľku, ktorá prepukla s redundanciou údajov. Ale raz, dostal som jednu úlohu, vďaka ktorej vyšiel vynikajúce riešenie z podmienok na povrch - musíte vytvoriť dve tabuľky obyvateľov bytov a telefónov a implementovať len primárny kľúč v nich. V tejto tabuľke nie sú potrebné externé klávesy. Spojenie medzi tabuľkami by však malo byť cez tretiu, viazanú tabuľku. Na prvý pohľad je ťažké a nie je jasné, ale akonáhle sa s touto metódou bude uvidíte všetku moc tohto riešenia.

Tabuľky 1.6 a 1.7 ukazujú príklady tabuliek priezviska a telefónov. A tabuľka 1.8 znázorňuje tabuľku spojiva.

Tabuľka 1.6. Mená tabuľky

Tabuľka 1.7. Tabuľové telefóny

Tabuľka 1.8. Tabuľové telefóny

Pozrime sa teraz, čo bude logikou vyhľadávania údajov s mnohými mnohými. Predpokladajme, že potrebujeme nájsť všetky telefóny, ktoré patria do Ivanov. Primárne kľúč IVANOV je 1. Nájdite všetky záznamy v spojovacej tabuľke, že pole "Komunikácia s názvom" sa rovná 1. Tieto budú záznamy 1 a 2. V týchto záznamoch v poli "Komunikácia s telefónom", identifikátormi 1 a 2 sa nachádzajú, a tak, Ivanov patrí do miestností z telefónneho stola, ktoré sa nachádzajú v riadkoch 1 a 2.

Teraz rozhodnite o spätnej väzbe - definujeme, kto má prístup k telefónnemu číslu 567575677. Toto číslo v telefónnom stole má kľúč 3. Hľadáme všetky položky v tabuľke Binder, kde v poli "Komunikácia s telefónom" je 3. Toto sú záznamy s číslami 4 a 5, ktoré v poli "Komunikácia s názvom" obsahuje hodnoty 2 a 3. Ak sa teraz pozeráte na stôl priezviska, potom uvidíte na číslach 2 a 3 Petrov a Sidorov. Takže je to títo dvaja obyvatelia, ktorí používajú telefónne číslo 567575677.

Zobrazte všetky tri tabuľky a uistite sa, že rozumiete, ktoré telefónne čísla patria do toho, čo obyvatelia a naopak. Ak vidíte toto pripojenie, pochopíte, že je to jednoduché, rovnako ako tri kopecks a môže ho rýchlo implementovať vo vašich projektoch.

Vytvorenie názvov tabuľky (IDNAME UniqueIdentifier Predvolené Newid (), Vcname Varchar (50), Obmedzenie PK_GUID Primárne kľúč (IDNAME)) Vytvorenie telefónnych telefónov (Idphone UniqueIdentifier Predvolené Newid (), VcPhone Varchar (10), Obmedzenie PK_IDPhone Primárny kľúč (Idphone)) Vytvorenie tabuľky LinkTitable (IdlinkTAble UniqueIdentifier Default Newid (), IDNAME UniqueIdentifier, Idphone UniqueIdentIdentifier, Obmedzenie PK_IDLINKTABLE primárne tlačidlo (idlinkTAble), Obmedzenie FK_IDPHONE ZAHRANIČNÝ KEY (IDLOFPHONE) Referencie Telefóny (IdPhone), Obmedzenie FK_IDNAME ZAHRNOKOVANIE KRYTU (IDNAME) Referencie Názvy (IDNAME) )

Binder tabuľka má dva externé tlačidlá, ktoré sa viažu na názvy a telefónne stoly a jeden primárny kľúč, ktorý zabezpečuje jedinečnosť záznamov.

Ako primárny kľúč som si vybral pole GUID, pretože je pohodlnejšie na riešenie tejto úlohy. Faktom je, že potrebujeme vložiť záznamy do dvoch tabuliek av oboch prípadoch, musíte zadať rovnaký kľúč. Hodnota GUID môže byť generovaná a potom môžete použiť pri vkladaní údajov v oboch tabuľkách.

Môžete použiť ako kľúč a automaticky zvýšené pole, ale v tomto prípade je problém trochu ťažšie riešiť, presnejšie, je nepohodlné vyriešiť problém. Napríklad, pridanie telefónneho čísla, musíte najprv vložiť príslušný reťazec do tabuľky, potom ho nájsť, aby ste určili kľúč, ktorý bol priradený riadok, a potom je už pripojenie.

V tomto štádiu sme obmedzení na vytvorenie tabuliek av oddiele 2.8 Vrátime sa k tejto téme a učíme sa a naučiť sa pracovať s príslušnými tabuľkami. Práca s pripojením jeden k jednému a jeden k mnohým, nie je oveľa odlišný, pretože v tejto schéme sa zúčastňujú len dve tabuľky. Komunikácia mnoho ďalších komplikovaných kvôli väzbovej tabuľke, takže ho považujeme za samostatne v oddiele 2.27.

Kľúče sú základnými prvkami relačnej databázy, pretože nastavia spojenie medzi dvojicou tabuliek a zabezpečujú unikátnu identifikáciu každého záznamu v tabuľke. Kľúče sú dôležitejšie ako zriadenie vzťahov; Pomáhajú aj s referenčnou integritou a sú hlavnou zložkou integrity na úrovni tabuľky. Tabuľky uchovávajú na nich obrovské kúsky, ktoré sa zvyčajne vzťahujú na tisíce záznamov, z ktorých všetky sú netriedené a dezorganizované. Prijímanie určitých údajov z týchto mnohých záznamov môže byť niekedy ťažké alebo niekedy nemožné. Je tu, že kľúče sa objavujú. Tu sa pozrieme na dve veľmi dôležité kľúčové schémy relačnej databázy a rozdiel medzi nimi: primárny kľúč a externý kľúč.

Aký je primárny kľúč?

Primárny kľúč je špeciálny kľúč, ktorý určite identifikuje každý záznam v tabuľke. Relačná databáza je veľmi dôležitá na to, aby ste mali jedinečný identifikátor v každom riadku tabuľky a primárny kľúč je presne to, čo potrebujete určite identifikovať n-ticu v tabuľke. Motorpráda je sada hodnôt atribútov v relačnej databáze. Primárny kľúč môže odkazovať na stĺpec alebo súbor stĺpcov v tabuľke relačnej databázy používanej na implicitne identifikáciu všetkých záznamov v tabuľke. Primárny kľúč musí byť pre každý záznam jedinečný, pretože pôsobí ako jedinečný identifikátor a nemal by obsahovať hodnoty null. Každá databáza musí mať jeden a len jeden primárny kľúč.

Aký je externý kľúč?

Externý kľúč sa vzťahuje na pole alebo zbierku polí v položke databázy, ktorá jednoznačne identifikuje kľúčovú oblasť inej databázy v inej tabuľke. Jednoducho povedané, stanovuje prepojenie medzi vstupmi v dvoch rôznych tabuľkách v databáze. To môže byť stĺpec v tabuľke, ktorý označuje stĺpce primárneho kľúča, čo znamená, že externý kľúč definovaný v tabuľke sa vzťahuje na primárny kľúč akejkoľvek inej tabuľky. Referencie sú rozhodujúce v relačných databázach na vytvorenie odkazov medzi záznamami, ktoré sú potrebné na triedenie databáz. Externé klávesy zohrávajú dôležitú úlohu v normalizácii relačných databáz, najmä ak tabuľky potrebujú prístup k iným tabuľkám.

Rozdiel medzi hlavným kľúčom a externým kľúčom

Základy primárneho kľúča a zahraničného kľúča

Primárny kľúč je špeciálny kľúč v relačnej databáze, ktorá pôsobí ako jedinečný identifikátor pre každý záznam, čo znamená, že určite identifikuje každý riadok / záznam v tabuľke a jeho hodnota musí byť jedinečná pre každý riadok stola. Na druhej strane, externý kľúč je pole v jednej tabuľke, ktorá spája dve tabuľky. Vzťahuje sa na stĺpec alebo skupinu stĺpcov, ktoré určite identifikujú reťazec inej tabuľky alebo rovnakej tabuľky.

Pomer primárneho kľúča a externého tlačidla

Primárny kľúč jednoznačne identifikuje položku v tabuľke relačnej databázy, zatiaľ čo externý kľúč odkazuje na pole v tabuľke, čo je primárnym kľúčom inej tabuľky. Primárny kľúč musí byť jedinečný a v tabuľke je povolený len jeden primárny kľúč, ktorý musí byť definovaný, zatiaľ čo tabuľka je povolená viac ako jeden externý kľúč.

Duplicitné primárne kľúče a externé klávesy

Primárnym kľúčom je kombinácia jedinečných a nie nulových obmedzení, takže v oblasti primárneho kľúča v tabuľke relačných databáz nie je možné duplicitné hodnoty. Žiadne dva riadky môžu niesť opakované hodnoty pre primárny atribút kľúčového kľúča. Na rozdiel od primárneho kľúča môže externý kľúč obsahovať opakované hodnoty a tabuľka v relačnej databáze môže obsahovať viac ako externý kľúč.

Null primárny kľúč a externý kľúč

Jedným z hlavných rozdielov medzi nimi je, že na rozdiel od primárnych tlačidiel môžu externé tlačidlá tiež obsahovať hodnoty null. Tabuľka v relačnej databáze môže mať iba jeden primárny kľúč, ktorý neumožňuje hodnoty null.

Dočasná tabuľka primárneho kľúča a externého kľúča

Primárne kľúčové obmedzenie môže byť definované implicitne na časových tabuľkách a ich premenných, zatiaľ čo obmedzenie externého kľúča nie je možné aplikovať na miestne alebo globálne dočasné tabuľky.

Odstránenie hlavného tlačidla a externého tlačidla

Hodnota primárneho kľúča nie je možné odstrániť z materskej tabuľky, ktorá sa označuje ako externý kľúč v dcérskej spoločnosti. Pred odstránením materskej tabuľky musíte najprv odstrániť detský stôl. Naopak, externá kľúčová hodnota môže byť odstránená z dcérskej spoločnosti, aj keď hodnota odkazuje na primárny kľúč materskej tabuľky.

Primárny kľúč alebo externý kľúč: porovnávací stôl

Zhrnutie hlavných kľúčov

Kľúče hrajú rozhodujúcu úlohu v existencii databázovej schémy na vytvorenie väzieb medzi tabuľkami a vnútri tabuľky. Kľúče zakladajú vzťahy a uplatňujú rôzne druhy integrity, najmä integritu na úrovni tabuľky a úroveň vzťahu. Po prvé, domnievajú sa, že tabuľka obsahuje jedinečné záznamy a polia, ktoré používate na vytvorenie vzťahov medzi tabuľkami, musia obsahovať zodpovedajúce hodnoty. Primárny kľúč a externý kľúč sú dva najdôležitejšie a bežné typy kľúčov používaných v relačných databázach. Primárny kľúč je špeciálny kľúč používaný na jedinečnú identifikáciu vstupov v tabuľke, zatiaľ čo externý kľúč sa používa na vytvorenie vzťahu medzi dvoma tabuľkami. Obaja sú identické v štruktúre, ale hrajú rôzne úlohy v relačnej databázovej schéme.

Obrázok zobrazuje tabuľku (pomer 5), ktorý obsahuje niektoré informácie o zamestnancoch hypotetického podniku. Riadky stola zodpovedajú tressom. Každý riadok skutočne predstavuje opis jedného objektu skutočného sveta (v tomto prípade zamestnanca), ktorých charakteristiky sú obsiahnuté v stĺpcoch. Relačné vzťahy zodpovedajú súborom subjektov a kontextom - subjektom. Stĺpce v tabuľke, ktoré predstavujú relačné vzťahy atribúty.

Každý atribút je definovaný na doméne, preto je možné doménu zobraziť ako súbor prípustných hodnôt tohto atribútu. V súčasnosti je možné definovať viac atribútov jedného vzťahu a dokonca aj atribúty rôznych vzťahov.

Atribút, ktorého hodnota jednoznačne identifikuje cortices kľúče (alebo jednoducho kľúče). Kľúčom je atribút "TABEL Number", pretože jeho hodnota je jedinečná pre každého zamestnanca podniku. Ak sú cortices identifikované iba priľnavosť hodnôt niekoľkých atribútov, hovoria, že pomer má integrovaný kľúč.

Primárny kľúč - V modeli relačného dát, jeden z možných kľúčových vzťahov vybraných ako hlavný kľúč (alebo predvolený kľúč).

Vzťah môže obsahovať viacero kľúčov. Vždy jeden z kľúčov je vyhlásený primárnyJeho hodnoty nie je možné aktualizovať. Všetky ostatné kľúče sa nazývajú možné kľúče.

Z hľadiska teórie sú všetky potenciálne (možné) kľúče vzťahu ekvivalentné, to znamená, že majú rovnaké vlastnosti jedinečnosti a minimálnu. Avšak, jeden z potenciálnych kľúčov je zvyčajne vybraný ako primárny, ktorý je najvýhodnejší na určité praktické účely, napríklad na vytvorenie externý Tlačidlá v iných ohľadoch alebo na vytvorenie klastrového indexu. Preto ako primárny kľúč, spravidla, ktorý má najmenšiu veľkosť (fyzické ukladanie) a / alebo obsahuje najmenší počet atribútov.

Ak primárny kľúčpozostáva z jedného atribútu, je nazývaný jednoduchý kľúč.

Ak primárny kľúč pozostáva z dvoch alebo viacerých atribútov, nazýva sa klávesnica. Názov, priezvisko, patronymické, číslo pasu, série pasov, teda nemôže byť primárnymi kľúčmi samostatne, pretože môžu byť rovnaké v dvoch alebo viacerých ľuďoch. Neexistujú však žiadne dve osobné dokumenty rovnakého typu s rovnakou sériou a číslom. Preto v súvislosti s údajmi o ľuďoch, primárnym kľúčom môže byť podmnožinou atribútov pozostávajúcich z typu osobného dokumentu, jej sérií a čísla.



Na rozdiel od hierarchických a sieťových dátových modelov v relalizácii neexistuje koncepcia skupinového vzťahu. Ak chcete odrážať združenia medzi konštrukciami rôznych vzťahov, používa sa duplikácia ich kľúče.

Atribúty, ktoré sú kópie kľúčov iných vzťahov externé kľúče.

Napríklad vzťah medzi vzťahmi oddelením a zamestnancom je vytvorený kopírovaním primárneho kľúča "NUMBER_OTEL" Od prvého vzťahu k druhému. Na získanie zoznamu zamestnancov tohto zariadenia je teda potrebné: 1) z rozdelenia tabuľky Nastavte hodnotu atribútu "NUMBER_OTEL" zodpovedá tomuto "name_otel". 2) Vyberte zamestnanca z tabuľky Všetky záznamy, hodnotu atribútu "NUMBER_OTEL" ktorý sa rovná predchádzajúcemu kroku. S cieľom zistiť, v ktorom oddelení zamestnanec pracuje, musíte vykonať reverznú prevádzku: 1) určiť "NUMBER_OTEL" Z stola zamestnanca. 2) Pri výslednej hodnote nájdeme záznam v oddelení tabuľky.


18. Normalizácia v relačných databázach, koncepcia normálneho formulára pri navrhovaní databáz.

Normálny formulár - vzťahový vzťah v modeli relačného dát, ktorý ho charakterizuje z hľadiska redundancie, čo môže potenciálne viesť k logicky chybným výsledkom vzorkovania alebo zmeny údajov. Normálna forma je definovaná ako súbor požiadaviek, ktoré by mal postoj uspokojiť.

Proces konverzie databázy do formulára zodpovedajúce normálnym formám sa nazýva normalizácia . Normalizácia je navrhnutá tak, aby priniesla štruktúru databázy do formy, ktorá poskytuje minimálnu redundanciu, to znamená, že normalizácia nie je určená na zníženie alebo zvýšenie výkonu práce alebo zníženia alebo zvýšenia objemu databázy. Konečným cieľom normalizácie je znížiť potenciálne protichodné uložené informácie v databáze.



Náprava sa vykonáva spravidla z dôvodu rozkladu vzťahov takým spôsobom, že v každom ohľade sú uložené len primárne fakty (to znamená, že fakty, ktoré nie sú odvodené z iných uložených skutočností).

Funkčné závislosti.

Relačná databáza obsahuje štrukturálne aj sémantické informácie. Štruktúra databázy je určená číslom a typom vzťahov zahrnutých v ňom a odkazy ako "jeden k mnohým" existujúcim medzi stavbami týchto vzťahov. Sémantická časť popisuje mnohé funkčné závislosti, ktoré existujú medzi atribútmi týchto vzťahov. Uveďte definíciu funkčnej závislosti.

19. 1NF: Hlavné definície a pravidlá transformácie.

Na diskusiu o prvej normálnej forme musia byť uvedené dve definície: \\ t

Jednoduchý atribút - Atribút, ktorého hodnoty sú atómové (nedeliteľné).

Komplexný atribút - Ukazuje sa na zlúčeninu niekoľkých atómových atribútov, ktoré môžu byť definované na jednej alebo rôznych domén (vektor alebo dátová jednotka ju nazývajú).

Stanovenie prvej normálnej formy:

pomer je v 1NF, ak sú hodnoty všetkých jeho atribútov atóm. . V opačnom prípade to nie je tabuľka vôbec a takéto atribúty musia rozkladať.

Príklad:

V databáze Enterprise Frame je potrebné uložiť informácie o zamestnancoch, ktorí sa môžu pokúsiť o odoslanie

Dôstojník (číslo_number, meno, dátum_night, história, deti).

Z pozornosti zváženia tohto vzťahu vyplýva, že atribúty "HISTÓRIA_ROB" a "Deti" sú komplexné, okrem toho atribút "HISTÓRIA_ROB" Obsahuje ďalší komplexný atribút "History_replace".
Tieto agregáty vyzerajú takto:

 history_rotion (dátum_name, názov, história_name),

 history_replacement (dátum_nalation, plat),

 Deti (name_Benchka, rok_nival).

Ich spojenie je prezentované na obr. 3.3.

Obr.3.3. Zdroj.

Ak chcete pôvodný vzťah k prvej normálnej forme, je potrebné rozkladať ho pre štyri vzťahy, pretože to je uvedené na nasledujúcom obrázku:

Obr.3.4. Normalizované mnohé vzťahy.

Tu je primárny kľúč každého vzťahu zvýraznený v modrom ráme, mená externých tlačidiel sú napísané v modrom písme. Pripomeňme, že je to externé klávesy, ktoré slúžia na reprezentáciu funkčných závislostí, ktoré existujú v pôvodnom postoji. Tieto funkčné závislosti sú označené šípkami.

Normalizačný algoritmus je opísaný v E.F. Koddom nasledovne:

  • Počnúc vzťahu v hornej časti stromu (obr. 3.3.), Je to jeho primárny kľúč a každý priamo podriadený vzťah sa rozširuje vložením domény alebo kombinácie domén tohto primárneho kľúča.
  • Primárny kľúč každého rozšíreného vzťahu je teda pozostávajúci z primárneho kľúča, ktorý bol vzťah pred expanziou a pridaním primárneho rodičovského kľúča.
  • Po tom, všetky zložité domény sú vyhorené z rodičovského vzťahu, horný strom uzol sa odstráni a rovnaký postup sa opakuje pre každý z zostávajúcich substrees.

20. 2NF: Základné definície a pravidlá konverzie.

Veľmi často, primárny kľúčový vzťah zahŕňa niekoľko atribútov (v takom prípade sa nazýva zmes) - Pozri napríklad postoj detí znázornených na obr. 3.4 Otázka 19. V tomto prípade sa koncepcia zavádza plná funkčná závislosť.

Definícia:

neutrálny atribút je funkčne plne závislý na kompozitnom kľúči, ak funkčne závisí od celého kľúča ako celku, ale nie je vo funkčnej závislosti od žiadnej z atribútov zahrnutých v ňom.

Príklad:

Nech je pomer dodávky (n_poster, produkt, cena).
Dodávateľ môže dodať rôzne tovary a jeden a ten istý výrobok môžu byť dodané rôznymi dodávateľmi. Potom kľúčom je vzťah - "N_POUSER + produkt". Nechajte všetkých dodávateľov dodať tovar za rovnakú cenu. Potom máme nasledujúce funkčné závislosti:

  • N_poster, komodita -> cena
  • výrobok -> cena

Neúplná funkčná závislosť atribútu "ceny" z kľúčov vedie k ďalšej anomálii: pri zmene ceny tovaru potrebujete kompletný vzťah, aby ste zmenili všetky záznamy svojich dodávateľov. Táto anomália je dôsledkom skutočnosti, že dve sémantické fakty sú kombinované v jednej dátovej štruktúre. Nasledujúci rozklad dáva vzťahy v 2NF:

  • Dodávky (N_PUSER, produkt)
  • Price_shovar (tovar, cena) \\ t

Môžete tak dať

Stanovenie druhej normálnej formy: Postoj je v 2NF, ak je v 1NF a každý pevný atribút je funkčne úplne závislý od kľúča.

21. 3NF: základné definície a pravidlá konverzie.

Pred diskusiou o tretej normálnej forme je potrebné zaviesť koncept: tranzitívna funkčná závislosť.

Definícia:

Nech X, Y, Z byť tri atribúty nejakého vzťahu. Zároveň X -\u003e Y a Y -\u003e Z, ale neexistuje žiadny reverzný súlad, t.j. Z - / -\u003e Y a Y - / -\u003e X. Potom Z je závislé od X.
Nech je pomer skladovania ( Firma, Sklad, objem), ktorý obsahuje informácie o firmách prijímajúcich tovar z skladov a objemy týchto skladov. Kľúčový atribút - "Firma". Ak každá spoločnosť môže prijímať tovar len z jedného skladu, potom sú nasledujúce funkčné závislosti:

  • firma -> sklad
  • sklad -> objem

V tomto prípade vznikajú anomálie:

  • ak vtedy, keď žiadna spoločnosť nedostane tovar zo skladu, databáza nemôže zadať údaje o jeho zväzku (pretože kľúčový atribút nie je definovaný).
  • ak sa objem skladových zmien, musíte zobraziť celý vzťah a zmeniť jadrá pre všetky firmy spojené s týmto skladom.

Na odstránenie týchto anomálií je potrebné rozkladať počiatočný vzťah k dvom:

  • Skladovanie ( Firma, Sklad)
  • Objem_clad ( SkladObjem)

Stanovenie tretieho normálneho formulára:

Pomer je v 3. novembri, ak je v 2NF a každý nie je kľúčový atribút nezdobene závisí od primárneho kľúča.

InterBase môže použiť nasledujúce typy obmedzení:
  • Primárny kľúč - primárny kľúč tabuľky.
  • Unikátny kľúč je jedinečný kľúč kľúča.
  • Cudzí kľúč. - Externý kľúč poskytuje odkaz na inú tabuľku a zaručuje referenčnú integritu medzi rodičom a dcérske stoly.

Poznámka k terminológii

Ak ste podobní autora tohto kurzu v prospech hľadania odpovedí na otázku záujmu pre vás komplexne, v rôznych dielach rôznych autorov, potom ste si nemohli všimnúť nejaký zmätok v definíciách domov (Master) -> podriadený (detail) Stoly. Pripomeňme, že hlavná tabuľka sa často nazýva rodiča a podriadená je dcérska spoločnosť.

To je pravdepodobne spôsobené tým, ako sú tieto definície lokálnych a SQL serverov pravdepodobne interpretované.

V miestnych DBMS sa hlavná vec nazýva tabuľka, ktorá obsahuje základné údaje a podriadený je ďalší. Vezmite si napríklad tri súvisiace tabuľky. Prvá obsahuje predajné údaje, druhý - o tovare a tretí - o kupujúcich:


Obr. 18.1.

Hlavné informácie sú uložené v predajnom stole, preto je hlavným (rodičom). Dodatočné informácie sú uložené v tabuľkách tovaru a kupujúcich, potom sú subssocia. To je zrozumiteľné: jedna dcéra nemôže mať dva biologické matky, ale jedna matka je dosť schopná ísť na dve dcéry.

Ale v databázových serveroch SQL existuje ďalšia definícia vzťahov: Keď sa jedno pole v tabuľke vzťahuje na pole inej tabuľky, je nazývaný externý kľúč. A pole, na ktoré sa vzťahuje, sa volá alebo primárny kľúč. Tabuľka, ktorá má externý kľúč (odkaz na záznam inej tabuľky), sa často nazýva dcérska spoločnosť a tabuľka s rodičovský kľúč - Rodičovský. Dokonca aj pri definovaní odkazov hovoria, že rodič môže mať len jeden jedinečný vstup, ku ktorému sa môže vzťahovať niekoľko záznamov dcéra.

Takže vo vyššie uvedenom príklade má predajná tabuľka dva externé tlačidlá: identifikátor tovaru a identifikátor kupujúceho. A obe tabuľky v pravej časti výkresu majú rodičovský kľúč "Identifikátor". Vzhľadom k tomu, jeden kupujúci alebo tovar môže opakovane stretnúť s predajným stolom, ukázalo sa, že obe tabuľky na pravej strane obrazu sú rodičmi a tabuľka vľavo je dcérskou spoločnosťou. Od teraz študujeme InterBase - SQL. Server BD, budeme riadiť tieto definície v následných prednáškach. Ak chcete ďalej rozbiť hlavu nad touto zmätkom, okamžite sa dohodnete: dcéra Má externý kľúč (cudzí kľúč) do inej tabuľky.

PRIMÁRNY KĽÚČ.

PRIMÁRNY KĽÚČ. - Primárny kľúč je jedným z hlavných typov obmedzení v databáze. Primárny kľúč je určený na jednoznačnú identifikáciu nahrávania v tabuľke a musí byť jedinečná. Primárne kľúče primárnych kľúčov sa nachádzajú v tabuľkách, ktoré sa nazývajú rodičovský (rodič). Nie je potrebné zmiasť primárny kľúč s primárnymi indexmi lokálnych databáz, primárnym kľúčom nie je index, konkrétne obmedzenie. Pri vytváraní primárneho kľúča Interbase. automaticky vytvára unikátny index. Avšak, ak vytvoríme unikátny indexNebude viesť k vytvoreniu kľúčové obmedzenia. Tabuľka môže mať iba jeden primárny kľúčový kľúč.

Predpokladajme, že existuje tabuľka so zoznamom zamestnancov. Pole "priezvisko" môže obsahovať rovnaké hodnoty (mená), takže nie je možné použiť ako primárny kľúč. Zriedkavo, ale tam sú mená, že okrem toho majú rovnaké mená. Ešte menej často existujú kompletné ciele, preto aj všetky tri polia "priezvisko" + "name" + "retronymic" nemôžu zaručiť jedinečnosť záznamu a nemôže byť primárnym kľúčom. V tomto prípade je výstup, ako predtým pridať pole - identifikátor, ktorý obsahuje poradové číslo tejto osoby. Takéto polia zvyčajne robia AutoCrem (hovoria o organizácii autoinžínskych polí, aby ste sa porozprávali v nasledujúcich prednáškach). Tak,

Primárny kľúč - Toto je jedno alebo viac polí v tabuľke, ktorých kombinácia je jedinečná pre každý záznam..

Ak primárny kľúč obsahuje jediný stĺpec (ako sa to často stane), primárny kľúčový špecifikátor je nastavený na stĺpec definície:

Vytvorenie tabuľky PRIM_1 (STOLBEC1 INT NIE NULT KEY, STOLBEC2 VARCHAR (50))

Ak je primárny kľúč postavený v niekoľkých stĺpcoch, špecifikátor je umiestnený po určení všetkých polí:

Vytvorenie tabuľky PRIMP_2 (STOLBEC1 INT NOT NULL, STOLBEC2 VARCHAR (50) Nie Null, primárny kľúč (STOLBEC1, STOLBEC2))

Ako možno vidieť z príkladov, primárny kľúč uistite sa, že máte limit stĺpca (stĺpce) nie null.

Jedinečný

Jedinečný - Unikátny kľúč. Unikátny špecifikátor označuje, že všetky hodnoty tejto oblasti musia byť jedinečné, v súvislosti s týmto poliam nemôžu obsahovať hodnoty NULOVÝ. Dá sa povedať, že jedinečný jedinečný kľúč je alternatívnou možnosťou primárneho kľúča, avšak existujú rozdiely. Hlavným rozdielom je, že primárny kľúč by mal byť len jeden, zatiaľ čo tam môže byť niekoľko jedinečných kľúčov. Okrem toho nie je možné stavať jedinečné obmedzenie na rovnakom množstve stĺpcov, ktorý bol použitý na obmedzenie primárneho tlačidla alebo iného jedinečného. Unikátne kľúče, ako je primárne, sú v tabuľkách, ktoré sú rodičmi, pokiaľ ide o iné tabuľky.

Kolóna deklarovaná s jedinečným obmedzením, ako aj primárnym kľúčom, môže byť použitý na poskytovanie referenčnej integrity medzi rodičom a dcérske stoly. Zároveň externý kľúč dcéra odkazuje na toto pole (polia). Rovnako ako v prípade primárneho kľúča pri vytváraní jedinečného kľúča, bude automaticky vytvorený. unikátny index. Ale nie opak. Príklad vytvárania tabuľky s jedným primárnym a dvoma unikátnymi tlačidlami:

Vytvorenie tabuľky Prim_3 (Stolbec1 Int NOT NULL, STOLBEC2 VARCHAR (50) NIE JE NULL UNIQUE, STOLBEC3 FLOUND NIE NULL Unikátny)

Cudzí kľúč.

Cudzí kľúč. - Externý kľúč. Toto je veľmi výkonný nástroj na poskytovanie referenčnej integrity medzi tabuľkami, čo umožňuje nielen monitorovať prítomnosť správnych odkazov, ale tiež ich automaticky spravovať. Externé kľúče sú obsiahnuté v tabuľkách, ktoré sú dcérskymi spoločnosťami (dieťa) s ohľadom na iné tabuľky. Vylepšiť integritu zaistené externým kľúčom, ktorý odkazuje na primárne alebo