AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Definition "Schlüssel" in einer Datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

Definition "Schlüssel" in einer Datenbank

Ein Thema von faux · begonnen am 18. Dez 2006 · letzter Beitrag vom 3. Jan 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

Definition "Schlüssel" in einer Datenbank

  Alt 18. Dez 2006, 16:53
Datenbank: N/A • Zugriff über: N/A
Hallo!

Ich beschäftige mich gerade etwas genauer mit Datenbanksystemen. Im Prinzip weiß ich was genau ein Schlüssel ist, jedoch muss ich für ein Referat eine genaue Definition finden. Im Wikipedia steht unter Schlüssel (Datenbank) folgender Satz:
Zitat:
Ein Schlüssel dient in einer Relationalen Datenbank dazu, die Tupel einer Relation eindeutig zu identifizieren. Anschaulich kann man sich eine Relation als Tabelle vorstellen. Der Schlüssel einer solchen Tabelle ist dann eine Gruppe von Spalten, die so ausgewählt wird, dass jede Zeile in dieser Gruppe eine einmalige Wertekombination hat.
...
Fremdschlüssel: Ein Attribut einer Relation, welches auf einen Primärschlüssel einer anderen Relation verweist.
Jetzt stellt sich allerdings für mich die Frage, wie man eine 1:n (oder n:m) Beziehung darstellen kann, wenn laut dieser Definition jeder Wert nur einmal vorkommen darf?

Beispiel:
Code:
+--------------+
| Abteilungen |
+----+---------+
| ID | Name   |
+----+---------+
| 1  | EDV    |
| 2  | Telekom |
| 3  | Zubehör |
+----+---------+

+------------------+
| Mitarbeiter     |
+------+-----------+
| Name | Abteilung |
+------+-----------+
| Mayr | 2         |
| Böck | 3         |
| Faux | 2         |
+------+-----------+
Abteilung wäre laut der Definition ein Fremdschlüssel (auch ein Index, wodurch er laut Definition eines Indexes wieder zu einem Schlüssel werden muss). Hier muss ich aber 2 öfter als einmal vorkommen lassen, da ich sonst keine 1:n Beziehung erstellen kann, wodurch die Grunddefinition eines Schlüssels nicht mehr stimmt (...identifiziert eine Entität eindeutig...).
Habe ich da einen Denkfehler, oder ist die Definition wirklich nicht okay?

Grüße
Faux
Faux Manuel
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Definition "Schlüssel" in einer Datenbank

  Alt 18. Dez 2006, 17:00
Hallo,

letzendlich könnte die Tabelle Mitarbeiter wieder eigene Primärschlüssel haben...

Es ist zudem nicht ungültig, wenn die Fremdschlüssel in der Tabelle Mitarbeiter öfter vorkommen; weisen sie doch unmissverständlich auf den richtigen Eintrag der Tabelle Abteilungen

Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Definition "Schlüssel" in einer Datenbank

  Alt 18. Dez 2006, 17:21
Zitat von Pfoto:
letzendlich könnte die Tabelle Mitarbeiter wieder eigene Primärschlüssel haben...
Bei mir ist der Name der Primärschlüssel.
Es ist ja nur ein Beispiel...

Zitat von Pfoto:
Es ist zudem nicht ungültig, wenn die Fremdschlüssel in der Tabelle Mitarbeiter öfter vorkommen; weisen sie doch unmissverständlich auf den richtigen Eintrag der Tabelle Abteilungen
Achsoooo, das identisch bezieht sich deiner Meinung nach nicht auf den Frendschlüssel selbst, sondern sein "Ziel"?

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Definition "Schlüssel" in einer Datenbank

  Alt 18. Dez 2006, 17:30
Tja, so ist das mit den Definitionen. Aus der Wiki-Erklärung geht indirekt hervor, dass Schlüssel als Kurzform für Primärschlüssel (Primary Key) verstanden wird. Der Fremdschlüssel (Foreign Key) stellt eine Beziehung (Relation) dar, die auf den Primärschlüssel der anderen Tabelle verweist.

Bei Deinem Beispiel gilt:
Abteilungen hat einen Primärschlüssel, nämlich ID.
Mitarbeiter hat keinen Primärschlüssel, aber einen Fremdschlüssel, bei dem das Feld "Abteilung" auf den Primärschlüssel der anderen Tabelle verweist.

Jeder Schlüssel kann sich auf ein oder mehrere Felder beziehen. Aus Geschwindigkeitsgründen und wegen der besseren Wartungsmöglichkeit sind Schlüssel für ein Feld meistens besser. Tabellen ohne Primärschlüssel sind "quasi verboten" (nicht unbedingt was die Theorie betrifft, sondern von der Praxis).

Ich hoffe, ich konnte zur Klarheit beitragen. Jürgen

Nachtrag:
Zitat von Faux:
Achsoooo, das identisch bezieht sich deiner Meinung nach nicht auf den Frendschlüssel selbst, sondern sein "Ziel"?
So ist es.

Der Name ist als Primärschlüssel völlig ungeeignet, auch in der Kombination mit Vorname oder Geburtstag. Auch dafür ist eine ID das sinnvollste; das sollte man sich als Regel für (fast) jede Tabelle vornehmen. Ausnahmen wären allenfalls Tabellen, bei denen alle Felder gemeinsam als Primärschlüssel gelten würden und jedes Feld zu einem Fremdschlüssel gehört.
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Definition "Schlüssel" in einer Datenbank

  Alt 18. Dez 2006, 17:57
Danke sehr für die Erklärung.

Zitat von Jürgen Thomas:
Der Name ist als Primärschlüssel völlig ungeeignet, auch in der Kombination mit Vorname oder Geburtstag. Auch dafür ist eine ID das sinnvollste; das sollte man sich als Regel für (fast) jede Tabelle vornehmen. Ausnahmen wären allenfalls Tabellen, bei denen alle Felder gemeinsam als Primärschlüssel gelten würden und jedes Feld zu einem Fremdschlüssel gehört.
Das mit dem Namen-Primärschlüssel war auch nichts ernst gemeint.
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#6

Re: Definition "Schlüssel" in einer Datenbank

  Alt 18. Dez 2006, 18:08
Zitat von faux:
Hallo!

Ich beschäftige mich gerade etwas genauer mit Datenbanksystemen. Im Prinzip weiß ich was genau ein Schlüssel ist, jedoch muss ich für ein Referat eine genaue Definition finden. Im Wikipedia steht unter Schlüssel (Datenbank) folgender Satz:
Zitat:
Ein Schlüssel dient in einer Relationalen Datenbank dazu, die Tupel einer Relation eindeutig zu identifizieren. Anschaulich kann man sich eine Relation als Tabelle vorstellen. Der Schlüssel einer solchen Tabelle ist dann eine Gruppe von Spalten, die so ausgewählt wird, dass jede Zeile in dieser Gruppe eine einmalige Wertekombination hat.
...
Fremdschlüssel: Ein Attribut einer Relation, welches auf einen Primärschlüssel einer anderen Relation verweist.
Jetzt stellt sich allerdings für mich die Frage, wie man eine 1:n (oder n:m) Beziehung darstellen kann, wenn laut dieser Definition jeder Wert nur einmal vorkommen darf?
...
Grüße
Faux
Hallo,

wörtlich genommen ist die Wikipedia-Aussage falsch. Es gibt normalerweise einen Primärschlüssel, der eindeutig ist, und weitere Schlüssel, nach denen die Tabelle gezielt durchsucht werden kann, die aber eben nicht eindeutig sind, wichtigstes Beispiel ist der Name: schliesslich kann ich ja keinen Müller als Kunden ablehnen, weil schon einer in der Tabelle steht. In der nach Namen sortierten Anzeige kommen die Müllers eben nacheinander. In den meisten Datenbanken kann man wählen, ob ein bestimmter Schlüssel eindeutig sein muss oder nicht.

Eine Auftragsdatenbank hat z.B. einen eindeutigen Primärschlüssel, das ist die Auftragsnummer, und Sekundärschlüssel wie z. B. Kunde oder Lieferdatum, die nicht eindeutig sind - ein Kunde kann ja mehrere Aufträge erteilt haben.

Gruss Reinhard
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Definition "Schlüssel" in einer Datenbank

  Alt 18. Dez 2006, 19:05
Zitat von Reinhard Kern:
wörtlich genommen ist die Wikipedia-Aussage falsch. Es gibt normalerweise einen Primärschlüssel, der eindeutig ist, und weitere Schlüssel, nach denen die Tabelle gezielt durchsucht werden kann, die aber eben nicht eindeutig sind, wichtigstes Beispiel ist der Name: schliesslich kann ich ja keinen Müller als Kunden ablehnen, weil schon einer in der Tabelle steht. In der nach Namen sortierten Anzeige kommen die Müllers eben nacheinander. In den meisten Datenbanken kann man wählen, ob ein bestimmter Schlüssel eindeutig sein muss oder nicht.
Das klingt mir zusehr nach Paradox. Nach Deiner Definition wären somit alle Spalten einer Tabelle gleichzeitig 'Schlüssel'. Primärschlüssel identifizieren ein Objekt oder einen Datensatz eindeutig. Daneben gibt es dann eine Reihe weiterer (zusammengesetzter) Schlüssel, die aber eines gemeinsam haben: Sie sind eindeutig! Insofern ist die Wiki-Definition korrekt. Selbst ein scheinbar mehrdeutiger Schlüssel ist intern eindeutig, weil die Datensatz-ID (Record-ID) mit abgespeichert wird. Schliesslich muss die DB-Engine ja den zu dem Schlüssel gehörigen Datensätz finden können. Desweiteren bauen die verwendeten Datenstrukturen (B-Baum) auf einer totalen Ordnung auf. Und die bedingt nunmal Eindeutigkeit (und Ordnung).

Ich würde das so machen:
Tabelle "Abteilung" besteht aus
AbteilungID (PK) | Abteilung

Tabelle "Mitarbeiter" besteht aus
MitarbeiterID (PK)| Mitarbeiter

Tabelle "Abteilungsmitglieder" besteht aus
AbteilungID (FK) | MitarbeiterID (FK)

(PK)=Primary Key (FK)=Foreign Key.

Die Tabelle "AbteilungMitglieder" definiert die Relation (Mitarbeiter) "ist Mitglied von" (Abteilung). Damit hättest Du deine m:n Beziehung. Jeder Mitarbeiter kann in beliebig vielen Abteilungen sein und jede Abteilung kann beliebig viele Mitarbeiter beinhalten.

Die Tabelle "Abteilungsmitglieder" hat hier keinen PK. Könnte sie aber (sollte sie vielleicht auch, obwohl ich das nicht mache).

Durch die Bedingung, das die Kombination AbteilungID/MitarbeiterID eindeutig sein muss (ist also ein "Candidate Key", laut Wiki), ist die m:n Beziehung sauber definiert.

Eine 1:n Beziehung (Jeder Mitarbeiter ist in genau einer Abteilung) bekommst Du hin, indem Du in die Tabelle "Mitarbeiter" eine Spalte "AbteilungID" anfügst, und auf die Relation "ist Mitglied von" verzichtest.

Hoffe, mich nicht verhaspelt zu haben
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Definition "Schlüssel" in einer Datenbank

  Alt 18. Dez 2006, 19:18
Zitat von alzaimar:
...Hoffe, mich nicht verhaspelt zu haben
Ne, aber trotzdem fast. Es geht darum, die DB-Felder bzw. die Daten an sich unabhängig zu machen von dem ganzen Drumrum. Deshalb gibt es die IDs, die allerdings nur intern verwendet werden sollten. Wenn man im eigenen Programm den Müller in Mueller umbenennen will, dann bleibt die ID immer noch, wie sie ist. Der lässt sich also immer noch eindeutig identifizieren. Abhängige Daten beziehen sich also dann immer noch auf die ID. Dieses Prinzip sollte man wissen.
Gruß
Hansa
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Definition "Schlüssel" in einer Datenbank

  Alt 18. Dez 2006, 19:32
Hallo,

ein paar Anmerkungen:

Zitat:
Es gibt normalerweise einen Primärschlüssel, der eindeutig ist, und weitere Schlüssel, nach denen die Tabelle gezielt durchsucht werden kann, die aber eben nicht eindeutig sind
der Primärschlüssel ist ein Begriff aus dem Relational Model for Database Management, die "weiteren Schlüssel" von Reinhard sind eine begriffliche Ungenauigkeit aus einem anderen Themengebiet. Für Definitionen sollte man stets Primärliteratur zu Rate ziehen.

Zum Begriff Schlüssel findet man in Chris J. Date: An Intoduction to Database Systems Vol. I zu Beginn von Chapter 11 folgenden Absatz:

C.J. Date über Schlüssel (1986)

The term "key" is one of the most overworked in the entire database field. In the relational model alone we find primary, candidate, alternate, and foreign keys. In other areas of database technology we meet index keys, hash keys, search keys, secondary keys, ordering keys, parent keys, child keys, and many other kinds of key. It therefore seems advisable to avoid use of the unqualified term "key" and always to state explicitly in any discussion of the subject just what kind of key is meant. However, if any one of that multiplicity of keys does deserve to be called just the key, it is clearly the primary key. The primary key is easily the most important one of all.

Also beim Referat darauf achten: Definition und Abgrenzung - beides ist wichtig. Primäre Quelle für alle Begriffsdefinitionen im RDBMS-Bereich ist für mich Edgar F. Codd: The Relational Model for Database Management: Version 2.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: Definition "Schlüssel" in einer Datenbank

  Alt 18. Dez 2006, 19:47
Zitat von faux:
Jetzt stellt sich allerdings für mich die Frage, wie man eine 1:n (oder n:m) Beziehung darstellen kann, wenn laut dieser Definition jeder Wert nur einmal vorkommen darf?

Beispiel:
Code:
+--------------+
| Abteilungen |
+----+---------+
| ID | Name   |
+----+---------+
| 1  | EDV    |
| 2  | Telekom |
| 3  | Zubehör |
+----+---------+

+------------------+
| Mitarbeiter     |
+------+-----------+
| Name | Abteilung |
+------+-----------+
| Mayr | 2         |
| Böck | 3         |
| Faux | 2         |
+------+-----------+
Habe ich da einen Denkfehler, oder ist die Definition wirklich nicht okay?
Denkfehler : ja. Definition Okay ? Nein. Warum ? Tabelle Abteilungen ist ja ok. In Tabelle Mitarbeiter fehlt : ID und ID_Abteilung. Gäbe bei mir lediglich 4-6 von 15 Punkten. Vielleicht auch 8.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz