2009-11-20 17 views
8

Se non ho bisogno di una chiave primaria non dovrei aggiungerne una al database?È OK non usare una chiave primaria quando non ne ho bisogno uno

+16

Non c'è quasi nessun caso in cui non è necessaria una chiave primaria. Fondamentalmente, se una tabella non ha una chiave primaria, non è una tabella - è solo un mucchio di dati. –

+2

Potrebbe non essere pertinente alla tua domanda, ma ho bisogno di chiedere: * Perché non senti di averne bisogno? * –

+0

Puoi darci maggiori informazioni sulla situazione che stai affrontando? Le chiavi primarie non sono sempre necessarie ma se sapessimo cosa stavi cercando di fare potremmo darti un consiglio migliore. – TLiebe

risposta

13

Una chiave primaria identifica in modo univoco una riga nella tabella.

Il fatto che sia indicizzato e/o in cluster è un problema di implementazione fisica e non correlato alla progettazione logica.

È necessario uno per la tabella per avere un senso.

3

Se non è necessaria una chiave primaria, non utilizzarne una. Di solito ho bisogno di chiavi primarie, quindi di solito le uso. Se hai tabelle correlate probabilmente vuoi le chiavi primarie e quelle straniere.

+0

+1 breve e dolce :) – James

0

Una chiave primaria consente sempre prestazioni di query. Quindi, se hai mai bisogno di interrogare usando la "chiave" in una "chiave esterna", o usato come ricerca allora sì, craete una chiave esterna.

+1

Non capisco il fatto, che i tasti primari aiutano con le prestazioni? Se non ne hai bisogno, non cercherai record usando uno. Quindi, non c'è beneficio. – brainfck

+0

Per quale motivo verrà utilizzato il tavolo? per lo più abbiamo bisogno della tabella per memorizzare alcune informazioni, e starete cercando i valori da essa. –

+1

Luke101 dovrebbe pubblicare il suo caso d'uso e vedremo se ne avrà bisogno. – brainfck

2

Sì, ma solo nello stesso senso in cui è possibile non utilizzare una cintura di sicurezza se non si prevede di essere in un incidente. Cioè, è un piccolo prezzo da pagare per un grande vantaggio quando ne hai bisogno, e anche se pensi di non averne bisogno, lo farai in futuro. La differenza è che tu sei un sacco più probabile che abbia bisogno di una chiave primaria piuttosto che entrare in un incidente d'auto.

Dovresti anche sapere che alcuni sistemi di database creano una chiave primaria per te se non lo fai, quindi non stai risparmiando molto in termini di ciò che sta accadendo nel motore.

+5

Non sono d'accordo. Mi rifiuto di indossare le cinture di sicurezza in quanto mi impediscono il pieno accesso alla mia birra. Ma non creerò mai un tavolo senza un pk. –

+0

@Rev Gonzo, quello che ti serve è un porta birra più strategicamente posizionato. Dai, è il 2010. – JeffO

40

È necessaria una chiave primaria. Non lo sai ancora.

+6

Una volta pensavo che non avessi bisogno di una chiave primaria ... Adesso lo so meglio. – MiseryIndex

+2

+1 Perché questo riflette più accuratamente la realtà. Riesco a vedere casi in cui uno potrebbe non averne bisogno, ma pochi e distanti tra loro. – Murph

+1

Tranne quando non hai bisogno di una chiave primaria e lo sai ora. Questo è un caso insolito però. Meglio giocare sul sicuro ed errare in favore di un PK. – MarkPflug

0

Non so. Ho usato un paio di tabelle in cui c'è solo una singola riga e una singola colonna. Sarà sempre solo una singola riga e una singola colonna. Non ci sono relazioni con le chiavi straniere.

Perché dovrei inserire una chiave primaria?

+0

perché dovrebbe avere un tavolo per quello ????? –

+0

È necessario memorizzare una singola informazione? Qualcosa come una preferenza del sistema? Tutti hanno bisogno di quella porzione di dati, ma non si vuole creare una cosa completamente nuova solo per ottenere quel pezzo di dati. – ElGringoGrande

+3

Ah. Ma tu vuoi una chiave primaria su questo tavolo. E un vincolo di controllo che limita quella chiave primaria a un singolo valore. Perché altrimenti ritorni tra sei mesi e scopri che qualcun altro ha aggiunto un'altra riga per te, e qual è l'applicazione che sta raccogliendo è arbitraria ... –

0

Una chiave primaria è principalmente formalmente definita per facilitare l'integrità referenziale, tuttavia se la tabella è molto piccola o è improbabile che contenga dati univoci, si tratta di un sovraccarico non necessario. La definizione degli indici sulla tabella può essere normalmente utilizzata per implicare una chiave primaria senza dichiararla formalmente. Tuttavia, è necessario considerare che la definizione della chiave primaria può essere utile per gli sviluppatori e gli strumenti di creazione dello schema o SQL Dev, poiché i metadati aiutano a comprendere e alcuni strumenti si basano su questo per definire correttamente le relazioni chiave primaria/esterna nel modello.

0

Beh ...

Ogni tabella in un DB relazionale ha bisogno di una chiave primaria. Come già accennato, una chiave primaria è dati che identificano un record in modo univoco ...

Si potrebbe ottenere senza avere un campo "ID", se si dispone di una tabella NM che unisce 2 tabelle diverse, ma è possibile in modo univoco identifica il record con i valori di entrambe le colonne a cui ti unisci. (Chiave primaria Composite)

Avere un tavolo senza una chiave primaria è contro la prima forma normale, e non ha nulla a che fare in un DB relazionale

2

No, a meno che non si può trovare un esempio di "Questa banca dati dovrebbe funziona molto meglio se table_x non ha una chiave primaria."

È possibile fare una discussione per non utilizzare mai una chiave primaria, se le prestazioni, l'integrità dei dati e la normalizzazione non sono richieste. Le funzionalità di sicurezza e backup/ripristino potrebbero non essere necessarie, ma alla fine, si mette il tuo ragazzo pantaloni e unisciti al mondo reale dell'implementazione del database

1

Sì, una tabella deve SEMPRE avere una chiave primaria ... a meno che non sia necessario identificare in modo univoco i record in essa contenuti. (Mi piace fare affermazioni assolute e immediatamente contraddirli)

Quando non è necessario identificare in modo univoco i record in una tabella? Quasi mai. L'ho fatto prima però per cose come le tabelle del registro di controllo. Dati che non saranno aggiornati o eliminato, e non sarà vincolato in alcun modo. Registrazione essenzialmente strutturata.

0

Si dovrebbe sempre avere una chiave primaria, anche se è solo su ID. Forse NoSQL è quello che stai cercando invece (solo chiedendo)?

0

Questo dipende molto da quanto è sicuro che tu non ne abbia bisogno. Se hai solo il minimo dubbio, aggiungine uno - ti ringrazierai dopo. Un indicatore è se i dati che memorizzi potrebbero essere correlati ad altri dati nel tuo DB in un punto.

Un caso di utilizzo a cui mi viene in mente è un tipo di tabella di registrazione, in cui è sufficiente scaricare una voce dopo l'altra (per elaborarle correttamente in un secondo momento). Probabilmente non avrai bisogno di una chiave primaria lì, se stai memorizzando abbastanza dati per filtrare i messaggi rilevanti (come una data). Ovviamente, è discutibile utilizzare un RDBMS per questo.

Problemi correlati