sql >> Databáze >  >> RDS >> Mysql

Pokud změníme hodnotu primárního klíče, proč nemusíme změnit hodnotu závislého sloupce?

TL;DR To, že položka/A je PK (primární klíč), znamená, že existuje pouze jedna hodnota Dodavatel/B na hodnotu položky/A. Neříká, že v tabulce je pouze jedna hodnota.

To video je nesmysl. Trpí stejnými mylnými představami o „závislostech“ &FD (funkční závislosti) &PK jako vaše otázka (takže možná odtud jste je dostali) a mnoha dalšími mylnými představami a nevědí, o čem mluví. Najděte vysokoškolskou/univerzitní učebnici, diapozitivy a/nebo kurz (z nichž mnohé jsou zdarma online).

Můžeme mluvit o FD, superklíčích, jedinečných sadách sloupců, CK (kandidátské klíče) a PK hodnoty tabulky nebo proměnnou tabulky . Proměnná tabulky má instanci jedné z těchto věcí, pokud ji má jako instanci každá hodnota tabulky, která může v daném podniku/aplikaci vzniknout.

Sada sloupců je funkčně závislá na jiné, když určená sada může mít pouze jednu hodnotu na danou hodnotu určující sady.

To však neznamená, že různé určující hodnoty mají různé stanovené hodnoty.

Superklíč je sada sloupců, která má v každém řádku jinou hodnotu podřádku. CK je superklíč, který neobsahuje žádný menší superklíč. PK je nějaká CK, kterou jste si vybrali jako PK. Každý sada sloupců funkčně závisí na každém superklíči. Některé z nich jsou CK. Jedním z nich může být PK.

To ale neznamená, že nějaký podřádek jiný než superklíč/CK/PK (a každý podřádek musí být na nich z definice funkčně závislý) je jedinečný.

Ne na základě toho, že A je PK/CK. Bytost PK/CK znamená, že A a každá nadmnožina A je jedinečná. Pokud „změníte A“ v tom smyslu, že se podíváte na jiný řádek nebo se podíváte na jinou hodnotu tabulky, která má pro tento řádek jinou hodnotu A (která nemůže být v žádném jiném řádku žádné tabulky), nebude to omezit to, co B může být.

Některé jiné omezení může omezit to, čím B může být. Např. pokud FD {Supplier} -> {Supplier Phone} platí, pak to omezuje, jaké telefonní číslo dodavatele může být v jiných řádcích, i když položka s PK tomu tak není.

Zda nějaké konkrétní FD drží, závisí na tom, jaké řádky mají v dané situaci vstoupit do tabulky a jaké situace mohou nastat. Pak to, co drží FD, určuje, jaké jsou superklíče a CK. Poté můžete vybrat CK jako PK.



  1. Mysql Real Escape String PHP funkce Přidání \ do mé položky pole

  2. Jak provést hromadnou korespondenci v Accessu 2016

  3. Jak funguje funkce RTRIM() v MySQL

  4. Proveďte dynamický křížový dotaz