È una cattiva pratica usare il campo chiave surrogato di un modello di database nelle operazioni di business logic? [duplicare]

4

Sto costruendo un'app con una tabella Client che elenca i client ed è PK da un campo ID autoincrementante.

Ho bisogno di un identificatore univoco immutabile per ogni client che verrà utilizzato nella logica aziendale. Ad esempio, il client caricherà un singolo file su un bucket AWS S3, desidero utilizzare questo ID come parte della convenzione di denominazione dei file.

Sono esitante nell'usare la chiave surrogata come quel campo perché ritengo che accoppiasse la mia logica aziendale al mio livello di modello.

L'alternativa sarebbe aggiungere un campo ID separato, che non viene utilizzato per le relazioni con le chiavi esterne e utilizzato solo nella logica di business, ma poi dovrei generarlo ogni volta che viene creato un nuovo client.

L'alternativa vale la pena farlo a lungo termine o lo sto pensando troppo?

    
posta Jad S 05.11.2017 - 06:03
fonte

1 risposta

4

Questo è ok fintanto che

  • utilizzando la chiave esternamente non impone alcun vincolo rilevante sui tasti

  • l'unico tipo di utilizzo di BL è ancora "identificazione" e il fatto di utilizzarli non impone ulteriori requisiti sulla chiave per cambiarli in seguito.

  • l'esternalizzazione della chiave non espone alcuna informazione aziendale segreta che deve essere mantenuta privata (ad esempio, quante vendite all'anno fa un'azienda)

Ad esempio, il vincolo che ora tutti i caratteri della chiave devono essere validi per i file è probabilmente accettabile nella maggior parte dei casi reali e non abbina realmente il livello BL a dettagli di implementazione critici. Tuttavia, se si ottengono restrizioni sulla generazione automatica dell'ID a causa di alcuni tipi di conflitti di denominazione nella BL, probabilmente non è più accettabile.

Presumo nel tuo caso che queste cose non si applicano, ma va bene investire un pensiero nel caso specifico.

    
risposta data 05.11.2017 - 06:47
fonte

Leggi altre domande sui tag