Buone pratiche di progettazione di database [chiusa]

1

Recentemente ho assunto una nuova posizione come sviluppatore SW e durante il processo di intervista tutti hanno sottolineato l'importanza e l'orgoglio degli standard di qualità dell'azienda in ogni processo che hanno. (Questo era uno degli aspetti che mi ha fatto decidere di accettare l'offerta)

Quando ho iniziato a ispezionare il database mi sono reso conto che era ben lungi dall'essere perfetto, lungi dall'essere buono e ben lungi dall'essere cattivo. Inoltre ho capito che tutti i miei compagni di squadra pensano che il database sia complesso perché il business è complesso.

Cosa c'è di sbagliato in questo database, allora?

  • denominazione incoerente
  • de tabella normalizzata (con dati in conflitto)
  • un sacco di stored procedure e tvf con if / switch / case in base ai valori nelle tabelle stesse
  • tvf che dipendono da tvf che dipendono da tvf rendendo il codice illeggibile e non modificabile
  • nessun vincolo FK e in alcuni casi PK
  • nessuna distinzione tra astrazione dati e logica aziendale (troppi TVF incapsulati)

Ho deciso di portare la questione durante la mia prossima recensione perché credo che il mio manager (non tecnico) non abbia la minima idea di cosa sta succedendo.

Ho bisogno di aiuto per venire con un elenco di aspetti da considerare per valutare la qualità di una progettazione di database e quindi valutare il punteggio del nostro database rispetto a questo elenco. Questo aiuterà almeno il mio manager a fare dei passi nella giusta direzione (spero).

Quali punti dovrei considerare per valutare se un database è ben progettato?

Ben progettato significa:

  • funziona
  • non si spezza (o lo fa in modo ragionevole)
  • segue una struttura che facilita la manutenzione e l'espansione
posta mhttk 06.12.2011 - 18:44
fonte

5 risposte

4

Iniziamo con la mancanza di FK / PK. Esegui alcune ricerche per vedere se riesci a trovare dati orfani o dati duplicati. Una volta che puoi mostrare quanto sia pessima l'integrità dei dati, sei in una posizione migliore per proporre un piano di pulizia e l'istituzione di FKS. Se non riesci a trovare alcun record orpahned (dato quello che hai detto, lo troverei altamente improbabile), questo potrebbe non essere il miglior punto di partenza.

Successivamente, inizia con le query con il rendimento peggiore che sarei sorpreso di trovare sono basate su cose come il TVF che chiama altri TVF o viste che chiamano altre visualizzazioni.

Ora prendine una e progetta i dati nel modo in cui vorresti vederli memorizzati e mostra quanto è più facile interrogare e quanto più veloce è la query. Una volta che hai un track record per miglioramenti che funzionano, le persone saranno più propense ad ascoltarti.

Inizia con le cose peggiori da un punto di vista di prestazioni, sicurezza e integrità dei dati.

Un buon libro da leggere è: link

Ti aiuterà a progettare un sistema per migliorare il pasticcio un po 'alla volta.

    
risposta data 06.12.2011 - 19:34
fonte
3

Esistono validi motivi per inserire la business logic in un database, quindi è meglio aspettare di avere più informazioni. È possibile che vengano utilizzati alcuni strumenti di reporting che non possono utilizzare una logica complessa o che devono essere condivisi da app al di fuori del loro controllo.

Quali problemi sono causati dalla mancanza di normalizzazione e dall'uso di chiavi esterne?

Tutto questo alla fine viene soppesato dal dover refactoring questo database. Hai mai dovuto refactoring un database grande e complesso? Forse quei nomi non sono così male dopotutto.

    
risposta data 06.12.2011 - 19:36
fonte
3

C'è qualche miglioramento che potresti implementare (e testare a fondo) che mostrerebbe un valore immediato per l'azienda o il cliente, correggendo anche almeno uno dei problemi di qualità che stai vedendo? Se è così, proponi quel cambiamento - o, meglio ancora, volontario per dimostrare l'efficacia del cambiamento in un ambiente di test.

Inoltre, se hai le conoscenze e le competenze per essere un modellatore di dati o un DBA e hai interessi in questo senso, puoi parlare con il tuo manager della necessità del ruolo e del tuo interesse nel realizzarlo .

    
risposta data 06.12.2011 - 20:09
fonte
2

se il database soddisfa le loro esigenze di business e hai sviluppatori che possono modificarlo secondo necessità per soddisfare le mutevoli esigenze, è già buono come vorrei spingere per il nuovo ragazzo. Se è possibile identificare alcune aree che potrebbero utilizzare miglioramenti (non una lista esaustiva) e condividerle con i colleghi e cercare di convincerli a parlare con i manager, o almeno far loro sapere che intendete menzionare queste cose.

le modifiche al database sono enormi e probabilmente il posto migliore per avere una mentalità "se non è stato rotto non aggiustarlo"

    
risposta data 06.12.2011 - 19:02
fonte
2

Penso che dipenda da cosa intendi quando dici qualità. Ad esempio, quando un ingegnere dice Qualità, significa "fa ciò che deve fare, dura a lungo e fallisce in modo responsabile".

Gli sviluppatori di software sembrano pensare più alla falsariga di "è facile da capire e cambiare". Gli ingegneri tendono verso il "grande design in avanti" e non hanno la mentalità di rendere più semplice il cambio in seguito.

I tuoi colleghi parlano di qualità agli occhi dell'utente finale. Sono orgogliosi del fatto che gli utenti ritengano che il sistema sia solido, ben supportato, facile da usare, ecc. Se l'utente non guarda mai le tabelle del database, la denominazione delle tabelle in realtà non influisce sulla misura della qualità.

    
risposta data 06.12.2011 - 19:18
fonte

Leggi altre domande sui tag