Schlüssel: Unterschied zwischen den Versionen

 
Zeile 53: Zeile 53:


== Fremdschlüssel ==
== Fremdschlüssel ==
Ein '''Fremdschlüssel''' ist ein Attribut oder eine Attributkombination einer Relation, welches auf einen Primärschlüssel (bzw. Schlüsselkandidaten) einer anderen oder der gleichen Relation verweist. Er dient als Verweis zwischen zwei Relationen und zeigt an, welche Tupel der Relationen inhaltlich miteinander in Verbindung stehen.
Ein '''Fremdschlüssel''' (engl. ''Foreign Key'') ist ein Attribut oder eine Attributkombination einer Relation (Tabelle), welches auf einen [[Primärschlüssel]] (bzw. Schlüsselkandidaten) einer anderen oder der gleichen Relation verweist. Er dient als Verweis zwischen zwei Relationen und zeigt an, welche Tupel (Datensätze) inhaltlich miteinander in Verbindung stehen.
 
=== Zweck und Vorteile ===
Die Definition von Fremdschlüsseln ist essenziell für ein relationales Datenbankdesign. Sie ermöglicht es dem Datenbankmanagementsystem (DBMS):
* Eingegebene Daten automatisch zu überprüfen und fehlerhafte Zuweisungen (z. B. auf nicht existierende Datensätze) abzulehnen und zu verwerfen.
* Änderungen an verknüpften Tabellen durch kaskadierendes Löschen (''Cascaded Delete'') oder Aktualisieren (''Cascaded Update'') konsistent zu halten.
* Spezifische Integritätsbedingungen (Constraints) direkt im Schema zu definieren.
 
=== Referentielle Integrität ===
Die wichtigste Bedingung im Zusammenhang mit Fremdschlüsseln ist die '''referentielle Integrität''' (auch Beziehungsintegrität). Sie besagt, dass Attributwerte eines Fremdschlüssels zwingend auch als Attributwert des referenzierten Primärschlüssels vorhanden sein müssen.
 
Über die referentielle Integrität kontrolliert das DBMS die Beziehungen zwischen Datensätzen. Werden dem System diese Beziehungen in der Struktur bekannt gemacht, ist es in der Lage, sie zu überwachen und so die Datenintegrität (Entitätenintegrität) sicherzustellen.
 
'''Beispiel zur Überwachung:'''
In einer Friseursalon-Datenbank gibt es eine Tabelle `mitarbeiter`, die über den Fremdschlüssel `idsalon` auf den Primärschlüssel der Tabelle `salon` verweist.
* Ein neuer Mitarbeiter-Datensatz <code>{6, Müller, Klaus, 4}</code> würde die Integritätsbedingungen verletzen und vom DBMS '''zurückgewiesen''', wenn es gar keinen Salon mit der ID 4 gibt.
* Ein bestehender Salon-Datensatz <code>{3, Kaiserschnitt}</code> ist hingegen unproblematisch, auch wenn noch kein Mitarbeiter auf diesen verweist. Ein Primärschlüssel darf von einem Fremdschlüssel referenziert werden, er muss es aber nicht.
 
=== Umsetzung in DDL ===
Das Schema für Tabellen und ihre Beziehungen, einschließlich der Regeln zur referentiellen Integrität, wird in der [[Data Definition Language|DDL]] definiert. In SQL wird dies durch das Schlüsselwort <code>FOREIGN KEY</code> und <code>REFERENCES</code> umgesetzt.
 
'''Beispiel eines Schemas in SQL:'''
<syntaxhighlight lang="sql">
CREATE TABLE `salon` (
    `idsalon` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(45) NOT NULL,
    PRIMARY KEY (`idsalon`)
);
 
CREATE TABLE `mitarbeiter` (
    `idmitarbeiter` INT NOT NULL AUTO_INCREMENT,
    `nachname` VARCHAR(45) NOT NULL,
    `vorname` VARCHAR(45) NOT NULL,
    `idsalon` INT NOT NULL,
    PRIMARY KEY (`idmitarbeiter`),
    CONSTRAINT `fksalon` FOREIGN KEY (`idsalon`)
        REFERENCES `friseursalon`.`salon` (`idsalon`)
        ON DELETE NO ACTION ON UPDATE NO ACTION
);
</syntaxhighlight>


== Künstlicher Schlüssel ==
== Künstlicher Schlüssel ==