2009-09-01 12 views
10

Una chiave esterna che fa riferimento a una chiave primaria richiede il vincolo NOT NULL in un database PostgreSQL?
Il database è altamente normalizzato e sarà molto grande. Non desidero aggiungere ulteriori vincoli che rallenteranno ulteriormente le query se tali query non sono necessarie.Una chiave esterna che fa riferimento a PK richiede il vincolo NOT NULL?

+1

Nella tua applicazione la velocità è davvero più importante della correttezza? Non ti renderai conto dei costi per un assegno non nullo. La risposta alla tua domanda è no, ma vorrei specificare qualsiasi vincolo noto da tenere. –

risposta

11

Se si desidera essere in grado di rappresentare lo sconosciuto nella colonna FK di quella tabella, quindi renderlo nullable, se deve avere un valore, renderlo Not Null.

È possibile avere quanti record si desidera nella tabella di riferimento con valori FK null. Il vincolo univoco si trova sulle righe della tabella di riferimento (dove si trova il PK) non sulle righe nella tabella di riferimento (dove FK è).

+1

Questo è corretto. Per dirla in altro modo, dipende dal fatto che stai modellando una relazione 1: N o una relazione 0..1: N. cioè la relazione è facoltativa? –

+0

rapporto 1: 1. Il tavolo su cui sto lavorando è un tavolo da bridge. – WolfmanDragon

+1

Se è 1: N, allora la colonna FK DOVREBBE avere il vincolo Not Null su di esso. –

-1

Una chiave primaria deve essere univoca e idealmente dovrebbe essere selezionata dal database, per limitare i problemi con la concorrenza, quindi, sebbene possa essere univoca, per 1 record, ogni altro record deve avere un valore.

Altrimenti, come saprai a quale riga si riferisce questa chiave esterna se c'è più di una corrispondenza?

Quindi, come New in town menzionato, NULL dovrebbe essere valido, ma per un record, poiché l'unicità sarà il problema più grande.

MODIFICA: oops, ho capito male la domanda.

Ho messo nullo su chiavi esterne prima, ma se si dispone di eliminazione a cascata, ad esempio, null non funzionerà, a meno che non si abbia la chiave nella tabella primaria con un valore nullo.

+2

OP chiedeva il vincolo "non nullo" sul tasto _FOREIGN_ – ChssPly76

Problemi correlati