Wozu sind die Beziehungen in "Microsoft Office Access" gut?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Mit einer Beziehung zwischen zwei Tabellen verankert man u.a. im Datenbanksystem, dass die Daten konsistent sind und bleiben. Beispiel: Man hat eine Tabelle "tblRechnungen". Hier werden die Kopfdaten zu einer Rechnung, wie z.B. Rechnungsnummer, Rechnungsdatum, die Nummer des Rechnungsempfängers, Zahlungskonditionen, etc... gespeichert. Da bei unterschiedlichen Rechnungen auch unterschiedlich viele Positionen berechnet werden (mal sind es zwei, mal zwölf, etc...) erstellt man eine extra Tabelle "tblRechnungenPositionen". Hier trägt man die Menge, den Artikel, den Einzelpreis, etc... ein. Jetzt muß man dem Datenbanksystem ja noch mitteilen, welche Position zu welcher Rechnung gehört. Also könnte man sich nun die Rechnungsnummer aus der Haupttabelle merken und in den Positionen, die zu der einen Rechnung gehören immer die Rechnungsnummer in einem Feld dazu speichern. Dann weiß man, welche Position zu welcher Rechnung gehört. Dies ist aber natürlich fehleranfällig, umständlich und geht über eine Beziehung einfacher und besser. Man erstellt eine Beziehung in diesem Beispiel z.B. zwischen einem Autowert-Feld in der Tabelle "tblRechnungen", wie z.B. ID oder RGNummer. Dann braucht man noch ein Zahlenfeld (LongInteger) in der "tblRechnungenPositionen". In den Beziehungen zieht man nun eine Verbindung zwischen beiden Tabellenfeldern. Man klickt auf "referientelle Integrität" und "Löschweitergabe an Detaildatensätze". Wenn von einem Autowert-Feld verknüpft wird, braucht man keine Aktualisierungsweitergabe. Dies alles hat zur Folge, dass nun das Datenbanksystem überwacht, dass man z.B. keine Rechnungsposition für eine Rechnungsnummer anlegt, die es in der Haupttabelle noch nicht gibt. Oder wenn man eine Rechnung löscht, werden alle zugehörigen Positionen mit gelöscht. Ich hoffe, etwas geholfen zu haben. Viele Grüße Armin Dippel

Sie regeln Abhängigkeiten zwischen Tabellen bzw. Abfragen. Es gibt 1:1-Beziehungen, wo jedem Datensatz aus der einen Tabelle immer höchstens ein Datensatz aus der anderen zugeordnet ist; und es gibt 1-zu-Unendlich-Beziehungen, bnei denen jedem eindeutigen Datensatz aus der einen Tabelle (z. B. einer Rechnung) mehrere Datensätze aus einer anderen Tabelle (z. B. Produkte) zugeordnet sein kann.

Ich hoffe ich konnte etwas helfen...

Will zu der ersten Antwort noch was ergänzen:

Zum einen machst Du Dir die Arbeit einfacher, weil Access dann beim Erstellen von Abfragen schon "weiß", wie die darin enthaltenen Tabellen miteinander zusammenhängen, und deren Beziehungen schon einträgt. Da ist zwar mehr oder weniger immer Korrekturarbeit nötig, aber man muß nicht bei Null beginnen.

Außerdem hilft es Dir bei komplexeren Datenbanken ungeheuer, den Überblick über die Struktur zu behalten, wenn Du nur das Beziehungsfenster zu öffnen brauchst und nochmal kontrollieren kannst, was wie an wem hängt (hilft natürlich auch anderen, die Struktur Deiner MDB zu verstehen...).

Und wenn Du in den Beziehungen die Eigenschaft "referentielle Integrität" aktivierst, dann paßt die Jet Engine permanent selbständig auf, daß keine Datensätze entstehen, die gegen die Beziehungs-Regeln verstoßen. Benutzt Du keine solchen Beziehungen, mußt Du Dir lauter Funktionalitäten ausdenken, mit denen Du dafür sorgst, daß keine unsauberen Daten entstehen. Entwickler, die mit VB ein FrontEnd bauen und eine MDB als BackEnd benutzen, machen das teilweise, daß sie im BE Tabellen ohne Beziehungen benutzen.

Mit einer Beziehung zwischen zwei Tabellen verankert man u.a. im Datenbanksystem, dass die Daten konsistent sind und bleiben. Beispiel: Man hat eine Tabelle "tblRechnungen". Hier werden die Kopfdaten zu einer Rechnung, wie z.B. Rechnungsnummer, Rechnungsdatum, die Nummer des Rechnungsempfängers, Zahlungskonditionen, etc... gespeichert. Da bei unterschiedlichen Rechnungen auch unterschiedlich viele Positionen berechnet werden (mal sind es zwei, mal zwölf, etc...) erstellt man eine extra Tabelle "tblRechnungenPositionen". Hier trägt man die Menge, den Artikel, den Einzelpreis, etc... ein. Jetzt muß man dem Datenbanksystem ja noch mitteilen, welche Position zu welcher Rechnung gehört. Also könnte man sich nun die Rechnungsnummer aus der Haupttabelle merken und in den Positionen, die zu der einen Rechnung gehören immer die Rechnungsnummer in einem Feld dazu speichern. Dann weiß man, welche Position zu welcher Rechnung gehört. Dies ist aber natürlich fehleranfällig, umständlich und geht über eine Beziehung einfacher und besser. Man erstellt eine Beziehung in diesem Beispiel z.B. zwischen einem Autowert-Feld in der Tabelle "tblRechnungen", wie z.B. ID oder RGNummer. Dann braucht man noch ein Zahlenfeld (LongInteger) in der "tblRechnungenPositionen". In den Beziehungen zieht man nun eine Verbindung zwischen beiden Tabellenfeldern. Man klickt auf "referientelle Integrität" und "Löschweitergabe an Detaildatensätze". Wenn von einem Autowert-Feld verknüpft wird, braucht man keine Aktualisierungsweitergabe. Dies alles hat zur Folge, dass nun das Datenbanksystem überwacht, dass man z.B. keine Rechnungsposition für eine Rechnungsnummer anlegt, die es in der Haupttabelle noch nicht gibt. Oder wenn man eine Rechnung löscht, werden alle zugehörigen Positionen mit gelöscht