Due possibili soluzioni a un problema, progettazione di DB

4

Ho visto il post recente sulla persona che interroga la soluzione del suo capo ( credo che la mia soluzione sia migliore del mio capo, quindi dovrei L'ho ignorato? ) e ho deciso di chiedere qualcosa di simile, ma non come "scontro" come sembrava nel link precedente.

Per dirla in modo semplice e concettualmente:
Abbiamo un'app Web che consente la fatturazione telefonica per molti clienti diversi. Il fatto è che la persona che ha avviato il progetto non ha considerato che ci siano solo 9999 possibili estensioni telefoniche nel nostro design (un po 'ingenuo, lo so). Ci siamo imbattuti in un punto in cui gli utenti di diversi clienti dovranno condividere lo stesso extension number . Nel livello DB, extension number è fisso come unique e la tabella Extensions ha una chiave esterna a Users .

La soluzione più semplice che abbiamo visto è stata rimuovere questo vincolo unique e consentire la duplicazione di extension numbers perché è ancora possibile controllare e convalidare per vedere a quale Client appartiene la User . Tuttavia, la persona che supervisiona il mio lavoro crede che potrebbe causare problemi futuri se semplicemente consentissimo la duplicazione. Mi ha suggerito di creare una tabella intermedia che colleghi due tabelle, ovvero UserProfile (che ha una chiave esterna per Utente e Client ) e la tabella Extension . Dal momento che il mio modo di procedere mi è sembrato più semplice, ho creato un ramo del progetto per verificare se funziona bene, cosa che fa. Poi ho iniziato a implementare l'altro modo e ho incontrato alcune complicazioni, modifiche a livello di sistema, ma continuo a pensare che sia fattibile. La persona che supervisiona il mio lavoro è un amministratore di sistema che fa qualche programmazione. Sono il programmatore a tempo pieno, anche se senza molta esperienza (ancora giovane;)). Sarebbe bello se avessi qualche prospettiva esterna sul mio dilemma?

Grazie mille ragazzi.

    
posta chiurox 20.12.2010 - 15:23
fonte

4 risposte

1

Questa è una risposta un po 'astratta, ma vorrei andare con il design che più strettamente modella il business. Nel tuo caso, sembra in realtà , tu fai hai situazioni in cui le persone condividono estensioni, perché stai modellando molti sistemi telefonici distinti. Quindi abbandonerei il vincolo univoco. Ciò significa che l'estensione non è più una chiave naturale per una persona, ma non la vedo come un problema.

    
risposta data 20.12.2010 - 15:43
fonte
1

Penso che dimensionalmente la tabella dei collegamenti sia migliore, perché tu non duplica i dati. Quella tabella extension non crescerà affatto, dando più spazio per i dati del cliente. Tuttavia, ciò richiederebbe la modifica delle query e, se non si stanno usando istruzioni preparate o PL / SQL, allora richiederebbero alcune modifiche pessime.

Direi di apportare le modifiche. Ti farà risparmiare tempo più tardi, quando un altro cliente ha lo stesso problema. Condivido anche un telefono, btw - sembra uno scenario comune. Se hai una buona suite di test automatici, dovrebbe essere facile trovare i problemi associati alla modifica.

    
risposta data 20.12.2010 - 15:32
fonte
0

Vorrei aggiungere il Client ID nella tabella Extensions e creare un indice univoco per (Extension number, Client ID ; questo dovrebbe evitare tutti i problemi relativi alla caduta completa del vincolo univoco e al tempo stesso rendere possibile la condivisione del numero di interno tra i client.

C'è un po 'di ridondanza perché la Client potrebbe essere trovata anche attraverso User ; ma penso che questo non sia un gran problema e ti permette di es. per rimuovere la connessione a User (vale a dire che l'utente è stato licenziato, l'estensione non è attualmente utilizzata) senza incorrere in nuovi problemi.

    
risposta data 20.12.2010 - 15:32
fonte
0

Dal punto di vista del database, direi che è corretto. È meglio non duplicare i dati e le regole aziendali (ad esempio: "Gli utenti che appartengono allo stesso client non possono avere la stessa estensione") dovrebbero essere applicate sul back-end.

Lasciare cadere l'unicità potrebbe essere la soluzione rapida e sporca, ma nel lungo periodo ha la possibilità (comunque improbabile) di causare problemi.

    
risposta data 20.12.2010 - 15:42
fonte

Leggi altre domande sui tag