sql >> Databasteknik >  >> RDS >> Mysql

Identifierande vs icke-identifierande relationer (igen!!!)

Du övertänker kopplingen mellan valfrihet och identitet. Tills det hela kommer mer naturligt för dig är det bäst att se dem som helt orelaterade .

Om tillval är det viktigt att komma ihåg att tillvalet är riktat. För att använda ditt exempel på employee_equipment :Visst, anställda behöver ingen utrustning. En-till-många-relationen från employee till employee_equipment är valfritt. Samtidigt, om man ser det ur det motsatta perspektivet, är relationen obligatorisk. Du kan inte ha en post i employee_equipment såvida det inte finns en employee att associera det med.

Identitet har inget med valmöjligheter att göra, förutom slumpmässigt ett identifierande förhållande är obligatoriskt från barnet till föräldern. Om det också är obligatoriskt från föräldern till barnet är varken här eller där vad gäller identitet.

Det som gör en relation identifierande är att man måste veta vilken förälder man pratar om (liksom en del andra saker) för att veta vilket barn man pratar om. Det vill säga, den primära nyckeln för barnet måste innehålla en främmande nyckel till föräldern.

Rena skärningstabeller (t.ex. employee_equipment ) är bra exempel på detta. Den primära nyckeln för en ren skärningspunkt är kombinationen av främmande nycklar till båda överordnade tabellerna. Observera att vissa personer också kan lägga till en surrogatnyckel till dessa typer av tabeller. Det spelar inte så stor roll ur ett identitetsperspektiv om det finns flera kandidatnycklar. Det som är viktigt för att fastställa identiteten är om den främmande nyckeln är en del av en kandidatnyckel, om den kandidatnyckeln råkar vara den primära nyckeln eller inte.

Ett annat bra exempel skulle vara något som en databas metadatakatalog, där en kolumn identifieras av tabellen som den tillhör, precis som tabellen identifieras av schemat den finns i, och så vidare. Att veta att en kolumn heter NAME berättar inte vilken kolumn det är. Att veta att det är NAME kolumnen i CUSTOMER tabell hjälper. (Du måste också veta vilket schema CUSTOMER är med och så vidare).



  1. Vad är skillnaden mellan lagrade procedurer, funktioner och rutiner?

  2. Skapa ett index på en tidsstämpel för att optimera frågan

  3. Hur ändrar man database_url på heroku?

  4. Base58 Encoder funktion i PostgreSQL