è corretto utilizzare numeri negativi per estendere un modello di dati standard del settore

7

Sto lavorando a un progetto con un cliente che deve fare affidamento su un set di dati proprietario. Dispongono inoltre di dati personalizzati che si adattano logicamente ai dati proprietari. Quello che fanno è usare le stesse tabelle ma con ID negativi. Quindi un esempio sarebbe

Tabella : animali

Campi : animal_id, name, can_purr

Quindi l'organizzazione che fornisce i dati fornisce Animali

1, Cat, yes
2, Dog, no
3, Mouse, no

E poi il mio cliente sta aggiungendo i loro Frankenmals

-1, Werecat, yes
-2, Werewolf, no
-3, Jackalope, no

Quindi gli altri FK di Animal possono essere riutilizzati da Werecat e Jackalope. Ogni tanto un nuovo animale viene riconosciuto dal manutentore dei dati e aggiunge, o qualcosa si evolve in una cosa nuova in modo che le chiavi originali siano importanti da mantenere. L'industria frankenanimal utilizza tutto questo database e può capirmi se parlo di Animal 1, ma non se ho trasformato Animal 1 in qualcosa di diverso da un gatto che fa le fusa. Non esiste alcuna relazione implicita o mantenuta tra -2 e 2.

I numeri negativi potrebbero essere il modo migliore per farlo. Mi fa accapponare la pelle perché l'ID rappresenta qualcosa di diverso dall'identificazione dei record.

Molti altri sistemi stanno cambiando in questo momento. Quindi, se questo non è un grande design, ora è il momento di cambiarlo.

C'è qualcosa di così sbagliato nell'approccio dei numeri negativi? Il rischio principale che vedo è se il gestore dei dati decide di utilizzare identificatori negativi per i propri scopi? Un aggiornamento automatico potrebbe causare havok. Ma l'automazione potrebbe controllare quella condizione, quindi, non così male?

Non riesco proprio a trovare molti consigli in materia di best practice su questo. Quindi hai fatto i numeri negativi e ti sei pentito? Perché? O ti sei trasformato in un nuovo schema e poi te ne sei pentito per la manutenzione o per qualche altro motivo?

Le mie scuse se questo è troppo soggettivo. Solo non sono sicuro di come scoprire se sono solo illogico o se il doppio scopo sull'ID del record è già abbastanza grave da meritare una riprogettazione.

    
posta microsaurus_dex 08.05.2018 - 08:40
fonte

4 risposte

5

Da un punto di vista pratico, l'unica cosa che conta davvero è: è garantito che ogni codice che accede alla tabella Animal gestirà correttamente quegli ID negativi? Hai il codice completamente sotto il tuo controllo? Immagino di no, visto che stai parlando di un modello di dati "standard di settore", magari da qualche sistema ERP? O puoi almeno investigare le parti rilevanti del codice per capire come funziona? Presumo che sia coinvolto un fornitore di terze parti che fornisce software standard per questo.

Quindi controlla la documentazione di quello "standard del settore" - se dice qualcosa come "ID negativi possono essere aggiunti tranquillamente per scopi di personalizzazione", quindi vai avanti. Altrimenti, anche se funziona ora, non puoi essere sicuro che la prossima versione del software del fornitore esterno entrerà in collisione con il tuo attuale utilizzo. Quindi, se non sei sicuro che gli ID negativi possano essere utilizzati per quello che stai facendo, introduci un certo rischio di rompere il sistema in questo modo.

    
risposta data 08.05.2018 - 11:27
fonte
3

Stai lavorando con due set di dati. Qualsiasi tentativo di nascondere questo e fonderli in uno avrà strani effetti collaterali e molto probabilmente causerà problemi in seguito.

Molto meglio avere un database separato con una tabella con le stesse colonne di quella originale con tutti i tuoi franchi.

Quindi, rendi consapevole la tua serie di dati applicativi e usa le tuple {dataset, row_id} nella tua applicazione. Questo è bello, pulito ed estendibile (dato che puoi aggiungere set di dati aggiuntivi). Vi consentirà inoltre nella vostra applicazione di lavorare con i set di dati (ad esempio confrontare i risultati per set di dati solo ufficiali, set di dati uniti, dati personalizzati-set-1, ecc ...).

    
risposta data 08.05.2018 - 18:53
fonte
2

Non è una grande idea.

Il modo migliore è avere il tuo id e collegarlo all'ID dati esterno.

Diciamo che hai un identificatore di stringa per la tua tabella degli animali

MyAnimals
MyId,                                 name
230a33e0-ffa4-47ff-9ccb-b3bcf3a33166, Werecat
89f990d5-88eb-4055-b7fe-787cf75d0461, Werewolf


ExternalAnimalLink
MyId,     ExternalDataSetId, ExternalId
"1",      "aniCorp2018",     1
"2",      "aniCorp2018",     2
"wd_2",   "wildData2001",    2

I lati negativi dei numeri negativi si avvicinano.

  • Cosa succede se il fornitore esterno inizia a usarli?
  • Che cosa succede se hai bisogno di un terzo fornitore che usi anche i numeri?
  • Cosa succede se i numeri negativi vengono utilizzati per rappresentare errori (cattivi ma comuni)?
  • Cosa succede se un uint viene utilizzato in un determinato momento o i negativi non sono validi in qualche altro modo?
  • Cosa succede se il numero ha un significato aggiuntivo come l'ordine?

Ma dovresti considerare anche i problemi causati dall'uso di numeri per gli id.

  • Qual è il prossimo ID disponibile?
  • Qual è il numero massimo di animali mai
  • Per quanto riguarda gli animali di prova, ricevono numeri?
  • Il numero corrisponde allo stesso animale su tutti i database?

etc etc

    
risposta data 08.05.2018 - 17:01
fonte
1

La documentazione per il loro standard discute questo?

Nel settore dei servizi finanziari, è abbastanza normale vedere standard documentati che consentono estensioni proprietarie. Alcuni esempi di cose che ho visto:

  • Nessuna funzionalità per l'estensione, ma sono forniti un intervallo di ID "generici" per i tuoi scopi.
  • Gli ID qui sotto n sono riservati, ma qualsiasi elemento sopra n è per dati personalizzati.
  • I numeri negativi sono consentiti per campi specifici del cliente.

Ho visto e usato tutti i metodi di cui sopra, quindi l'utilizzo di numeri negativi potrebbe essere una soluzione praticabile. Penso che la cosa importante qui sia controllare la documentazione. Se la documentazione non specifica alcuna possibilità per gli ID personalizzati, potrebbe valere la pena portarlo con il manutentore / comitato standard come un miglioramento valido. In definitiva, se lo standard non esplicitamente dice che è possibile utilizzare numeri negativi, si rischia di rompere le cose se altri codici (ad esempio applicazioni di terze parti) non supportano numeri negativi.

    
risposta data 15.05.2018 - 03:32
fonte

Leggi altre domande sui tag