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

Che cos'è una chiave candidata nella progettazione di database?

Una chiave candidata è un concetto importante nella normalizzazione del database. Continua a leggere per scoprire cos'è una chiave candidata e come verificare se un insieme di attributi è una chiave candidata.

La chiave del candidato chiamato anche semplicemente chiave è una parte importante della progettazione del database. È la base teorica per concetti tecnici come chiavi primarie e alternative (univoche). Ogni progettista di database dovrebbe sapere come identificare le chiavi candidate e come scegliere quella giusta per la propria tabella.

Il concetto di chiave del candidato è insegnato in tutti i corsi universitari sui database come parte della teoria della normalizzazione dei database. I problemi comuni che dovrai affrontare quando imparerai le chiavi candidate sono verificare se un determinato insieme di attributi è una chiave candidata e trovare tutte le chiavi candidate per una relazione.

La comprensione delle chiavi candidate è importante per comprendere i normali moduli nelle tabelle del database. Questa conoscenza ti aiuterà a ricordare le regole per le forme normali più comuni.

In questo articolo, spiegheremo il concetto di chiavi candidate in termini semplici. Inoltre, ti mostreremo come verificare se un insieme di attributi è una chiave candidata.

Terminologia di base della normalizzazione del database

Prima di leggere le chiavi candidate, assicurati di avere familiarità con la terminologia di base della normalizzazione. Esaminiamo brevemente i termini più importanti.

Una relazione è il nome teorico di una tabella di database. Una relazione (tabella) ha un nome ed è composta da attributi denominati (colonne).

Una dipendenza funzionale in una relazione (A -> B ) ti dice che ogni volta che due righe hanno gli stessi valori per tutti gli attributi nell'insieme A, avranno anche gli stessi valori per tutti gli attributi nell'insieme B.

La chiusura di un insieme di attributi è l'insieme di quegli attributi che possono essere determinati funzionalmente da questo insieme. Puoi rivedere l'algoritmo per calcolare la chiusura degli attributi qui.

Supertasti

Informalmente, una chiave candidata è un insieme di attributi che identificano in modo univoco una riga.

Per definizione, una chiave candidata è una superchiave minima. Che cosa significa questo? Un supertasto è un attributo o un insieme di attributi tale che la sua chiusura sia tutti gli attributi nella relazione.

Vediamo alcuni esempi. Qui abbiamo la tabella CourseEditions. Memorizza informazioni sulle edizioni dei corsi.

Ogni anno, un determinato corso può essere tenuto da un insegnante diverso, con un prezzo diverso e un limite di posti diverso. Abbiamo quindi le seguenti dipendenze funzionali:

  • id -> corso, anno, insegnante, prezzo, posti – l'ID determina tutti gli altri attributi
  • corso, anno -> id, insegnante, prezzo, posti – il corso e l'anno determinano l'ID, l'insegnante, il prezzo e i posti.

Edizioni del corso

anno
id corso insegnante prezzo punti
1 Banche dati 2019 Chris Cape 100 45
2 Matematica 2019 Daniel Parr 80 34
3 Banche dati 2020 Orologio Jennifer 110 30

Quali sono le superchiavi in ​​questa tabella? Innanzitutto, tutti gli attributi formano una superchiave, quindi l'insieme {id, course, year, teacher, price, spots} è una superchiave Ricorda che l'insieme di tutti gli attributi è una superchiave in tutte le tabelle.

Ci sono superchiavi più piccole in questa tabella? Si ci sono. L'insieme {id} è una superchiave Abbiamo la dipendenza funzionale id -> corso, anno, insegnante, prezzo, spot e, naturalmente, abbiamo la banale dipendenza id -> id . Una volta ottenuto l'id, possiamo determinare tutti gli altri attributi dalle dipendenze funzionali.

Il set {corso, anno} è anche una superchiave. Abbiamo la dipendenza funzionale corso, anno -> id, insegnante, prezzo, spot , e abbiamo le banali dipendenze funzionali corso -> corso e anno -> anno . Una volta che abbiamo corso e anno , possiamo determinare tutti gli altri attributi dalle dipendenze funzionali.

L'insieme {id, course, year, teacher} è anche una superchiave. Abbiamo id , corso e anno . Quindi, possiamo determinare tutti gli altri attributi nella tabella con questi tre attributi.

D'altra parte, il set {teacher} non è una superchiave Se conosciamo l'insegnante, non possiamo determinare nessun altro attributo diverso dall'insegnante. Il set {insegnante, prezzo} inoltre non è una superchiave. Una volta che avremo insegnante e prezzo , non possiamo determinare altri attributi.

Supertasti minimi

Non tutte le superchiavi sono chiavi candidate. Per essere una chiave candidata, una superchiave deve essere minima il che significa che se ne togli degli attributi, non sarà più una superchiave. Diamo un'occhiata ad alcuni esempi.

L'insieme {id} è una superchiave, ed è minima. Non puoi toglierne gli attributi, perché avrai quindi un set vuoto e un set vuoto non è una superchiave. Pertanto, l'insieme {id} è una chiave candidata.

Il set {corso, anno} è anche una superchiave e una chiave candidata. Se ne togli uno qualsiasi degli attributi, il set rimanente non è più una superchiave. Hai bisogno di entrambi i corso e anno per determinare gli altri attributi nel set.

Tuttavia, il set {id, course, year, teacher} è una superchiave ma non una chiave candidata. Ad esempio, se rimuovi l'attributo insegnante, il set rimanente è ancora una superchiave. Infatti, in questo caso, puoi rimuovere qualsiasi attributo da {id, course, year, teacher} e il set rimanente sarà ancora una superchiave.

Nota che una superchiave minima non significa la superchiave con il minor numero di elementi. Entrambi {id} e {corso, anno} sono chiavi candidate anche se hanno un numero diverso di elementi.

Algoritmo:verifica che un insieme di attributi sia una chiave candidata

Questo è il problema comune della progettazione del database:come si verifica se un insieme di attributi è una chiave candidata?

Ecco l'algoritmo per verificarlo:

  • Passaggio 1:verifica se il set specificato è una superchiave. Calcola la chiusura degli attributi nell'insieme. Se la chiusura è l'insieme di tutti gli attributi, l'insieme è una superchiave.
  • Fase 2:controlla se la superkey è minima. Rimuovere ogni attributo, uno alla volta. Se l'insieme rimanente è una superchiave, la superchiave non è minima e l'insieme non è una chiave candidata. Se non riesci a rimuovere nessuno degli attributi e mantenere la proprietà superkey, il set è una chiave candidata.

Ad esempio, controlliamo se il set {course, year} è davvero una chiave candidata.

  • Passaggio 1:calcoliamo la chiusura di {corso, anno}. Usando l'algoritmo di chiusura, concludiamo che la chiusura è effettivamente {id, course, year, teacher, price, spot}. Pertanto, l'insieme {corso, anno} è davvero una superchiave.
  • Passaggio 2. Proviamo a rimuovere il corso dal set. Ci rimane il set {anno}. Non c'è dipendenza funzionale con solo anno come il lato sinistro. Pertanto, la chiusura di questo set è {year} . Allo stesso modo, quando rimuoviamo l'attributo anno, la chiusura del set rimanente è {corso}. {anno}{corso} sono superchiavi, quindi l'insieme {course, year} è una superchiave minima e quindi una chiave candidata.

Se ti è piaciuto questo articolo, dai un'occhiata agli altri articoli sulla normalizzazione sul nostro blog.

Se sei uno studente che segue lezioni di database, assicurati di creare un account accademico gratuito in Vertabelo, il nostro strumento di disegno di diagrammi ER online. Ti permette di disegnare diagrammi ER logici e fisici direttamente nel tuo browser.

Vertabelo supporta PostgreSQL, SQL Server, Oracle, MySQL, Google BigQuery, Amazon Redshift e altri database relazionali. Provalo e scopri com'è facile iniziare!