2011-09-06 13 views
5

Sto leggendo un libro intitolato "La biblioteca di MySQL sviluppatore" di Paul DuBois e nel libro dice:qualcuno può spiegarmi cosa fanno effettivamente le chiavi primarie?

CREATE TABLE score 
(
student_id INT UNSIGNED NOT NULL, 
event_id INT UNSIGNED NOT NULL, 
score INT NOT NULL, 
PRIMARY KEY (event_id, student_id), 
INDEX (student_id), 
FOREIGN KEY (event_id) REFERENCES grade_event (event_id), 
FOREIGN KEY (student_id) REFERENCES student (student_id) 
) ENGINE = InnoDB; 

Abbiamo fatto la combinazione delle due colonne di una chiave primaria. Ciò garantisce che non avremo punteggi duplicati per uno studente per un dato quiz o test. Si noti che è la combinazione di event_id e student_id che è univoco. Nella tabella dei punteggi, nessuno dei due valori è univoco . Ci saranno più righe punteggio per ogni event_id valore (uno per ogni studente), e più righe per ogni valore student_id (uno per ogni quiz e test) preso da parte dello studente

Ciò che non è chiaro a io sono il combinare due colonne come una chiave primaria ... Significato, sto avendo difficoltà a visualizzare ciò che sta effettivamente succedendo sotto il cofano ... Prende una serie di numeri [95, 210] per esempio e usando quello come una "chiave" ... È appropriato pensare a una chiave primaria come chiave per un hash?

In precedenza ho sempre pensato alle chiavi primarie come nient'altro che ID univoci per un tavolo .. ma ora, in questo contesto, sto trovando me stesso che cosa stia realmente facendo una chiave primaria. Qualcuno può darmi il minimo dei tasti SQL?

risposta

1

una chiave primaria è essenzialmente si tratta di una chiave unica con un vincolo non nullo. (come già accennato, è utilizzato per applicare l'integrità referenziale dei dati)

È semplicemente un diverso tipo di chiave primaria:

chiave surrogata chiave/artificiale = solitamente un numero sequenziale

http://en.wikipedia.org/wiki/Surrogate_key

chiave naturale = colonna (s) che rendono la riga univoca

http://en.wikipedia.org/wiki/Natural_key

e qui http://www.geeksengine.com/database/design/primary-key-constraint.php è davvero una buona spiegazione delle differenze.

3

"Le chiavi primarie" sono un concetto fondamentale nei database relazionali. Sono (destinati a essere) il metodo di identificare una riga in una tabella.

Le chiavi primarie sono decisamente non solo un "ID univoco".

E sì, una "chiave primaria" può (e spesso sarà) costituita da più di una sola colonna.

Ecco un buon collegamento su "molti-a-molti" tavoli di relazione:

http://www.tekstenuitleg.net/en/articles/software/database-design-tutorial/many-to-many.html

PS: Per rispondere alla tua domanda specifica:

  1. Il vostro esempio uno sarà quasi certamente hanno almeno altri due tavoli: uno per "studenti", un altro per "eventi".

  2. In questo esempio, la tabella "punteggi" rappresenta i punteggi ottenuti da un particolare studente in un particolare evento. La "chiave primaria composta" è composta sia da "ID studente" (una "chiave esterna" nella tabella "studente"), sia da un "ID evento" (una chiave esterna nella tabella degli eventi).

  3. Se tutto ciò che si voleva erano i punteggi, la tabella "punteggi" sarebbe sufficiente.

  4. Se si voleva stampare il nome dello studente con il suo punteggio, tuttavia, si avrebbe bisogno di "unire" il tavolo degli studenti e la tabella punteggi (fanno un "inner join" on "student_id")

  5. Analogamente, se si desidera stampare il nome dell'evento o la posizione insieme ai punteggi, è probabile che sia necessario eseguire un join interno di punteggi ed eventi, in "event_id".

'Spero che ti aiuti!

2

I valori della chiave primaria consentono di identificare in modo univoco una singola riga di dati nella tabella in ogni momento.

Se sono presenti più chiavi candidate, allora i valori corrispondenti ad ogni chiave candidata identificare in modo univoco una singola riga nella tabella in ogni momento. Una chiave candidata è (può essere) scelta come "chiave primaria", ma la scelta della chiave candidata da nominare è in gran parte arbitraria. I criteri sono al di fuori del regno del modello relazionale di dati di per sé (in genere, si sceglie la chiave più breve o la chiave più utilizzata).

Così, la chiave primaria è il meccanismo tupla livello o livello di riga indirizzamento per un tavolo.

2

Il punto di chiavi è integrità dei dati . La chiave impedisce a qualsiasi utente di immettere righe duplicate, ovvero righe con lo stesso set di valori per gli attributi chiave. Ciò garantisce che ogni riga possa essere identificata in modo univoco e quindi evita ridondanze, anomalie e risultati incecianti che potrebbero altrimenti derivare dalla duplicazione delle informazioni. Le chiavi implementano le regole aziendali, definiscono il significato della tua tabella e proteggono l'integrità dei tuoi dati.

Nel vostro esempio particolare, se fosse possibile inserire più righe per eventi e studente poi un singolo studente potrebbe avere più di un punteggio per ogni evento. La chiave implementa una regola secondo cui uno studente può avere solo un punteggio per evento.

Problemi correlati