sql >> Database teknologi >  >> RDS >> Mysql

Identificerende vs ikke-identificerende forhold (igen!!!)

Du overtænker sammenhængen mellem valgfrihed og identitet. Indtil det hele falder mere naturligt for dig, er det bedst at tænke på dem som værende helt uafhængige .

Om valgfrihed er det vigtigt at huske, at valgfrihed er retningsbestemt. For at bruge dit eksempel på employee_equipment :Ja, medarbejderne har ikke brug for udstyr. En-til-mange-forholdet fra employee til employee_equipment er valgfri. Ser man på det fra det modsatte perspektiv, er forholdet samtidig obligatorisk. Du kan ikke have en registrering i employee_equipment medmindre der er en employee at forbinde det med.

Identitet har intet at gøre med valgfrihed, undtagen tilfældigvis et identificerende forhold er obligatorisk fra barnet til forælderen. Om det også er obligatorisk fra forælder til barn er hverken her eller der hvad identitet angår.

Det, der gør et forhold identificerende, er, at man skal vide, hvilken forælder man taler om (samt nogle andre ting) for at vide, hvilket barn man taler om. Det vil sige, at barnets primære nøgle skal indeholde en fremmednøgle til forælderen.

Rene skæringstabeller (f.eks. employee_equipment ) er gode eksempler på dette. Den primære nøgle i et rent skæringspunkt er kombinationen af ​​fremmednøglerne til begge overordnede tabeller. Bemærk, at nogle mennesker også kan tilføje en surrogatnøgle til denne slags tabeller. Det betyder ikke så meget fra et identitetsperspektiv, hvis der er flere kandidatnøgler. Det, der er vigtigt for at bestemme identiteten, er, om den fremmede nøgle er en del af en kandidatnøgle, uanset om denne kandidatnøgle tilfældigvis er den primære nøgle.

Et andet godt eksempel ville være noget i retning af en databases metadatakatalog, hvor en kolonne identificeres ved den tabel, den tilhører, ligesom tabellen identificeres ved det skema, den er i, og så videre. At vide, at en kolonne hedder NAME fortæller dig ikke, hvilken kolonne det er. Velvidende, at det er NAME kolonnen i CUSTOMER bord hjælper. (Du skal også vide hvilket skema CUSTOMER er med og så videre).



  1. MySQL Error 1 (HY000) Problemer med oprettelse af fil Errcode 2

  2. Hvordan opdaterer jeg, hvis den findes, indsæt hvis ikke (AKA upsert or merge) i MySQL?

  3. PHP - Enkelte anførselstegn eller dobbelte anførselstegn omkring SQL-forespørgsel?

  4. Dvale mysql čć