Dovrei usare una chiave composita per questa tabella?

3

Il mio database memorizzerà le parole, quindi la tabella di Word è la più importante. La tabella di Rhyme elenca le parole con cui una particolare parola fa rima perfettamente. Consiste di tre campi:

RhymeID - primary key.
WordID - foreign key linking to Word table
Rhyme - a non key integer which refers to a different record in the Word table.

es. 'cat' ha WordID 009, 'bat' ha WordID 014 e 'fat' ha WordID 035, due record nella tabella di Rhyme potrebbero assomigliare a questo

RhymeId - WordId - Rhyme
001 - 009 (cat) - 014 (bat)
002 - 009 (cat) - 035 (fat)

La domanda è: dovrei rendere WordId una chiave primaria per formare una chiave composita con RhymeId? Ho bisogno di identificare in modo univoco ogni record? Non ho esperienza pratica con i database, questo è ancora in fase di pianificazione.

    
posta Lou 01.07.2014 - 18:50
fonte

2 risposte

5

Prima chiarisci che Rhyme è anche un FK

Dovresti eseguire una delle seguenti operazioni:

  • Crea RhymeId del PK e crea un indice univoco composito con WordID e Rhyme quindi nessuna combinazione di due parole appare due volte.
  • Sbarazzati di RhymeId e crea un PK composito con WordID e Rhyme

Preferisco la seconda opzione perché devi conservare solo un indice anziché due.

    
risposta data 01.07.2014 - 19:33
fonte
-1

Qui si applicano due concetti del mondo del design DB. Sono "chiavi naturali" e "chiavi surrogate". Una chiave naturale è quella combinazione di colonne, i cui valori possono essere utilizzati per distinguere la riga che li contiene da tutte le altre righe della tabella, vale a dire che la combinazione di valori è unica nella tabella. È importante notare che queste colonne appaiono "naturalmente" nella comprensione del problema da parte dell'utente. Una chiave surrogata è un valore inventato per sostituire la chiave naturale, di solito per ragioni tecniche o prestazionali. Una volta creata una chiave surrogata, è normale utilizzarla come chiave esterna in tutte le altre tabelle.

Nel tuo esempio wold "cat" sii la chiave naturale della tabella Word e "009" è la chiave surrogata per quella chiave naturale.

Quindi, per la tua tabella Rhyme la chiave naturale sarebbe WordID e Rhyme (sì, anche se sono entrambe chiavi sostitutive di un'altra tabella) e RhymeID è la chiave surrogata.

Se altre tabelle avranno una chiave esterna che punta a Rhyme , suggerirei caldamente di dargli una chiave surrogata. Se così non sarà, la surrogata sarà gonfia del 50% per il valore zero in quella che probabilmente sarà una tabella eccessivamente grande; Suggerirei di ometterlo.

    
risposta data 02.07.2014 - 13:42
fonte

Leggi altre domande sui tag