sql >> Databáze >  >> Database Tools >> phpMyAdmin

Pochopení primárního klíče a databází vztahů s MySQL (phpmyadmin)

TL;DR nepotřebujete deklarovat "vztah" tj. cizí klíč (FK) k dotazu. Ale je to dobrý nápad . Když tak učiníte, FK může odkazovat na primární klíč (PK) nebo jakýkoli jiný sloupec(y) UNIQUE.

PK a FK se v některých metodách a produktech chybně nazývají „vztahy“. Vztahy aplikací jsou reprezentovány tabulkami . (Základní tabulky a výsledky dotazů.) PK a FK jsou omezení:říkají DBMS, že mohou nastat pouze určité situace, takže si může všimnout, když uděláte určité chyby. Nejsou to vztahy, jsou to pravdivá tvrzení v &každého databázového stavu a aplikační situace. K aktualizaci a dotazování databáze nepotřebujete znát omezení.

Stačí vědět, co každá tabulka znamená . Základní tabulky mají význam daný DBA, který vám řekne, co znamenají jejich řádky. Dotazy mají také význam, který vám řekne, co znamenají jejich řádky. Významy dotazů jsou kombinovány z významů základní tabulky souběžně s tím, jak jsou jejich výsledné hodnoty kombinovány z hodnot a podmínek základní tabulky.

  • image_tbl -- obrázek [Id] je v albu s názvem [albumName], je pojmenován [name], je datován [dateTime] a má komentář [komentář]
  • album_tbl -- album [albumID] se jmenuje [albumName]

nemáte deklarovat jakékoli PK/UNIQUE nebo FK! Ale je to dobrý nápad protože pak může DBMS zakázat nemožné/chybné aktualizace. PK/UNIQUE říká, že hodnota podřádku pro jeho sloupce se musí objevit pouze jednou. FK říká, že hodnota podřádku pro jeho sloupce se musí objevit jako hodnota podřádku PK/UNIQUE v odkazované tabulce. Skutečnost, že tato omezení platí pro základní tabulky, znamená, že určitá omezení platí pro výsledky dotazu. Ale významy těchto výsledků dotazu jsou podle kombinací tabulky a podmínek dotazu, nezávisle na těchto omezeních. Např. zda jsou či nejsou názvy alb jedinečné,

  • image_tbl JOIN album_tbl USING albumName -- obrázek [Id] je v albu s názvem [albumName], je pojmenován [name], má datum [dateTime] a má komentář [komentář] A album [albumID] se jmenuje [albumName]

Jediným problémem je, že pokud názvy alb nejsou jedinečné, pak znalost názvu alba obrázku vám neřekne, ve kterém albu se nachází; víte jen, že je to v albu s tímto názvem. Na druhou stranu, pokud jsou názvy alb jedinečné, nepotřebujete album_tbl albumID.

Pokud jsou tedy názvy alb jedinečné, deklarujte název alba UNIQUE v album_tbl. Potom v image_tbl identifikujte album podle nějakého sloupce PK/UNIQUE v album_tbl. Protože album_id je pravděpodobně přítomno pouze pro účely identifikace alb, normálně bychom očekávali, že bude vybrán. Pak v image_tbl deklarujte tento sloupec jako FK odkazující na album_tbl.

Indexy PS obecně urychlují dotazování za cenu určitého času a prostoru. Deklarace primárního klíče v deklaraci tabulky automaticky deklaruje index. Je dobré indexovat sady sloupců PK, UNIQUE a FK.



  1. Android :Je JDBC podporován v zařízeních Android?

  2. Příkazový řádek MySQL '-bash příkaz nenalezen'

  3. jak vybrat datový řádek z pole hodnot oddělených čárkami

  4. Je typ a stav vyhrazeným slovem v MySQL?