Quindi ho lavorato a questo progetto al lavoro, dove sto codificando un sito Web php che interagisce con un database su cui non ho alcun controllo. Il database è stato "progettato" da un collega che è stato con la compagnia molti più anni che ho; quindi alla fine le decisioni sono lasciate a loro decidere.Come convincere qualcuno a normalizzare un database?
Quando sono stato estratto a bordo di questo progetto sono andato a un collega e ho spiegato che lo schema del database sembrava imperfetto. Ho spiegato l'importanza di normalizzare il database per assicurare problemi di integrità dei dati, risparmi di spazio su disco e rendere più facile il lavoro del programmatore. Ho anche fornito esempi di come l'inserimento, la cancellazione e l'aggiornamento delle anomalie potrebbero verificarsi nel progetto corrente. Tuttavia il collaboratore mi ha spiegato che non volevano complicare eccessivamente il database del progetto e che non avrebbe cambiato il periodo.
Così ora sono un paio di mesi nel progetto e mi sto tirando i capelli ogni volta che devo unirmi a due tabelle per inserire un valore in un attributo che ha una relazione uno a uno con l'altro. (Quindi l'attributo dovrebbe essere stato appena un attributo della relazione principale.) Il database sembra orribile, e temo che anni in fondo questo mi ritorni da quando ho programmato il front-end che utilizza il database.
Qualcuno ha qualche suggerimento su come parlare di un collaboratore "superiore" nella progettazione corretta di un database? O qualche suggerimento su come evitare di frequentare anni frequentati per un progetto di cui non avevo nessuna parte? Dovrei semplicemente rifiutarmi di lavorare su progetti come questo in futuro? Lascia un commento nel mio codice dicendo che il database non stava facendo il mio?
Grazie.
Edit: Ulteriori informazioni in risposta ai commenti ...
so che la de-normalizzazione di un database può essere utile ai fini di velocità, quindi non mi si affaccia questo. Per coloro che leggono che non hanno sentito parlare di questa tattica illustrerò un esempio. Spesso i progettisti di database hanno una relazione di indirizzo che elenca la via, la città, lo stato e il codice postale dell'utente. Mentre tutti sanno che un codice postale determina la città e lo stato, costituendo quindi una tabella indicizzazione di codici postali per città e stati. Spesso i progettisti di database combinano le due tabelle, de-normalizzandole con lungimiranza che ogni query per l'indirizzo di un utente richiederebbe un join dalla tabella degli indirizzi allo zip table. Questo alla fine accelera il processo di interrogazione ed è un valido ragionamento per la de-normalizzazione di parti di un progetto di database.
Per inserire alcuni dettagli qui il database è progettato per un sistema Tour Request, quindi i dati all'interno sono correlati alle informazioni sui visitatori, alle date, ecc. Lo schema utilizzato dal database corrente è imprevedibile dall'inizio alla fine. Dalle incoerenze più semplici nei modelli di denominazione delle variabili (ad esempio num_of_visitors, arrivalMethod, ecc.) Per definire relazioni separate per un attributo one-to-one a stato singolo. Esempio: statusID rappresenta lo stato della richiesta di tour, può sempre avere uno solo stato valido selezionato da un gruppo di stati possibili (Approvato, negato, in sospeso, annullato). Per qualche motivo il database ha una tabella di stato contenente: tour_id (Primary chiave della relazione tour), statusID. Ciò consente di definire più stati per ogni richiesta di tour. Che, in base alla progettazione, una richiesta di tour dovrebbe essere in uno stato solo in un dato momento. Quindi è un difetto nel design, non una mia supervisione.
Nessun suggerimento, poiché si tratta di un problema di gestione. Tuttavia, hai la mia comprensione. –
Pensi che la gestione sosterrebbe il tuo collaboratore indipendentemente da quanto siano coerenti e logici i tuoi argomenti? – gbn
se si trova in una posizione superiore, le cose potrebbero essere difficili per te. Se fossi in me inizierei a inviare alcuni curriculum! –