Devo memorizzare solo l'ID della chiave esterna o ulteriori informazioni relative a questo articolo?

-2

Credo che tutti abbiano incontrato questo esempio numerose volte, in cui esiste una relazione chiave primaria / straniera. Ora, mi interessa quando aggiungere solo un ID di chiave esterna invece di tutte / alcune importanti informazioni sulle chiavi esterne.

Ad esempio

prodotto

ID
Value
Name
Description

Ordine

ID
ProductID
Value
Name
Description

vs

Ordine

ID
Value
Name

vs

Ordine

ID
ProductID
Value
    
posta John 03.02.2017 - 15:34
fonte

2 risposte

2

La risposta breve è "mai" (si applicano i caveat).

Se hai una relazione genitore / figlio, le chiavi esterne ti danno un modo naturale di modellarlo. Considera queste situazioni:

  • Hai diversi ordini che utilizzano lo stesso prodotto, immediatamente hai dati duplicati per ogni ordine.
  • Che cosa succede se vuoi un modo per modellare le situazioni in cui gli ordini hanno più prodotti.
  • Se vuoi modificare i dettagli di un prodotto (il suo prezzo, per esempio), devi modificarlo ovunque sia usato.
  • Che cosa succede se hai altre situazioni in cui desideri utilizzare le informazioni sul prodotto (controllo delle scorte, forse). È necessario copiare tutti i dati in queste posizioni anche
  • Se hai bisogno di utilizzare le informazioni sul tuo prodotto in più posizioni, tutti i problemi sopra riportati sono moltiplicati

Tecnicamente, quest'area di sviluppo del database si chiama normalizzazione del database e il tuo caso specifico (utilizzando chiavi esterne per fare riferimento a record correlati) viene chiamato prima forma normale. Probabilmente vale la pena di leggere su questi argomenti.

(avvertimenti) La risposta leggermente più lunga è "probabilmente mai", a meno che l'applicazione non sia estremamente sensibile alle prestazioni e i requisiti di prestazione superino il costo di trattare i punti sopra riportati. Uno di questi esempi è un data warehouse, in cui è garantito che i vecchi dati non cambiano e le prestazioni possono trarre vantaggio da alcuni dati duplicati senza i rischi sopra menzionati. Per tutto il resto, normalizza i tuoi dati.

    
risposta data 03.02.2017 - 16:08
fonte
0

Quello che stai cercando di realizzare è semplice, ma considera che hai un prodotto ben definito "Product_table" con un ProductID univoco come PK con le relazioni 1: n e "Order_table" sta per avere un "OrderID" come un PK con relazioni 1: n. Il 'Sales_table' avrà un 'row_ID' come valore univoco invece l'orderID apparirà più volte insieme ai diversi ProductID che si andranno ad associare ad un ordine ciascuno vincolato da FK ProductID e FK OrderID. Questo è ciò che accade nella vita reale che un ordine ha molti prodotti e l'unico modo per metterli insieme è una tabella che memorizza la relazione di un OrderID con molti ProductID inclusi in un ordine di vendita

Product_table

ProductID (PK)

prezzo

Nome

Descrizione

Order_table

OrderID (PK)

Valore

Nome

Descrizione

Sales_table

row_id

IDOrdine

ProductID

Utilizza il prezzo per il singolo prezzo di ogni prodotto e utilizza il valore per il totale dell'ordine come convenzione di denominazione. Devi inserire i dati dell'ordine prima di finalizzare la ricevuta di vendita in modo da aggiornare la tabella di vendita dopo

    
risposta data 03.02.2017 - 16:18
fonte

Leggi altre domande sui tag