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

Se cambiamo un valore di chiave primaria, perché non dobbiamo cambiare un valore di colonna dipendente?

TL;DR L'articolo/A è PK (chiave primaria) implica che esiste un solo valore Fornitore/B per articolo/valore A. Non dice che c'è un solo valore per tabella.

Quel video è una sciocchezza. Soffrono delle stesse idee sbagliate su "dipende" e FD (dipendenze funzionali) e PK della tua domanda (quindi forse è da lì che le hai prese) e molte altre idee sbagliate e non sanno di cosa stanno parlando. Trova un libro di testo universitario/universitario, diapositive e/o corso (di cui molti sono gratuiti online).

Possiamo parlare di FD, superchiavi, set di colonne univoci, CK (chiavi candidate) e PK di una tabella valore o una tabella variabile . Una variabile di tabella ha un'istanza di una di queste cose se ogni valore di tabella che può sorgere in una determinata azienda/applicazione lo ha come istanza.

Un insieme di colonne dipende funzionalmente da un altro quando l'insieme determinato può avere un solo valore per dato valore dell'insieme determinante.

Ma ciò non implica che valori determinanti differenti abbiano valori determinati differenti.

Una superchiave è un insieme di colonne che ha un valore di subrow diverso in ogni riga. Un CK è una superchiave che non contiene una superchiave più piccola. Un PK è un CK che hai scelto come PK. Ogni il set di colonne dipende funzionalmente da ogni superchiave. Alcuni dei quali sono CK. Uno dei quali può essere PK.

Ma ciò non implica che qualche subrow altro di un supertasto/CK/PK (e ogni subrow deve essere funzionalmente dipendente da essi per definizione) è unico.

Non sulla base del fatto che A sia PK/CK. Un essere PK/CK implica che A e ogni superinsieme di A sono unici. Se "modifichi A" nel senso di guardare una riga diversa o guardare un valore di tabella diverso che ha un valore A diverso per quella riga (che non può trovarsi in nessun'altra riga di nessuna delle due tabelle), non è così limitare ciò che B può essere.

Alcuni altri vincolo potrebbe restringere ciò che B può essere. Ad esempio, se FD {Supplier} -> {Supplier Phone} è valido, ciò limita ciò che il telefono fornitore può essere in altre righe anche se l'articolo è PK non lo fa.

Il fatto che un particolare FD tenga dipende da quali righe dovrebbero entrare in una tabella in una determinata situazione e quali situazioni possono sorgere. Quindi ciò che FD tengono determina quali sono i supertasti e i CK. Quindi puoi scegliere un CK come PK.