2008-10-29 11 views

risposta

26

Sì. Assicura che tu non abbia un orfano (entrata senza genitore) e, in base all'utilizzo, se definisci un'eliminazione a cascata, quando un genitore viene eliminato, anche tutti i suoi figli verranno eliminati.

Lo svantaggio sarebbe un leggero calo di prestazioni proprio come qualsiasi altra chiave esterna.

+4

Un "orfano senza figli" ??? ;-) – Yarik

4

Sì, dovresti renderlo una chiave esterna.

I vantaggi saranno un modello dati migliore con minore ridondanza.

13

Sì, dovresti. Se hai un attributo in una relazione di database che funge da chiave primaria di un'altra relazione nello stesso database, dovresti renderlo un FK.

Potrete godere della advantages associated to foreign keys:

  • Supponendo che la corretta progettazione delle relazioni, vincoli di chiave esterna rendono più difficile per un programmatore di introdurre un'incoerenza nel database.
  • La centralizzazione del controllo di questi vincoli da parte del server di database rende superfluo eseguire questi controlli sul lato dell'applicazione. Ciò elimina la possibilità che applicazioni diverse non possano controllare i vincoli nello stesso modo.
  • L'utilizzo di aggiornamenti e cancellazioni a cascata può semplificare il codice dell'applicazione.
  • Le regole della chiave esterna correttamente progettate aiutano a documentare le relazioni tra le tabelle.

Gli svantaggi:

  • Se si definisce chiavi esterne, a volte è più difficile per eseguire operazioni di massa.
  • Forse implica un maggiore utilizzo del disco e un leggero calo di prestazioni.
5

Sì, si dovrebbe.

Vantaggi (come per qualsiasi chiave esterna):

  • Assicura che parent_id fa riferimento a una vera e propria riga nella tabella
  • Impedisce l'eliminazione accidentale di un genitore che ha figli, o assicura che le cascate Elimina per eliminare i bambini anche
  • Fornisce informazioni l'ottimizzatore può utilizzare

non riesco a pensare a eventuali svantaggi reali.

Problemi correlati