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

Identifikační vs neidentifikující vztahy (opět!!!)

Příliš přemýšlíte o spojení mezi volitelností a identitou. Dokud vám celá věc nepřijde přirozenější, je nejlepší si je představit jako zcela nesouvisející .

Pokud jde o volitelnost, je důležité si uvědomit, že volitelnost je směrová. Chcete-li použít váš příklad employee_equipment :Jistě, zaměstnanci nepotřebují vybavení. Vztah jeden k mnoha od employee na employee_equipment je volitelný. Zároveň, když se na to podíváme z opačné perspektivy, vztah je povinný. Nemůžete mít záznam v employee_equipment pokud neexistuje employee přiřadit jej.

Identita nemá nic společného s volitelností, kromě náhodně identifikační vztah je povinný od dítěte k rodiči. Zda je to povinné i ze strany rodiče k dítěti, není zde ani tam, pokud jde o identitu.

To, co dělá vztah identifikací, je to, že musíte vědět, o jakém rodiči mluvíte (stejně jako o některých dalších věcech), abyste věděli, o jakém dítěti mluvíte. To znamená, že primární klíč potomka musí obsahovat cizí klíč pro rodiče.

Čisté průsečíkové tabulky (např. employee_equipment ) jsou toho dobrým příkladem. Primárním klíčem čistého průniku je kombinace cizích klíčů k oběma nadřazeným tabulkám. Všimněte si, že někteří lidé mohou k těmto typům tabulek také přidat náhradní klíč. Z hlediska identity tolik nezáleží na tom, zda existuje více kandidátských klíčů. Při určování identity je důležité, zda je cizí klíč součástí kandidátského klíče, zda je či není tento kandidátský klíč primárním klíčem.

Dalším dobrým příkladem by bylo něco jako katalog metadat databáze, kde je sloupec identifikován tabulkou, do které patří, stejně jako je tabulka identifikována schématem, ve kterém se nachází atd. Vědět, že sloupec se nazývá NAME neřekne vám, který sloupec to je. S vědomím, že jde o NAME ve sloupci CUSTOMER pomáhá tabulka. (Také budete muset vědět, které schéma CUSTOMER je in a tak dále).



  1. Získání překročení časového limitu čekání na zámek; zkuste restartovat transakci, i když transakci nepoužívám

  2. Jak nainstalovat MySQL 8 na Ubuntu

  3. Jak funguje funkce timezone() v PostgreSQL

  4. MySQL nemůže vytvořit omezení cizího klíče