Quale elenco di funzioni / elementi del database sono necessari per la comprensione di un programmatore?

4

Quali caratteristiche / elementi del database sono necessari per la comprensione di un programmatore al fine di creare applicazioni non banali?

Una volta mi è stato chiesto in un colloquio di lavoro (da un DBA) di valutare la mia comprensione dei concetti di database - ho pensato che sarebbe stato interessante ottenere opinioni.

Sto cercando le competenze di base e avanzate, anche le opinioni su dove gli sviluppatori sono in genere i più deboli (quale mancanza di competenze o conoscenze crea il maggior numero di problemi). Inoltre, è meglio che gli sviluppatori abbiano bisogno di sapere e passare un lavoro più avanzato su un DBA? Dove esiste questa "linea nella sabbia"?

    
posta Watson 12.12.2010 - 20:25
fonte

6 risposte

4

Normalizzazione - e tutti gli altri dettagli su come strutturare correttamente un database, un paio di esempi casuali:

  • Che quasi sempre vuoi usare una chiave sintetica (nel mio caso molto spesso un int incrementale automatico chiamato ID)
  • Che vuoi memorizzare date, orari e simili come tipi nativi (o il più vicino possibile)
risposta data 12.12.2010 - 23:52
fonte
2

Per DBA: -
1) Modifica della configurazione / aggiornamento alla nuova versione
2) Backup e ripristino

Per il designer: -
1) Normalizzazione
2) indicizzazione, chiavi, vincoli, trigger, viste ecc 3) Ottimizzazione delle prestazioni, memoria rispetto alla velocità

Per lo sviluppatore: -
1) SQL di base 2) Connettività di basso livello (OCI, ODBC, JDBC, Hibenrate ecc. A seconda del loro campo)
3) comportamento di connessioni multiple

    
risposta data 13.12.2010 - 06:19
fonte
1

Lo sviluppatore dovrebbe sapere:

  • SQL
  • Ottimizzazione delle prestazioni
  • Keying e Partizionamento (per quanto riguarda ciò che puoi controllare)
  • Implementazione dell'applicazione

Per quanto riguarda ciò che resta all'amministratore:

  • Installazione; creare il database
  • Backup / Ripristino

Potrebbe essere necessario comprendere componenti specifici per il proprio ambiente, come ORM e LINQ.

    
risposta data 12.12.2010 - 20:40
fonte
1

Gli sviluppatori non SQL dovrebbero conoscere il concetto o RDBMS, PK / FK / CK, normalizzazione, indicizzazione, transazioni, progettazione di tabelle, ecc. Dovrebbero avere un'idea di come i dati sono archiviati su disco e trasferiti in memoria. Direi l'SQL di base e intermedio insieme alla comprensione dei piani di query, anche i join sono un must.
Gli sviluppatori SQL specializzati dovrebbero conoscere l'intera gamma di argomenti del database, ottimizzazione e query avanzate con una conoscenza approfondita di particolari prodotti RDBMS come Oracle ecc. In cui sono specializzati.

    
risposta data 13.12.2010 - 00:16
fonte
1

What database features/elements are necessary for a programmer to understand in order to create non-trivial applications?

Più esperienza con la progettazione e la normalizzazione del database, meglio è. Troppo poco (ad esempio, le tabelle non possono essere 1NF) può essere altrettanto grave (EVA).

SQL di base può risolvere la maggior parte dei problemi che possono essere superati facendo domande su SO.

Gli sviluppatori dovrebbero anche sapere cosa significa ACID , con un'idea di cosa significa.

L'altra cosa che gli sviluppatori dovrebbero sapere è che a volte accadono cose brutte alle transazioni e la tua applicazione dovrebbe aspettarsi che ogni transazione funzioni sempre. Ecco una citazione da un articolo di Rico Mariani

One Last Warning

If you consider what I said, about the natural occurrence of failures in a database, then you’ll soon realize that it is normal, using Linq parlance, for db.SubmitChanges() to throw an exception from time to time. If you are trying to write a robust application with high reliability you need to think about that.

In addition to obvious things like, “the network went down”, “the database went down”, there are less obvious things like, “there was a deadlock”, “there was an optimistic lock conflict” that can and do happen. Those latter two things should be appropriately retried because nothing bad has happened. The strategy you choose, especially for cases where the optimistic lock failed, can have a profound impact on your performance and certainly you can’t just let those exceptions flow to the user. I think I can safely say that my mom doesn’t want to hear about how table X on connection A deadlocked with table Y on connection B.

If you’ve been reading carefully then you’ll see that it’s also “normal” for a foreach operation over a Linq query to fail from time to time – you need a retry strategy for those too to be fully robust.

Don’t get down on Linq though, those problems exist with all data solutions, the productivity benefits you get from Linq will go a long way to helping you to add the robustness you need in the areas you need it.

Don’t read “too much” at once. Don’t write “too much” at once. Handle deadlocks, they’re normal. Handle optimistic lock failures, they’re also normal. You should land in the Pit of Success.

Per quanto riguarda quella linea nella sabbia? Direi che gli sviluppatori non hanno bisogno di sapere nulla sull'operazione fisica, dimensionamento, partizionamento, monitoraggio, (backup / ripristino), sicurezza, alta disponibilità, ripristino di emergenza, configurazione iniziale, ecc.

    
risposta data 13.12.2010 - 04:29
fonte
1
explain plan;

Devi essere in grado di eseguire il debug del tuo SQL. Ciò significa che devi capire che cosa sceglie il database e sapere come cambiarlo.

    
risposta data 13.12.2010 - 07:17
fonte

Leggi altre domande sui tag