Eine relationale Datenbank organisiert Daten in einem tabellarischen Format (Zeilen und Spalten) und erleichtert die Verknüpfung zwischen verschiedenen Tabellen. Eine Datenbank „Kundendienst“ verwendet beispielsweise verschiedene Tabellen für Kundeninformationen, Käufe, Produktcodes und Kontakte. Durch Schlüssel wie eine eindeutige Kunden-Nr. sind die Datensätze miteinander verknüpft.
Mit SQL können Benutzer Abfragen (und Unterabfragen) schreiben, um diese Daten zu bearbeiten. Diese Befehle durchlaufen während des SQL-Prozesses mehrere Softwarekomponenten:
Ein Parser verifiziert die Korrektheit von SQL-Anweisungen und wandelt sie in ein Format um, das die Datenbank verstehen kann, beispielsweise in tokenisierte Symbole. Dieser Schritt umfasst die Syntaxanalyse und die semantische Überprüfung. Der Parser stellt außerdem sicher, dass der Benutzer zur Ausführung des Vorgangs berechtigt ist.
Anschließend plant eine relationale Engine – auch als Abfrageoptimierer bezeichnet – die effizientesten Strategien für den Abruf, die Änderung oder das Hinzufügen von Daten. Dazu werden verschiedene Abfrageausführungspläne bewertet. Der Plan wird in Bytecode geschrieben, einer Sprache für virtuelle Maschinen. Dieser Schritt ist entscheidend, um Leistung und Ressourcennutzung der Datenbank zu optimieren.
Schließlich verarbeitet eine Speicher-Engine den Bytecode, führt die SQL-Anweisung aus und verwaltet den physischen Datenspeicher. Es ist für die physische Darstellung von Daten zuständig, einschließlich Dateiformaten und Datenpufferung. Außerdem wird das Ergebnis an den Benutzer oder die Anwendung zurückgegeben. Dieser Schritt trägt dazu bei, einen effizienten Datenzugriff und Aktualisierungen auf dem Datenträger sicherzustellen. Diese Verknüpfung kann eine 1:n- oder n:n-Beziehung sein, die mithilfe von Primär- und Fremdschlüsseln Datenintegrität gewährleistet.