<sub class="descriptionSection">08-11-2024 01:32:pm // #EntityRelationships // [[Entities in Relationalen DBS]]</sub> ____ Um in einer Tabelle effizient nach Tupeln suchen zu können, muss es pro Tabelle einen Primary Key geben. In einer anderen Tabelle kann dieser dann als "Foreign-Key" referenziert werden. ## Primary Key (Primärschlüssel) Ein Primary Key ist ein Wert eines [[DBMS Begriffe#Datensatz / Tupel|Tupel]]s der diesen eindeutig identifiziert. Je nachdem welchen ansatz man nimmt kann man verschiedene Schlüssel nutzen. Auch kombinationen aus Spalten sind möglich. ![[Pasted image 20241110130146.png]] > [!abstract] Ziel bei der Auswahl eines Schlüssels > Das wichtigste Ziel sollte sein das dieser so klein wie möglich gehalten wird. Meist wird das durch sog. "Künstliche Schlüssel" erreicht, also Schlüssel die vom Programmierer selbst festgelegt werden (z.B eine Tabellenspalte die immer um eins hochzählt pro Datensatz) ### Superschlüssel Der Superschlüssel ist die Menge an Attributen in einer Tabelle (also ein kompletter Datensatz). Dieser Datensatz ist **immer** Eindeutig in einer Tabelle und kann kombiniert als Primärschlüssel verwendet werden ### Schlüsselkandidat Ein Schlüsselkandidat ist eine Minimale Teilmenge von Attributen des Superschlüssels. Diese Menge muss es immernoch ermöglichen das Datensätze eindeutig Identifiziert werden. Es kann mehrere Schlüsselkandidaten geben, aber nur ein Primary Key kann gewählt werden. ### Schwache und starke attribute Man bewertet Attribute nach ihren Eigenschaften und ihrer Eignung als Primary Key. Ein starkes Attribut kann als Primary Key verwendet werden, es ist quasi Unique. Ein schwaches Attribut kann alleine nicht als Primary Key verwendet werden, da nicht unique. Allerdings können schwache Attribute zu einem Primärschlüssel verbunden werden. Wenn es in einer Tabelle keine Starken Attribute gibt, dann setzen sich alle Schwachen Attribute zum [[#Superschlüssel]] zusammen. ## Foreign Keys (Fremdschlüssel) Ein Foreign Key ist eine spalte in einer Tabelle die einen anderen Primary Key referenziert. Dies ermöglicht beziehungen zwischen Tabellen. Meistens werden Foreign keys in einem DB Entwurf genauso geschrieben wie in der original tabelle um zu verdeutlichen das es sich um einen Foreign Key handelt. Beispiel: ```text KUNDE:{[k_nr: integer, vorname: string, nachname: string]} AUFTRAG:{[a_nr: integer, k_nr]} ``` k_nr ist im beispiel ein Primärschlüssel und ein Fremdschlüssel in der Tabelle "AUFTRAG"