2016-03-18 25 views
13

Sto lavorando a un'applicazione database ASP.NET MVC. Guardando il database le chiavi esterne sono molto incoerenti, in pratica sono presenti solo se sono state specificate negli script SQL che hanno creato le tabelle. Nella maggior parte dei casi non ci sono.Le chiavi esterne mancanti nel database hanno un effetto su sql generato da EF?

Tuttavia, guardando nel modello edmx, posso vedere che è a conoscenza delle chiavi esterne, cioè ha identificato correttamente le proprietà di navigazione.

La mia domanda è, le chiavi esterne mancanti nel database effettivo hanno un effetto sul sql generato da Entity Framework? Per effetto intendo l'impatto negativo sulla performance.

Non riesco davvero a capire se è importante o meno.

Giusto per chiarire, nel database sto espandendo le tabelle e cercando la chiave rossa che indica una chiave esterna. Sto anche cercando nella sottocartella: "Chiavi".

+0

Quale versione EF stai usando? –

+0

@AndrewLoree EF 4.1 – DSF

risposta

5

impatto negativo sulle prestazioni.

Mi vengono in mente due effetti della presenza delle chiavi esterne.

  1. A tiny negative impact on inserts and updates, perché le chiavi devono essere controllate. Tuttavia, rispetto a tutto il resto che si svolge in un roundtrip completo del database, questo effetto è del tutto trascurabile. Assolutamente nessuna ragione per astenersi dal usarli. Non supererà mai i vantaggi dell'integrità dei dati.
  2. Un enorme guadagno di prestazioni quando si impostano chiavi esterne con eliminazioni in cascata e aggiornamenti.

In breve, non vi è alcun motivo per omettere deliberatamente le chiavi esterne.

Ovviamente, l'eredità non può essere sempre annullata durante la notte. Se c'è spazio per le modifiche nello schema del database, lo farei. In caso contrario, è possibile considerare l'aggiunta manuale di associazioni comuni nel modello edmx. Queste associazioni non verranno cancellate aggiornando il modello dal database.

1

Sì, hai bisogno di quelle chiavi esterne.
Non conosco Entity Framework, ma conosco alcuni SQL Server.
È possibile ottenere piani di esecuzione molto migliori se si dispone di chiavi esterne.
Kendra Little ha un bel video sulle chiavi esterne here.

È inoltre necessario assicurarsi che siano attivi e affidabili. Brent Ozar scrive su quello here.