web-dev-qa-db-fra.com

Guide du débutant sur la conception d'une base de données SQL

Connaissez-vous une bonne source pour apprendre à concevoir des solutions SQL?

Au-delà de la syntaxe de base du langage, je cherche quelque chose pour m'aider à comprendre:

  1. Quelles tables construire et comment les relier
  2. Comment concevoir pour différentes échelles (petit client APP à un énorme site Web distribué)
  3. Comment écrire des requêtes SQL efficaces/efficaces/élégantes
124
ripper234

J'ai commencé avec ce livre: La conception de base de données relationnelle clairement expliquée (La série Morgan Kaufmann dans les systèmes de gestion de données) (Broché) de Jan L. Harrington et l'a trouvé très clair et utile

et au fur et à mesure que vous vous y mettiez, celui-ci était également bon Systèmes de base de données: une approche pratique de la conception, de la mise en oeuvre et de la gestion (Série internationale de la science informatique) (Paperback)

Je pense que SQL et la conception de la base de données sont des compétences différentes (mais complémentaires).

59
inspite

J'ai commencé avec cet article

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

C'est assez concis par rapport à la lecture d'un livre entier et cela explique très bien les bases de la conception de bases de données (normalisation, types de relations).

36
Julius

L'expérience compte pour beaucoup, mais en termes de conception de tables, vous pouvez apprendre beaucoup de choses sur la façon dont les ORM comme Hibernate et Grails fonctionnent pour comprendre pourquoi ils font les choses. En outre:

  1. Conservez les différents types de données séparément - ne stockez pas les adresses dans votre table de commandes, par exemple, créez un lien vers une adresse dans une table d'adresses distincte.

  2. Personnellement, j'aime bien avoir une clé de substitution entière ou longue sur chaque table (qui contient des données, pas celles qui lient différentes tables, par exemple, des relations m: n) qui constitue la clé primaire.

  3. J'aime aussi avoir une colonne timestamp créée et modifiée.

  4. Assurez-vous que chaque colonne que vous faites "où colonne = val" dans toute requête a un index. Peut-être pas l'index le plus parfait au monde pour le type de données, mais au moins un index.

  5. Configurez vos clés étrangères. Configurez également les règles ON DELETE et ON MODIFY, le cas échéant, en cascade ou en définissant la valeur null, en fonction de la structure de votre objet (vous n'avez donc besoin de supprimer qu'une seule fois en "tête" de votre arborescence, et tous supprimé automatiquement).

  6. Si vous souhaitez modulariser votre code, vous pouvez également modulariser votre schéma de base de données. Par exemple, il s’agit de la zone "clients", de la zone "commandes", de la zone "produits" et de l’utilisation des tables join/link. entre eux, même si ce sont des relations 1: n, et dupliquez peut-être les informations importantes (par exemple, dupliquez le nom du produit, le code, le prix dans votre table order_details). Lisez sur la normalisation.

  7. Quelqu'un d'autre recommandera exactement le contraire pour tout ou partie de ce qui précède: p - jamais une seule façon de faire certaines choses, hein!

28
JeeBee
14
user2287824

Head First SQL est une excellente introduction.

6
Dickon Reed

Cela fait longtemps que je ne l'ai pas lu (donc, je ne sais pas dans quelle mesure il est toujours d'actualité), mais je me souviens que le livre SQL for Smarties de Joe Celko fournit de nombreuses informations sur la rédaction de requêtes élégantes, efficaces et efficaces. .

2
user29208

Ce sont des questions qui, à mon avis, exigent des connaissances différentes dans différents domaines.

  1. Vous ne pouvez simplement pas savoir à l'avance "quelles" tables construire, vous devez connaître le problème que vous devez résoudre et concevoir le schéma en conséquence;
  2. C’est un mélange de décision de conception de base de données et de fonctionnalités personnalisées de votre fournisseur de base de données (vous devez par exemple consulter la documentation de votre (r) dbms et éventuellement apprendre quelques astuces pour la mise à l’échelle). La configuration de votre dbms est également cruciale. mise à l'échelle (réplication, partitionnement des données, etc.);
  3. encore une fois, presque tous les rdbms sont livrés avec un "dialecte" particulier du langage SQL, donc si vous voulez des requêtes efficaces, vous devez apprendre ce dialecte particulier --btw. beaucoup probablement écrire une requête élégante qui est aussi efficace est un gros problème: élégance et efficacité sont souvent des objectifs contradictoires--

Cela dit, vous voudrez peut-être lire quelques livres, que j’ai personnellement utilisés ce livre dans mon cours universitaire de base de données (et que j’en ai trouvé un bon, mais je n’ai pas lu d’autres livres dans ce domaine, donc mon conseil est de vérifier quelques bons livres dans la conception de base de données).

2
cheng81