sql >> Databáze >  >> RDS >> Database

Může na jedné tabulce existovat více primárních klíčů?

  • Co jsou klíče?
    • Jednoduché klávesy
    • Zřetězené nebo složené klíče
    • Primární klíče
      • Číslení a automatické zvyšování
  • Může tabulka obsahovat více primárních klíčů?

Zatímco mnoho vývojářů a správců databází může pracovat s primary keys každý den je fascinujícím tématem ptát se sám sebe:„Co přesně je primary key a může (nebo by měla) databázová tabulka obsahovat více primary keys současně?“

Níže tyto otázky prozkoumáme podrobněji a pokusíme se dospět k rozumnému a obecně schválenému konsenzu v rámci vývojářské komunity.

Co jsou klíče?

Abychom pochopili, co je primary key je v databázové tabulce, musíme nejprve trochu porozumět non-primary keys . key v tabulce je prostě atribut, který se používá k identifikaci a přístupu k těmto informacím. Tabulka může a často bude mít více klíčů, jako například v tabulce Users oba email a username lze považovat za klíče.

V závislosti na vývojáři nebo správci, se kterým mluvíte, můžete slyšet o různých typech klíčů a jejich definicích, takže níže pokryjeme několik různých příkladů a základní definici každého z nich.

Jednoduché klávesy

simple key je pouze klíč používající pouze jeden jediný atribut v tabulce. Pokud nezavedeme více omezení na klíč nebo tabulku, pak na username atribut ve výše uvedeném příkladu je simple key .

Zřetězené nebo složené klíče

O krok dále od simple keys jsou concatenated nebo compound klíče. Jak název napovídá, concatenated key je spojení více single keys . Systém může například automaticky kombinovat last_name a year_of_birth single keys do concatenated key , třeba takto:smith1980 .

Primární klíče

A [primary key](https://en.wikipedia.org/wiki/Unique_key) je klíč, který byl vybrán jako hlavní (nebo primární ) reprezentativní atribut pro daný řádek dat. primary key je jedinečný a tento atribut je pak použit v celé databázi a je přístupný a předáván dalším tabulkám jako reprezentativní atribut pro daná data.

V praxi je to primary key atribut je také označen jako NOT NULL ve většině databází, což znamená, že atribut musí vždy obsahovat hodnotu pro záznam, který má být vložen do tabulky.

Například email nebo username simple keys mohl být přiřazeno označení primary key , ale obvykle je nejlepším postupem nastavit primary key na atribut, který není (nebo nemohl) změnit ani obchodní logika, ani jednotlivec. Představte si například User získá novou e-mailovou adresu, která pak způsobí všechny minulé primary key přidružení vytvořená pomocí staré e-mailové adresy se při použití nové e-mailové adresy stanou neplatnými.

Z tohoto důvodu (mimo jiné) většina primary keys použijte číslo nebo jedinečný řetězec, například [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) .

Číslení a automatické zvyšování

Stručně také stojí za zmínku, že mnoho databázových systémů je nastaveno tak, že každá tabulka má primary key který je jak číselný, tak se také automaticky zvyšuje. To jednoduše znamená, že databázový stroj sám automaticky přiřadí každému novému záznamu v této tabulce jedinečný primary key hodnota, která je přírůstkově větší než všechny předchozí hodnoty. Většina vývojářů se však shoduje na tom, že tento postup je zastaralý a odhaluje zbytečné bezpečnostní chyby systému, když je použit pro některé tabulky, které představují určitá data.

Představte si například všechny User záznamům je přiřazen automaticky inkrementovaný primary key hodnota, známá jako id atribut. Pokud osoba se zlými úmysly zjistí, že id atribut daného uživatele (např. John Smith) je hodnota 1500 , to již odhaluje trochu informací. Za prvé, znamená to, že v systému je pravděpodobně minimálně 1499 dalších uživatelů nebo v určitém okamžiku byli. Znamená to také, že pokud lze na uživatelskou stránku Johna Smitha přistupovat prostřednictvím adresy URL nebo volání API, které obsahuje toto id hodnotu 1500 , pak je velká šance jednoduše změnit hodnotu na jiné číslo, například 1499 nebo 1501 , zobrazí stránku jiného uživatele, který možná nebude chtít, aby jeho stránka přistupovala tímto návštěvníkem. Tímto způsobem lze záznamy vyhledávat pouhým hádáním id hodnoty v masovém měřítku.

Toto jsou samozřejmě velmi jednoduché příklady, ale z těchto důvodů bude většina moderních databází používat náhodný a jedinečný primary key hodnota atributu, jako je UUID při práci s citlivými daty.

Může tabulka obsahovat více primárních klíčů?

Krátká odpověď je ne , tabulka nesmí obsahovat více primary keys , protože to odporuje základním principům návrhu relační databáze (viz:[database normalisation](https://en.wikipedia.org/wiki/Database_normalisation) a [Third normal form](https://en.wikipedia.org/wiki/Third_normal_form) ).

Je tabulka může mít více candidate keys , které se efektivně chovají podobně jako primary key v tom candidate key je jedinečný, NOT NULL , a je singulární reprezentací tohoto záznamu tabulky.

Když však přijde na výběr, který jeden atribut bude přiřazen jako primary key pro tabulku výběr pochází ze seznamu všech potenciálních candidate keys (odtud název, jsou kandidáty na to, aby se staly primary key ). Nakonec pouze jeden candidate key je vybrán jako nejlepší reprezentativní atribut pro daný záznam, který má být v této tabulce použit jako primary key a odkazované jinde v databázi jinými tabulkami prostřednictvím jejich příslušných foreign keys .


  1. Jak mohu získat počet záznamů ovlivněných uloženou procedurou?

  2. Jak používat distribuovanou AD ke zkrácení doby opravy v Oracle EBS

  3. Tipy pro ukládání záloh PostgreSQL na Amazon AWS

  4. Instalace RAC pro databázi s datovými soubory