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

Hvis vi ændrer en primær nøgleværdi, hvorfor skal vi så ikke ændre en afhængig kolonneværdi?

TL;DR Vare/A er PK (primær nøgle) betyder, at der kun er én Leverandør/B-værdi pr. Vare/A-værdi. Der står ikke, at der kun er én værdi pr. tabel.

Den video er noget sludder. De lider af de samme misforståelser om "afhænger" &FD'er (funktionelle afhængigheder) &PK'er som dit spørgsmål (så det er måske der, du har dem fra) og mange andre misforståelser, og de ved ikke, hvad de taler om. Find en lærebog, slides og/eller kursus (hvoraf mange er gratis online).

Vi kan tale om FD'er, supernøgler, unikke kolonnesæt, CK'er (kandidatnøgler) og PK for en tabelværdi værdi eller en tabel variabel . En tabelvariabel har en forekomst af en af ​​disse ting, hvis hver tabelværdi, der kan opstå i den givne virksomhed/applikation, har den som en forekomst.

Et kolonnesæt er funktionelt afhængigt af et andet, når det bestemte sæt kun kan have én værdi pr. given værdi af det bestemmende sæt.

Men det betyder ikke, at forskellige bestemmende værdier har forskellige bestemte værdier.

En supernøgle er et sæt kolonner, der har en forskellig underrækkeværdi i hver række. En CK er supernøgle, der ikke indeholder en mindre supernøgle. En PK er en eller anden CK, som du har valgt at være PK. Hver kolonnesæt afhænger funktionelt af hver supernøgle. Nogle af dem er CK'er. En af dem kan være PK.

Men det betyder ikke, at nogle underordner andre end en supernøgle/CK/PK (og hver underrække skal være funktionelt afhængig af dem pr. definition) er unik.

Ikke på baggrund af, at A er PK/CK. Et væsen PK/CK indebærer, at A og hvert supersæt af A er unikt. Hvis du "ændrer A" i betydningen at se på en anden række eller se på en anden tabelværdi, der har en anden A-værdi for den række (som ikke kan være i nogen anden række i nogen af ​​tabellerne), gør det ikke begrænse, hvad B kan være.

Nogle andre begrænsning kan begrænse, hvad B kan være. Hvis f.eks. FD {Supplier} -> {Supplier Phone} holder, så begrænser det, hvad Supplier Phone kan være i andre rækker, selvom varen er PK ikke gør det.

Hvorvidt en bestemt FD holder, afhænger af hvilke rækker der skal gå ind i en tabel i en given situation, og hvilke situationer der kan opstå. Så hvad FD'er holder bestemmer, hvad supernøglerne og CK'erne er. Så kan du vælge en CK som PK.



  1. Erstat et ord i BLOB-tekst med MySQL

  2. Tag værdi fra felt A, send til db funktion, returner værdi til felt B

  3. Slå en advarsel fra i sqlalchemy

  4. Har brug for hjælp til sql-forespørgsel for at finde ting, der er mærket med alle specificerede tags