ID esterno per ogni tabella relazionale

1

Dovrei aggiungere un ID esterno per ogni tabella?

Ad esempio se ho queste tabelle:

Customer
=======================================
Id       Name      Gender
---------------------------------------
1        John      M
2        Doe       M
---------------------------------------

CustomerPurchase
==========================================================================
Id       ExternalId      CustomerId            TotalQty
--------------------------------------------------------------------------
1        PO0313-0001     1                     10
--------------------------------------------------------------------------

In questo esempio, capisco che ExternalId è richiesto nella tabella CustomerPurchase (per la stampa, ecc.).

Ma non vedo alcun motivo per cui la tabella clienti debba averne bisogno.

Cordiali saluti, la ragione per cui l'ho chiesto perché un mio amico ha detto che SAP utilizza ExternalIds nelle loro tabelle.

Dovrei usare ExternalId in ogni tabella?

Mi mancano altri usi di ExternalId oltre all'identificazione più amichevole dell'utente?

Grazie!

    
posta Samuel Adam 09.07.2013 - 06:25
fonte

2 risposte

4

In parole semplici:

Utilizza le chiavi primarie surrogate come chiavi primarie quando:

  1. Non ci sono chiavi naturali o commerciali
  2. Le chiavi naturali o commerciali sono cattive (cambiano spesso)
  3. Il valore della chiave naturale o aziendale non è noto al momento dell'inserimento del record
  4. Le chiavi naturali a più colonne (in genere diverse FK) superano tre colonne, il che rende i join troppo prolissi.

Se esiste una chiave naturale che non rientra nelle condizioni elencate sopra, per il bene di Dio, usala , soprattutto se la chiave è uno standard ISO o è rilasciata da qualche rispettata istituzione , come codici paese , aeroporto o compagnia aerea Codici IATA , indirizzi MAC, numeri di targa auto, codici di film IMDB, segnali di chiamata delle stazioni radio, ecc. Ciò ti consentirebbe di interoperare più facilmente.

Le condizioni sopra riportate significano che le chiavi sostitutive dovranno essere utilizzate in molte tabelle. Ma non tutti.

    
risposta data 09.07.2013 - 09:35
fonte
0

ExternalId sembra essere nient'altro che una funzione che fornisce il login SAP attuale.

Quando si descrive una registrazione di attività, inclusa l'identificazione di chi ha svolto l'attività è normale. È previsto. Decidere quale ID usare è diverso.

Sei interessato a registrare il nome utente esterno come determinato dal sistema sottostante, o sei interessato a fornire il nome utente per quanto riguarda il dominio dell'applicazione logica?

È plausibile che la società acquirente abbia più di un acquirente autorizzato. Probabilmente, questo è uno scenario comune. Questo è probabilmente un caso chiaro in cui è importante includere l'identificazione dell'attore in questo disco d'azione.

In questo caso, l'ID utente in questione non è un ID utente interno logico. Invece, è un ID utente esterno fornito da un sistema fisico. Mentre utilizzare l'ID utente del sistema esterno come mezzo di comodo per l'autenticazione è ottimo, sarei riluttante a raccomandare l'utilizzo come base dell'identificazione interna per le domande di autorizzazione. Invece, armonizza o traduci gli ID utente esterni in ID utente interni logici dell'applicazione.

La registrazione degli ID utente esterni è ottima perché offre l'opportunità di controllare l'accesso al sistema e i modelli di utilizzo. Tuttavia, c'è un conflitto. È un utente logico che accede da una macchina Windows diversa da un utente che accede da una macchina UNIX anche quando effettivamente è la stessa persona o servizio? Cosa succede se lo schema / database viene portato / ospitato / replicato su un sistema diverso, che utilizza un controllo di accesso al database diverso e utilizza uno schema di nome del database diverso? Invece di aggiungere un'altra mappatura degli ID utente esterni all'ID utente logico interno, potrebbe essere necessario trasformare anche i dati precedenti.

Separando gli ID utente esterni in una tabella utente, è possibile scegliere di associare diversi accessi al sistema con utenti logici identici o diversi. Prevenendo anche il sanguinamento degli ID utente di sistema esterni nei dati delle applicazioni logiche, si fornisce una certa protezione ai dati nel caso in cui le future implementazioni forniscano schemi di autenticazione diversi.

La terza ragione per isolare i nomi utente esterni dai nomi utente del dominio logico interno è nel caso di rappresentazione o delega. A volte un utente è autorizzato e prevede di eseguire azioni per conto di terzi, in cui l'azione dovrebbe essere normalmente vista come eseguita dal delegante, ma forse con qualche passo importante che indica che si è verificata la delega e chi ha assunto l'identità successiva (e altre informazioni pertinenti della sessione ).

User
|UserId(PK)    |PersonaId    |AuthExternSAP    |GoogleOAuth2    |
|1             |1            |PO0313-0001      |                |
|2             |1            |                 |345345324       |

Customer
|CustomerId(PK)    |UserId    |
|1                 |1         |

CustomerPurchase
|CustomerPurchaseId (PK)    |CustomerId    |TotalQty    |SellableResourceId    |
|1                          |1             |10          |1                     |
    
risposta data 09.07.2013 - 21:11
fonte

Leggi altre domande sui tag