Una guida per principianti alla progettazione di database SQL [chiuso]


127

Conosci una buona fonte per imparare a progettare soluzioni SQL?

Oltre alla sintassi del linguaggio di base, sto cercando qualcosa che mi aiuti a capire:

  1. Quali tabelle creare e come collegarle
  2. Come progettare per scale diverse (APP per piccoli client su un enorme sito Web distribuito)
  3. Come scrivere query SQL efficaci / efficienti / eleganti

Risposte:


60

Ho iniziato con questo libro: Il design relazionale del database ha spiegato chiaramente (la serie Morgan Kaufmann in Data Management Systems) (libro in brossura) di Jan L. Harrington e l'ho trovato molto chiaro e utile

e mentre ti alzi per accelerare anche questo andava bene Database Systems: A Practical Approach to Design, Implementation and Management (International Computer Science Series) (Libro in brossura)

Penso che SQL e la progettazione di database siano abilità diverse (ma complementari).


1
Inizio progettazione database: da principiante a professionista - Clare Churcher?
enthusiasticgeek il

40

Ho iniziato con questo articolo

http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html

È piuttosto conciso rispetto alla lettura di un intero libro e spiega molto bene le basi della progettazione del database (normalizzazione, tipi di relazioni).


Adoro questa guida, grazie.
MsO

Il link in questa risposta non funziona più.
Grizzly Peak Software

1
Sembra che il collegamento funzioni di nuovo.
user8576017

1
Link non funziona più
jat255,


28

L'esperienza conta molto, ma in termini di design dei tavoli puoi imparare molto da come operano gli ORM come Hibernate e Grails per capire perché fanno le cose. Inoltre:

  1. Mantieni diversi tipi di dati separati: non archiviare gli indirizzi nella tabella degli ordini, ad esempio il collegamento a un indirizzo in una tabella degli indirizzi separata.

  2. Personalmente mi piace avere una chiave intera o surrogata lunga su ogni tabella (che contiene dati, non quelli che collegano tabelle diverse tra loro, relazioni e, g., M: n) che è la chiave primaria.

  3. Mi piace anche avere una colonna timestamp creata e modificata.

  4. Assicurarsi che ogni colonna eseguita "in cui column = val" in qualsiasi query abbia un indice. Forse non è l'indice più perfetto al mondo per il tipo di dati, ma almeno un indice.

  5. Imposta le tue chiavi esterne. Impostare anche le regole ON DELETE e ON MODIFY, se pertinenti, su cascata o su null, a seconda della struttura dell'oggetto (quindi è necessario eliminare solo una volta in corrispondenza della 'testa' dell'albero degli oggetti e tutti gli oggetti secondari dell'oggetto ottengono rimosso automaticamente).

  6. Se vuoi modulare il tuo codice, potresti voler modulare il tuo schema DB - ad esempio, questa è l'area "clienti", questa è l'area "ordini", questa è l'area "prodotti" e usa le tabelle join / link tra loro, anche se sono relazioni 1: n, e forse duplicano le informazioni importanti (ovvero, duplicano il nome del prodotto, il codice, il prezzo nella tabella order_details). Leggi sulla normalizzazione.

  7. Qualcun altro raccomanderà esattamente il contrario per alcune o tutte le precedenti: p - mai un vero modo di fare alcune cose eh!


1
ORM, tutti i tuoi punti sono anti-database .
PerformanceDBA

1
L'aggiunta di indici non significa sempre maggiore velocità. A volte in realtà rendono le query più lente. Dipende molto dalla query e dovresti testarli explain analyzese un indice è un vantaggio.
ArashM,



2

Queste sono domande che, a mio parere, richiedono conoscenze diverse da domini diversi.

  1. Semplicemente non puoi sapere in anticipo quali "tabelle" costruire, devi conoscere il problema che devi risolvere e progettare lo schema di conseguenza;
  2. Questo è un mix di decisione di progettazione del database e capacità personalizzate del fornitore del database (ad es. Dovresti controllare la documentazione dei tuoi (r) dbms ed eventualmente imparare alcuni "trucchi e suggerimenti" per il ridimensionamento), anche la configurazione dei tuoi dbms è cruciale per ridimensionamento (replica, partizionamento dei dati e così via);
  3. ancora una volta, quasi ogni rdbms viene fornito con un particolare "dialetto" del linguaggio SQL, quindi se vuoi delle query efficienti devi imparare quel particolare dialetto --btw. molto probabilmente scrivere query eleganti che sono anche efficienti è un grosso problema: eleganza ed efficienza sono spesso obiettivi contrastanti -

Detto questo, forse vuoi leggere alcuni libri, personalmente ho usato questo libro nel mio corso universitario di base di dati (e ne ho trovato uno decente, ma non ho letto altri libri in questo campo, quindi il mio consiglio è di verificare alcuni buoni libri nella progettazione di database).


2

È passato un po 'di tempo da quando l'ho letto (quindi, non sono sicuro di quanto sia ancora rilevante), ma il mio ricordo è che il libro SQL for Smarties di Joe Celko fornisce molte informazioni sulla scrittura di query eleganti, efficaci ed efficienti .


la quarta edizione 2010 potrebbe essere aggiornata
circa

1
Il libro Celko è uno studio degli errori e promuove l'idea di implementare nel codice ciò che dovrebbe essere implementato nel database.
PerformanceDBA
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.