Ein Leitfaden für Anfänger zum Entwurf von SQL-Datenbanken [geschlossen]

127

Kennen Sie eine gute Quelle, um zu lernen, wie man SQL-Lösungen entwirft?

Über die grundlegende Sprachsyntax hinaus suche ich nach etwas, das mir hilft, Folgendes zu verstehen:

  1. Welche Tabellen zu erstellen und wie sie zu verknüpfen sind
  2. Wie man für verschiedene Maßstäbe entwirft (kleine Client-App für eine große verteilte Website)
  3. So schreiben Sie effektive / effiziente / elegante SQL-Abfragen
Ripper234
quelle

Antworten:

60

Ich begann mit diesem Buch: Relationales Datenbankdesign klar erklärt (Die Morgan Kaufmann-Reihe in Datenmanagementsystemen) (Taschenbuch) von Jan L. Harrington und fand es sehr klar und hilfreich

und als Sie auf dem Laufenden waren, war dieses auch gut. Datenbanksysteme: Ein praktischer Ansatz für Design, Implementierung und Management (International Computer Science Series) (Taschenbuch)

Ich denke, SQL und Datenbankdesign sind unterschiedliche (aber komplementäre) Fähigkeiten.

DD59
quelle
1
Beginn des Datenbankdesigns: Vom Anfänger zum Profi - Clare Churcher?
Enthusiastgeek
40

Ich habe mit diesem Artikel angefangen

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

Es ist ziemlich prägnant im Vergleich zum Lesen eines ganzen Buches und erklärt die Grundlagen des Datenbankdesigns (Normalisierung, Arten von Beziehungen) sehr gut.

Julius
quelle
Ich liebe diesen Leitfaden, danke.
MsO
Der Link in dieser Antwort funktioniert nicht mehr.
Grizzly Peak Software
1
Es scheint, dass der Link wieder funktioniert.
user8576017
1
Link funktioniert nicht mehr
jat255
28

Erfahrung zählt viel, aber in Bezug auf das Tischdesign können Sie viel daraus lernen, wie ORMs wie Hibernate und Grails funktionieren, um zu sehen, warum sie Dinge tun. Zusätzlich:

  1. Halten Sie verschiedene Datentypen getrennt - speichern Sie keine Adressen in Ihrer Auftragstabelle, sondern verknüpfen Sie sie beispielsweise mit einer Adresse in einer separaten Adresstabelle.

  2. Ich persönlich mag es, eine Ganzzahl oder einen langen Ersatzschlüssel für jede Tabelle zu haben (die Daten enthält, nicht diejenigen, die verschiedene Tabellen miteinander verbinden, z. B. m: n-Beziehungen), der der Primärschlüssel ist.

  3. Ich mag es auch, eine Zeitstempelspalte zu erstellen und zu ändern.

  4. Stellen Sie sicher, dass jede Spalte, in der Sie in einer Abfrage "where column = val" ausführen, einen Index hat. Vielleicht nicht der perfekteste Index der Welt für den Datentyp, aber zumindest ein Index.

  5. Richten Sie Ihre Fremdschlüssel ein. Richten Sie bei Bedarf auch die Regeln ON DELETE und ON MODIFY ein, um sie je nach Objektstruktur entweder zu kaskadieren oder auf Null zu setzen (Sie müssen sie also nur einmal am Kopf Ihres Objektbaums löschen, und alle Unterobjekte dieses Objekts werden abgerufen automatisch entfernt).

  6. Wenn Sie Ihren Code modularisieren möchten, möchten Sie möglicherweise Ihr DB-Schema modularisieren. Dies ist beispielsweise der Bereich "Kunden", der Bereich "Bestellungen" und der Bereich "Produkte". Verwenden Sie Join / Link-Tabellen zwischen ihnen, auch wenn es sich um 1: n-Beziehungen handelt, und duplizieren Sie möglicherweise die wichtigen Informationen (dh duplizieren Sie den Produktnamen, den Code und den Preis in Ihre Tabelle order_details). Informieren Sie sich über die Normalisierung.

  7. Jemand anderes wird für einige oder alle der oben genannten Punkte genau das Gegenteil empfehlen: p - niemals eine echte Möglichkeit, einige Dinge zu tun, wie!

JeeBee
quelle
1
ORM, alle Ihre Punkte sind Anti-Datenbank .
PerformanceDBA
1
Das Hinzufügen von Indizes bedeutet nicht immer mehr Geschwindigkeit. Manchmal verlangsamen sie tatsächlich Abfragen. Es hängt wirklich von der Abfrage ab und Sie sollten sie testen, explain analyzeob ein Index von Vorteil ist.
ArashM
2

Dies sind Fragen, die meiner Meinung nach unterschiedliche Kenntnisse aus verschiedenen Bereichen erfordern.

  1. Sie können einfach nicht im Voraus wissen, "welche" Tabellen erstellt werden sollen. Sie müssen das Problem kennen, das Sie lösen müssen, und das Schema entsprechend entwerfen.
  2. Dies ist eine Mischung aus der Entscheidung zum Datenbankdesign und den benutzerdefinierten Funktionen Ihres Datenbankanbieters (dh Sie sollten die Dokumentation Ihrer (r) DBMS überprüfen und schließlich einige "Tipps und Tricks" für die Skalierung lernen). Auch die Konfiguration Ihrer DBMS ist entscheidend für Skalierung (Replikation, Datenpartitionierung usw.);
  3. Auch hier enthält fast jede rdbms einen bestimmten "Dialekt" der SQL-Sprache. Wenn Sie also effiziente Abfragen wünschen, müssen Sie diesen bestimmten Dialekt lernen --btw. Sehr wahrscheinlich ist es eine große Sache, elegante Abfragen zu schreiben, die auch effizient sind: Eleganz und Effizienz sind häufig widersprüchliche Ziele.

Das heißt, vielleicht möchten Sie einige Bücher lesen, persönlich habe ich dieses Buch in meinem Datenbank-Universitätskurs verwendet (und ein anständiges gefunden, aber ich habe keine anderen Bücher in diesem Bereich gelesen, daher ist mein Rat, nachzuschauen einige gute Bücher im Datenbankdesign).

cheng81
quelle
2

Es ist schon eine Weile her, seit ich es gelesen habe (daher bin ich mir nicht sicher, wie viel davon noch relevant ist), aber ich erinnere mich, dass Joe Celkos SQL for Smarties-Buch viele Informationen zum Schreiben eleganter, effektiver und effizienter Abfragen enthält .

user29208
quelle
Die vierte Ausgabe 2010 könnte auf dem neuesten Stand sein
Uhr
1
Das Celko-Buch ist eine Studie zu Fehlern und fördert den Gedanken der Implementierung in Code, was in der Datenbank implementiert werden sollte.
PerformanceDBA