Guide du débutant sur la conception de bases de données SQL [fermé]

127

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 créer et comment les lier
  2. Comment concevoir pour différentes échelles (petite application client vers un énorme site Web distribué)
  3. Comment écrire des requêtes SQL efficaces / efficientes / élégantes
ripper234
la source

Réponses:

60

J'ai commencé avec ce livre: Relational Database Design Clearly Explained (The Morgan Kaufmann Series in Data Management Systems) (Broché) par Jan L. Harrington et je l'ai trouvé très clair et utile

et au fur et à mesure que vous vous mettiez à niveau, celui-ci était également bon Systèmes de base de données: une approche pratique de la conception, de la mise en œuvre et de la gestion (International Computer Science Series )

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

DD59
la source
1
Début de la conception de la base de données: du novice au professionnel - Clare Churcher?
enthusiasticgeek
40

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).

Julius
la source
J'adore ce guide, merci.
MsO
Le lien dans cette réponse ne fonctionne plus.
Logiciel Grizzly Peak
1
Il semble que le lien fonctionne à nouveau.
user8576017
1
Le lien ne fonctionne plus
jat255
28

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

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

  2. Personnellement, j'aime avoir un entier ou une clé de substitution longue sur chaque table (qui contient des données, pas celles qui relient différentes tables, par exemple, des relations m: n) qui est la clé primaire.

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

  4. Assurez-vous que chaque colonne que vous faites "where column = val" dans n'importe quelle 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, soit en cascade, soit à null, en fonction de la structure de votre objet (vous n'avez donc besoin de supprimer qu'une seule fois à la `` tête '' de votre arborescence d'objets, et tous les sous-objets de cet objet obtiennent supprimé automatiquement).

  6. Si vous souhaitez modulariser votre code, vous voudrez peut-être modulariser votre schéma de base de données - par exemple, c'est la zone "clients", c'est la zone "commandes", et c'est la zone "produits", et utiliser des tables de jointure / liaison entre eux, même s'il s'agit de relations 1: n, et peut-être dupliquer les informations importantes (c'est-à-dire dupliquer le nom du produit, le code, le prix dans votre table order_details). Renseignez-vous 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 vraie façon de faire certaines choses hein!

JeeBee
la source
1
ORM, tous vos points sont anti-base de données .
PerformanceDBA
1
L'ajout d'index ne signifie pas toujours plus de vitesse. Parfois, ils ralentissent les requêtes. Cela dépend vraiment de la requête et vous devriez les tester avec explain analyzesi un index est un avantage.
ArashM
2

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

  1. Vous ne pouvez pas savoir à l'avance «quelles» tables créer, vous devez connaître le problème à 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 capacités personnalisées de votre fournisseur de base de données (c'est-à-dire que vous devriez vérifier la documentation de vos (r) dbms et éventuellement apprendre quelques «trucs et astuces» pour la mise à l'échelle), la configuration de vos dbms est également cruciale pour 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 des requêtes élégantes qui sont également efficaces est un gros problème: l'élégance et l'efficacité sont souvent des objectifs contradictoires -

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

cheng81
la source
2

Cela fait un moment que je ne l'ai pas lu (donc, je ne sais pas dans quelle mesure il est encore pertinent), mais je me souviens que le livre SQL pour Smarties de Joe Celko fournit beaucoup d'informations sur l'écriture de requêtes élégantes, efficaces et efficientes. .

user29208
la source
la quatrième édition 2010 pourrait être à jour
rleir
1
Le livre Celko est une étude des erreurs, et approfondit la notion d'implémentation en code, de ce qui doit être implémenté dans la base de données.
PerformanceDBA