Devo usare chiavi esterne nel mio database se uso laravel?

3

Sto creando un sito Web con Laravel per la prima volta. Ho controllato la documentazione delle relazioni oggi e sembra che Laravel usi solo semplici query SQL.

class User extends Eloquent {

    public function phone()
    {
        return $this->hasOne('Phone');
    }

}

$phone = User::find(1)->phone;

È fondamentalmente una seleziona * dai telefoni dove user_id = 1 query. Quindi la domanda è: dovrei comunque usare le chiavi esterne nel mio database per creare relazioni?

    
posta Andrius 04.01.2015 - 12:39
fonte

3 risposte

4

Le chiavi esterne nel database consentono l'integrità dei dati, poiché non è possibile eliminare una riga genitore se c'è una riga secondaria in un'altra tabella.

Mentre puoi contare sul framework per gestire i dati per te, il framework non abiliterà l'integrità dei dati e alla fine finirai con le righe orfane nel tuo database.

Quindi, il mio consiglio è: progettare il database correttamente per preservare i dati.

    
risposta data 08.07.2016 - 16:04
fonte
2

Usando esattamente le stesse parole di @JeffO

"Isn't user_id a foreign key?"

Penso che il problema non sia necessariamente quello di impostare una chiave straniera o meno. Il problema è quanto devi dipendere dalle funzionalità del database.

Su Laravel imposterai le tue chiavi esterne mentre aggiungi le tue migrazioni:

http://laravel.com/docs/4.2/schema#foreign-keys

Tuttavia, se per qualsiasi motivo / errore l'utente ha accesso diretto al database o utilizza le funzionalità di php senza il framework o qualsiasi altro problema, il sistema potrebbe non solo basarsi sul framework, ma è consigliabile aggiungere le chiavi esterne del database .

Infine, d'altra parte, ho già lavorato a progetti in cui hanno deciso di non avere chiavi esterne e si basano solo sulle convalide dei framework per motivi di manutenzione.

    
risposta data 06.01.2015 - 04:23
fonte
2

I dati appartengono all'organizzazione, non all'applicazione. Mentre in questo momento stai usando esclusivamente Laravel, in futuro potrebbero esserci diverse applicazioni che interagiscono con il database.

Attualmente sto lavorando a un'app avviata in FoxPro, migrata a ASP classic e parzialmente aggiornata a ASP.NET. Esistono almeno tre applicazioni che interagiscono con i dati e stiamo lavorando per l'integrazione con altri. Il nostro database non usa chiavi esterne, sebbene faccia uso di trigger per emularle, e mi piacerebbe davvero che lo facesse.

    
risposta data 08.07.2016 - 20:09
fonte

Leggi altre domande sui tag