sql >> Database >  >> RDS >> Mysql

Als we een primaire sleutelwaarde wijzigen, waarom hoeven we dan geen afhankelijke kolomwaarde te wijzigen?

TL;DR Item/A zijnde PK (primaire sleutel) houdt in dat er slechts één Leverancier/B-waarde per Item/A-waarde is. Er staat niet dat er maar één waarde per tafel is.

Dat filmpje is onzin. Ze lijden aan dezelfde misvattingen over "depends" &FD's (functionele afhankelijkheden) &PK's als jouw vraag (dus misschien heb je ze daar vandaan) en vele andere misvattingen en ze weten niet waar ze het over hebben. Zoek een studieboek, dia's en/of cursus van een hogeschool/universiteit (waarvan vele gratis online zijn).

We kunnen praten over de FD's, supersleutels, unieke kolommensets, CK's (kandidaatsleutels) &PK van een tabel waarde of een tabel variabele . Een tabelvariabele heeft een instantie van een van die dingen als elke tabelwaarde die in de gegeven business/toepassing kan voorkomen, deze als instantie heeft.

Een kolommenset is functioneel afhankelijk van een andere wanneer de bepaalde set slechts één waarde kan hebben per gegeven waarde van de bepalende set.

Maar dat betekent niet dat verschillende bepalende waarden verschillende vastgestelde waarden hebben.

Een superkey is een reeks kolommen die in elke rij een andere subrijwaarde heeft. Een CK is een supersleutel die geen kleinere supersleutel bevat. Een PK is een CK die je koos om PK te zijn. Elke kolommenset is functioneel afhankelijk van elke superkey. Sommige daarvan zijn CK's. Een daarvan kan PK zijn.

Maar dat betekent niet dat een subrow andere dan een supertoets/CK/PK (en elke subrow moet per definitie functioneel afhankelijk zijn) is uniek.

Niet op basis van dat A PK/CK is. Een zijnde PK/CK houdt in dat A en elke superset van A uniek is. Als u "A verandert" in de zin dat u naar een andere rij kijkt of naar een andere tabelwaarde kijkt die een andere A-waarde heeft voor die rij (die niet in een andere rij van beide tabellen kan staan), is dat niet het geval. beperk wat B kan zijn.

Sommige andere beperking kan beperken wat B kan zijn. Als bijvoorbeeld de FD {Leverancier} -> {Telefoon leverancier} geldt, dan beperkt dat wat de Telefoon van de leverancier in andere rijen kan zijn, ook al is het item PK dat niet.

Of een bepaalde FD geldig is, hangt af van welke rijen in een bepaalde situatie in een tabel moeten komen en welke situaties zich kunnen voordoen. Wat de FD's bevatten, bepaalt vervolgens wat de superkeys en CK's zijn. Dan kun je een CK als PK kiezen.



  1. 5 meest voorkomende waarden/voorkomende id's krijgen?

  2. Telling vastleggen uit een SQL-query

  3. Vind rijen waar tekstarray een waarde bevat die vergelijkbaar is met invoer

  4. Hoe slaat MySQL gegevens op?