Inhalt Tabellen mit Indizes versehen ............................................................................................................ 2 Feld mit einem Index versehen .......................................................................................................... 4 Einen Index über mehrere Felder aufbauen ....................................................................................... 4 Beziehungen zwischen Tabellen ......................................................................................................... 6 Den Pfad von verknüpfter Tabelle aktualisieren ................................................................................ 8 1:N-Beziehung mit referentieller Integrität definieren..................................................................... 10 In einer Tabelle mit Unterdatenblatt arbeiten ................................................................................. 12 Eine Beziehung mit referentieller Integrität mit Aktualisierung- und Löschweitergabe definieren . 13 Regeln der referentiellen Integrität verletzen .................................................................................. 14 Aktualisierungsweitergabe überprüfen ............................................................................................ 15 Löschweitergabe überprüfen ........................................................................................................... 16 Zur Vervollständigung der Datenbank Stadtlupe die Tabelle Aufträge erstellen .............................. 17 Verknüpfungstabelle für M:N-Beziehung einrichten ........................................................................ 18 M:N-Beziehung erstellen .................................................................................................................. 19 Tabelle aus dem Datenbankschema entfernen ................................................................................ 21 Beziehung zu einer verknüpften Tabelle einrichten ......................................................................... 22 1 Tabellen mit Indizes versehen Access ist ein sehr schnelles Datenbanksystem. Es lassen sich problemlos Datenmengen von mehreren hunderttausend Datensätzen in einer Tabelle verwalten. Kommen Ihnen die Suchvorgänge im Laufe der Zeit in einer Tabelle dennoch recht langsam vor, so können Sie durch die Verwendung von Indizes in ausgewählten Feldern Abfragen sehr stark beschleunigen. Ein Index funktioniert dabei prinzipiell wie der Index in einem Buch. In einem zusätzlichen Verzeichnis werden von Access die Index-Feldinhalte und die Verweise auf die zugehörigen Datensätze verwaltet. Wenn Sie nun die Suche nach einem bestimmten Begriff auslösen, benutzt Access nicht die Gesamttabelle, sondern sucht den Suchbegriff zuerst im Index. Dort kann der gesuchte Name wesentlich schneller gefunden werden und über den Verweis auf die reale Datensatznummer kann auch schneller innerhalb der Tabelle auf den gewünschten Datensatz zugegriffen werden. Doch es gibt auch Nachteile. Durch die Indizierung von Tabellenfeldern entstehen Indextabellen, die zwar nicht gezeigt werden, aber von Access programmintern angelegt und gepflegt werden müssen. Dadurch entsteht ein höherer Speicherbedarf auf der Festplatte. Wenn Sie für viele Felder einen Index anlegen, kann dies zu einer deutlichen Erhöhung des benötigten Speicherbedarfs führen. Auch kann beim Einfügen eines neuen Datensatzes eventuell eine Wartezeit entstehen, weil damit auch Einträge in den Indextabellen verbunden sind. Erstellen Sie deshalb Indizes ausschließlich für solche Datenfelder, nach deren Feldinhalten Sie später wirklich suchen wollen. Indizes werden von Access automatisch gepflegt: Sind sie erst einmal angelegt, so muss man sich nicht mehr um sie kümmern. Beim Komprimieren einer Datenbank werden sämtliche Indizes reorganisiert. Prinzipiell gibt es die folgenden Arten von Indizes: Indizes mit Duplikaten Diese erlauben den mehrfachen Eintrag desselben Wertes in ein Tabellenfeld. Postleitzahlen dürften z. B. in einer größeren Tabelle nur selten als einmaliger Eintrag vorkommen. Hier müssten Sie also einen Index verwenden, der Duplikate zulässt. Indizes ohne Duplikate Jeder Feldinhalt muss sich eindeutig von allen anderen unterscheiden. Ein Beispiel dafür wäre die Sozialversicherungsnummer in einer Angestelltentabelle. Prinzipiell handelt es sich also immer um solche Felder, die auch als Schlüssel für die Tabelle verwendet werden könnten. Ist ein Eintrag bereits als Wert in der Tabelle vorhanden, so meldet Access beim nächsten Versuch dieses Eintrags einen Fehler und weist den Datensatz zurück. Eindeutige Indizes arbeiten schneller als nicht-eindeutige. Feldern, die zum Primärschlüssel erklärt wurden, wird automatisch ein Index ohne Duplikate zugewiesen. Zusammengesetzte Indizes Ein einfacher Index besteht aus genau einem Feld. Es ist jedoch auch möglich, mehrere Felder für einen Index zusammenzufassen. Diese können auch einen eindeutigen Index ergeben. 2 Sie sollten nur Felder, nach deren Inhalten gesucht oder sortiert wird, indizieren. So bleiben in der Regel die Telefonnummer und die Faxnummer ohne Index. Sie sollten nur die wirklich sinnvollen Felder indizieren. Dazu zählen Felder, in denen sehr häufig gesucht und sortiert wird. Dies könnten die Felder „Name“ und „Postleitzahl“ in einer Kundentabelle sein. Felder, die in verknüpften Tabellen auf der n-Seite einer 1:N-Beziehung1 stehen, also Fremdschlüsselfelder. Abfragen, in denen beide Tabellen vorkommen, werden durch solch eine Beziehung enorm beschleunigt. Felder, die eindeutig sein sollen. Das können mehrere Felder sein, die als Einheit betrachtet werden. Sie können über einen Index Doubletten in einer Tabelle vermeiden. Fassen Sie beispielsweise die Tabellenfelder Name, Vorname und Geburtsdatum in einer Mitarbeitertabelle zu einem Index ohne Duplikate zusammen, so werden Sie kaum noch versehentlich Namen mehrfach erfassen. 1 Ein klassisches Beispiel für eine 1:n-Beziehung ist die zwischen Projekten und Kunden. Dabei soll jedem Projekt genau ein Kunde zugeordnet werden können, was im Umkehrschluss bedeutet, dass jedem Kunden mehrere Projekte zugeordnet werden können. 3 Feld mit einem Index versehen Durch die Verwendung von Indizes in ausgewählten Feldern können Sie Abfragen sehr stark beschleunigen. 1. Die Tabelle Hefte der Datenbank 080Stadtlupe ist im Entwurfsmodus geöffnet. 2. Um das Feld Mitarbeiter-Code mit einem Index zu versehen, positionieren Sie den Cursor auf dieses Feld. 3. Wählen Sie in den Feldeigenschaften aus dem Listenfeld Indiziert Ja (Duplikate möglich). Abb 1 Das Feld Mitarbeiter-Code erhält einen Index mit Duplikaten 4. Schließen Sie die Tabelle. Beim Speichern wird für das ausgewählte Feld der Index erzeugt. Einen Index über mehrere Felder aufbauen Es ist auch möglich, mehrere Felder für einen Index zusammenzufassen. 1. Die Tabelle Mitarbeiter der Datenbank 081Stadtlupe ist im Entwurfsmodus geöffnet, das Tabellentools-Register Entwurf aktiviert. 2. Blenden Sie über Indizes das Indexfenster ein. 3. Geben Sie unterhalb des Eintrags PrimaryKey den Namen für den neuen Index ein: MitarbeiterInfo. 4. Wählen Sie nun nacheinander, beginnend in der dritten Zeile, jeweils aus dem Listenfeld Feldname die beteiligten Felder aus: Nachname, Vorname, Straße und Plz. 4 Abb 2 Die Dialogbox Indizes der Tabelle Mitarbeiter 5. Setzen Sie den Cursor wieder auf den Indexnamen MitarbeiterInfo. Wählen Sie im Bereich Indexeigenschaften aus dem Listenfeld Eindeutig Ja. 6. Schließen Sie das Index-Fenster. Beim Speichern bzw. Schließen der Tabelle wird der Index erstellt. 7. Mit diesem Index vermeiden Sie die Eingabe doppelter Mitarbeiterinformationen, da jeder Mitarbeiterdatensatz nun über die im Index vorkommenden Felder hinweg eindeutig sein muss. 5 Beziehungen zwischen Tabellen Beziehungen sind notwendig, um die Daten eines Datensatzes, die in relationalen Datenbankkonzepten in verschiedenen Tabellen gespeichert sind, wieder zusammenhängend darstellen zu können - sei es in Abfragen, Formularen oder Berichten. Beziehungen zwischen Tabellen haben Sie bereits im Kapitel 2 Datenbanken planen kennen gelernt. Dort ging es um die Konstruktion eines Datenbankschemas zu einer Aufgabenstellung. Mit dem Einrichten der Tabellen ist so ein Datenbankschema noch nicht korrekt in die eigentliche Datenbank umgesetzt. Es fehlen noch die Beziehungen zwischen den Tabellen. Sobald Access erkennt, wie die Daten zusammenhängen, wird dies automatisch in Formularen, Abfragen und Berichten berücksichtigt. Bevor Sie eine Beziehung zwischen Tabellen herstellen, müssen Sie entscheiden, ob diese Beziehung mit referentieller Integrität hergestellt werden soll. Die referentielle Integrität legt fest, dass es Datensätze in der abhängigen Tabelle, der sog. Detailtabelle, ohne passenden Datensatz in der Mastertabelle nicht geben kann. Insgesamt sind die folgenden Typen zu unterscheiden: Einfache Beziehungen Beziehungen mit referentieller Integrität Referentielle Integrität mit Aktualisierungsweitergabe an den Detaildatensatz Referentielle Integrität mit Löschweitergabe an den Detaildatensatz. In Beziehungen mit referentieller Integrität stellt Access sicher, dass zu jedem Datensatz in der Detailtabelle ein passender Datensatz in der Mastertabelle vorhanden ist. Auf unsere Beispiel-Tabellen Mitarbeiter und Hefte bezogen bedeutet dies: Jeder in die Tabelle Hefte eingefügte Datensatz muss einen gültigen Mitarbeiter-Code besitzen. Es darf kein Mitarbeiter gelöscht werden, zu dem noch Hefte in der Datenbank vorliegen. Sobald zu einem Mitarbeiter Hefte angelegt wurden, kann sein Mitarbeiter-Code in der Mastertabelle nicht geändert werden. Da die eben genannten Einschränkungen zwar ausgesprochen sinnvoll sind, was die Korrektheit der Daten in einer Datenbank betrifft, aber andererseits die Arbeit etwas unkomfortabel gestalten, gibt es zwei sinnvolle Ergänzungen zur referentiellen Integrität. In Beziehungen, für die eine referentielle Integrität mit Aktualisierungsweitergabe eingerichtet wurde, reicht das Datenbanksystem Änderungen am Primärschlüssel der Mastertabelle an die entsprechenden Verknüpfungsfelder der Detailtabelle weiter. Ändert sich in unserem Beispiel also einmal der Mitarbeiter-Code in einem Datensatz der Tabelle Mitarbeiter, so wird diese Änderung in jedem Datensatz der Tabelle Hefte nachvollzogen, der eben diesen Mitarbeiter-Code besitzt. So bleibt der Zusammenhang der Daten erhalten. Dies geschieht völlig automatisch und transparent für den Benutzer. 6 Auch für den Fall des Löschens auf der 1-Seite in verknüpften Tabellen gibt es die Möglichkeit einer Weitergabe. Wird in Beziehungen, die mit einer Löschweitergabe eingerichtet wurden, ein Datensatz aus der Mastertabelle entfernt, so löscht Access die dazu gehörenden Detaildatensätze ebenfalls. Das Löschen eines Mitarbeiterdatensatzes würde in unserem Beispiel also das Löschen der verknüpften Heftdaten nach sich ziehen. Vorsicht: Eine Löschweitergabe kann fatale Folgen haben. Beispielsweise dann, wenn beim Löschen eines Kundendatensatzes unbemerkt auch noch offene Rechnungen gelöscht werden. Einer der Vorteile bei der Arbeit mit Beziehungen zwischen Tabellen ist, dass Access die Detaildatensätze einer Tabelle in einem so genannten Unterdatenblatt darstellt. So kann man bequem die zu einem Datensatz gehörenden Detaildatensätze betrachten und sowohl in der Haupt- wie in der Untertabelle arbeiten, neue Datensätze anfügen u.s w. Um die Datenbank Stadtlupe zu vervollständigen, werden noch Tabellen benötigt, die eine Verwaltung von Anzeigenaufträgen erlauben. Bei der Beziehung zwischen der neuen Tabelle Aufträge und der bereits vorhandenen Tabelle Hefte muss Folgendes bedacht werden: Zu einem einzelnen Heft können natürlich mehrere Anzeigenaufträge vorliegen. Man hat es also mit einer 1:N-Beziehung zwischen Heften und Aufträgen zu tun. In einem einzelnen Auftrag können Anzeigenschaltungen zu mehreren Heften vereinbart werden. Folglich liegt auch eine 1:N-Beziehung zwischen Aufträgen und Heften vor. Wir haben also eine M:N-Beziehung zwischen Heften und Aufträgen einzurichten. Der neue Teil des Datenbankschemas wird nun schrittweise aufgebaut. Zunächst wird die Tabelle Aufträge erstellt. Da eine M:N-Beziehung in Access nicht direkt hergestellt werden kann, muss noch eine Verknüpfungstabelle eingerichtet werden. Mit Hilfe der Tabelle Anzeigenschaltungen wird dann die M:N-Beziehung eingerichtet. 7 Den Pfad von verknüpfter Tabelle aktualisieren Haben Sie die Datenbanken Stadtlupe und Debitoren kopiert, wird wahrscheinlich der Pfad der verknüpften Tabelle nicht mehr stimmen. Mit dem Tabellenverknüpfungs-Manager können Sie auf einfache Weise den Pfad aktualisieren. 1. Die Datenbank 089Stadtlupe ist geöffnet. Nach einem Doppelklick auf die verknüpfte Tabelle Kunden wird diese nicht geöffnet. Sie erhalten eine Fehlermeldung, dass die Datenbank Debitoren nicht gefunden werden konnte. Abb 2a Fehlermeldung 2. Sie müssen den Pfad aktualisieren. Bestätigen Sie die Fehlermeldung mit Ok und klicken Sie mit der rechten Maustaste auf die Tabelle Kunden. Wählen Sie dann aus dem Kontextmenü den Tabellenverknüpfungs-Manager. Abb 2b Kontextmenü der verknüpften Tabelle 8 3. Aktivieren Sie das Kontrollkästchen der verknüpften, zu aktualisierenden Tabelle und klicken Sie auf OK. 4. Berichtigen Sie den Pfad zur Datenbank Debitoren.accdb und klicken Sie dann auf Öffnen. 5. Sie erhalten dann die Meldung, dass die ausgewählte verknüpfte Tabelle erfolgreich aktualisiert wurde. Abb 2c Tabellenverknüpfungs-Manager mit der Erfolgsmeldung 6. Nun können Sie problemlos die Tabelle Kunden wieder öffnen. HINWEIS: Diese Schritte müssen in jeder Datenbank, die die Tabelle Kunden enthält, wiederholt werden! 9 1:N-Beziehung mit referentieller Integrität definieren 1. Die Datenbank 090Stadtlupe ist geöffnet. Die Tabellen Mitarbeiter und Hefte sollen verknüpft werden. Klicken Sie im Register Datenbanktools, Gruppe Beziehungen auf Beziehungen. 2. Wählen Sie die zu verknüpfenden Tabellen Mitarbeiter und Hefte jeweils mit einem Doppelklick aus und schließen Sie dann die Dialogbox Tabelle anzeigen. Abb 3 Mit einem Doppelklick werden die Tabellen in das Register Beziehungen eingefügt 3. Um eine Beziehung zwischen beiden Tabellen herzustellen, ziehen Sie das Feld Mitarbeiter-Code aus der Mastertabelle Mitarbeiter auf den Mitarbeiter-Code der Detailtabelle Hefte. Die Dialogbox Beziehungen wird geöffnet. 4. Bevor Sie eine Beziehung zwischen Tabellen herstellen, müssen Sie entscheiden, ob diese Beziehung mit referentieller Integrität hergestellt werden soll. Die referentielle Integrität legt fest, dass es Datensätze in der abhängigen Tabelle, der sog. Detailtabelle, ohne passenden Datensatz in der Mastertabelle nicht geben kann. Das heißt: a) Zu jedem Heft muss es einen Mitarbeiter geben. b) Es darf kein Mitarbeiter gelöscht werden, zu dem noch Hefte in der Datenbank vorliegen. c) Sind zu einem Mitarbeiter Hefte angelegt, so kann dessen Code in der Mastertabelle nicht mehr geändert werden. 5. Aktivieren Sie das Kontrollkästchen Mit referentieller Integrität. 10 Abb 4 Dialogbox Beziehungen 6. Beachten Sie, dass Access den Beziehungstyp schon als 1:n vorgegeben hat. Mit Erstellen richten Sie die Beziehung permanent in der Datenbank ein. Die entsprechende Verbindungslinie wird von Access dargestellt. Abb 5 Die 1:N-Beziehung zwischen den Tabellen Mitarbeiter und Hefte 7. Haben Sie sich geirrt, können Sie die Beziehung wieder löschen. Klicken Sie dazu auf die Verbindungslinie zwischen den Tabellen und drücken Sie (Entf). 8. Die anschließende Sicherheitsabfrage beantworten Sie mit Nein. 11 In einer Tabelle mit Unterdatenblatt arbeiten 1. Die Tabelle Mitarbeiter der Datenbank 091-092Stadtlupe ist geöffnet. 2. Beachten Sie, dass am linken Rand in der Datenblattansicht eine zusätzliche Spalte erscheint, nachdem Sie in der Datenbank eine Beziehung zwischen der Tabelle Mitarbeiter und der Tabelle Hefte eingerichtet haben. In jeder Datenzeile erscheint zunächst ein „+“-Symbol. 3. Klicken Sie auf das „+“-Zeichen neben dem Mitarbeiter-Code KT. Ein Unterdatenblatt öffnet sich. Das „+“-Zeichen ändert sich in ein „-“-Zeichen 4. In diesem Unterdatenblatt sehen Sie nun die Hefte, die dem Mitarbeiter mit dem Code KT zugeordnet sind. Sie können jetzt sowohl in der Haupt-, als auch in der Untertabelle ganz normal arbeiten. 5. Sie können sich auch mehrere Unterdatenblätter gleichzeitig anzeigen lassen. Öffnen Sie zusätzlich das Unterdatenblatt für den Mitarbeiter mit dem Code KMA. Abb 6 Eine Tabelle mit Unterdatenblätter 6. Die Unterdatenblätter schließen Sie mit einem Klick auf das „-“-Symbol. 7. Schließen Sie wieder die Tabelle Mitarbeiter. 12 Eine Beziehung mit referentieller Integrität mit Aktualisierung- und Löschweitergabe definieren 1. Die Datenbank 091-092Stadtlupe ist noch geöffnet. Öffnen Sie im Register Datenbanktools das Fenster Beziehungen. 2. Doppelklicken Sie auf die Verbindungslinie zwischen den beiden Tabellen oder klicken Sie auf Beziehungen bearbeiten. Abb 7 Beziehungen bearbeiten Die referentielle Integrität verhindert unter anderem das Ändern des Mitarbeiter-Codes in der Mastertabelle, sobald zu einem Mitarbeiter Hefte angelegt wurden. Außerdem darf kein Mitarbeiter gelöscht werden, zu dem noch Hefte in der Datenbank vorliegen. Da diese Einschränkungen die Arbeit unkomfortabel gestalten, gibt es zwei sinnvolle Ergänzungen: 3. Aktivieren Sie das Kontrollkästchen Aktualisierungsweitergabe an verwandte Felder. Wenn Sie einen Mitarbeiter-Code in der Tabelle Mitarbeiter ändern, wird diese Änderung jetzt in jedem Datensatz der Tabelle Hefte nachvollzogen. 4. Aktivieren Sie das Kontrollkästchen Löschweitergabe an verwandte Datensätze. Das Löschen eines Mitarbeiterdatensatzes zieht jetzt das Löschen aller verknüpften Heftdaten nach sich. Achtung: Die Löschweitergabe kann fatale Folgen haben, wenn beispielsweise beim Löschen eines Kundendatensatzes unbemerkt auch die offenen Rechnungen gelöscht werden. Setzen Sie diese Möglichkeit also nur wohlüberlegt ein! 5. Speichern Sie mit OK und schließen Sie das Beziehungsfenster. 13 Regeln der referentiellen Integrität verletzen Sie möchten jetzt die Wirkungen der im vorigen Beispiel geänderten Einstellungen überprüfen. 1. Die Datenbank 093-094Stadtlupe ist geöffnet. 2. Öffnen Sie die Tabelle Hefte und geben Sie einen Test-Datensatz mit der Heft-Nr xy 01 11, der Bezeichnung Konzerte in der Stadt und dem neuen Mitarbeiter-Code ABC ein. 3. Wenn Sie diesen Datensatz verlassen, wird Access sich weigern, diesen Eintrag für einen nicht existenten Mitarbeiter zu akzeptieren und quittiert Ihr Vorhaben mit einer Fehlermeldung. Abb 8 Regeln der referentiellen Integrität wurden verletzt 4. Bestätigen Sie diese Fehlermeldung. Drücken Sie dann (Esc), um die Eingabe zu stornieren. 14 Aktualisierungsweitergabe überprüfen 1. Öffnen Sie in der Datenbank 095Stadtlupe die Tabelle Mitarbeiter und verändern Sie den Mitarbeiter-Code des Mitarbeiters Otto Kelber von OK in OKE. 2. Schließen Sie die Tabelle und öffnen Sie die Tabelle Hefte, um zu überprüfen, ob die Änderungen des Primärschlüssels in der Mastertabelle an die Detailtabelle Hefte weitergegeben wurden. 3. Suchen Sie im Fremdschlüsselfeld Mitarbeiter-Code nach OKE. Sie finden die Datensätze mit den Heft-Nummern TK 01-11 und TK 02-11. Access hat also die Aktualisierungen weitergereicht. Abb 9 Der Mitarbeiter-Code in der Tabelle Hefte wurde aktualisiert 15 Löschweitergabe überprüfen 1. Öffnen Sie in der Datenbank 095Stadtlupe die Tabelle Mitarbeiter und löschen Sie den Datensatz Otto Kelber, indem Sie diesen Datensatz mit einem Klick im Zeilenkopf markieren und dann (Entf) drücken. 2. In einer Sicherheitsmeldung werden Sie darauf aufmerksam gemacht, dass Sie nicht nur einen Datensatz in der Mitarbeitertabelle löschen werden, sondern zusätzlich weitere Datensätze aus Detailtabellen. Dies sind alle Hefte zum ausgewählten Mitarbeiter. Bestätigen Sie das Löschen mit Ja. Abb 10 Sicherheitsmeldung beim Löschen von Datensätzen in der Mastertabelle 3. Schließen Sie die Tabelle und öffnen Sie die Tabelle Hefte. Gehen Sie ans Ende der Tabelle. Die Datensätze mit den Heft-Nummern TK 01-11 und TK 02-11, also die Datensätze, die dem Mitarbeiter mit dem Code OKE gehörten, sind nicht mehr vorhanden. Es sind nicht mehr 79, sondern nur noch 77 Datensätze in der Tabelle. Abb 11 Löschweitergabe: Wird ein Datensatz aus der Mastertabelle gelöscht, so werden in der Detailtabelle alle Datensätze, die mit diesem Datensatz verbunden waren, ebenfalls gelöscht. 4. Access hat die Löschung aus der Haupttabelle an die Detailtabelle weitergereicht. 16 Zur Vervollständigung der Datenbank Stadtlupe die Tabelle Aufträge erstellen Um die Datenbank Stadtlupe zu vervollständigen, werden noch Tabellen benötigt, die eine Verwaltung von Anzeigenaufträgen erlauben. 1. Erstellen Sie in der Datenbank 096Stadtlupe eine Tabelle in der Entwurfsansicht und speichern Sie diese unter Aufträge. 2. Erstellen Sie die Felder Auftrags-Nr, Kunden-Nr, Bearbeiter, Anzeigenformat, Erteilt am, Bezahlt am und Rabatt. 3. Als Felddatentyp der Auftrags-Nr wählen Sie AutoWert, als Felddatentyp der KundenNr Zahl, des Bearbeiters und des Anzeigenformats Text und der Felder Erteilt am und Bezahlt am Datum/Uhrzeit. Als Felddatentyp des Rabattes wählen Sie Zahl. 4. Die Feldgröße der Kunden-Nr ist Long Integer, die des Bearbeiters und des Anzeigenformates 50, die des Rabatts Single. Formatieren Sie den Rabatt als Prozentzahl. 5. Das Feld Auftrags-Nr ist bereits als Primärschlüssel definiert. Falls nicht, definieren Sie es über das Tabellentools-Register Entwurf mit dem Tool Primärschlüssel. Abb 12 Feldnamen und Felddatentypen der Tabelle Aufträge 6. Speichern Sie die Tabelle und schließen Sie den Entwurf der Tabelle. 17 Verknüpfungstabelle für M:N-Beziehung einrichten 1. Die Datenbank 097Stadtlupe ist geöffnet. Die Tabellen Hefte und Aufträge sollen verknüpft werden. Da zu einem einzelnen Heft mehrere Aufträge, aber auch in einem einzelnen Auftrag mehrere Hefte vorkommen können, liegt eine M:N-Beziehung zwischen diesen Tabellen vor. Für eine M:N-Beziehung muss eine Verknüpfungstabelle eingerichtet werden. 2. Erstellen Sie dazu eine neue Tabelle in der Entwurfsansicht und speichern Sie diese unter Anzeigenschaltungen. 3. In die Verknüpfungstabelle gehören zumindest die beiden Primärschlüsselfelder aus den zu verknüpfenden Tabellen Hefte und Aufträge. Geben Sie also die Felder HeftNr und Auftrags-Nr ein. Definieren Sie das Feld Heft-Nr als Textfeld der Feldgröße 6 und das Feld Auftrags-Nr als Zahl mit der Feldgröße Long Integer. 4. Das erste Feld wurde standardmäßig als Primärschlüsselfeld definiert. Entfernen Sie den Primärschlüssel über das Tabellentools-Register Entwurf mit dem Tool Primärschlüssel. 5. Oft ist es sinnvoll, noch weitere Informationen aufzunehmen. Nehmen Sie in die neue Tabelle noch drei neue Felder auf: Preis, Aufschlag und MwSt-Satz. 6. Legen Sie die Felder Preis und Aufschlag als Währungsfelder fest, das Feld MwSt-Satz als Zahl mit der Feldgröße Single und dem Format Prozentzahl. 7. Die Vergabe des Primärschlüssels muss sorgfältig überdacht werden. Weder das Feld Heft-Nr, noch das Feld Auftrags-Nr werden in der neuen Tabelle eindeutige Informationen enthalten. 8. Wir könnten auf ein Primärschlüsselfeld verzichten. Dies ist im Sonderfall einer Verknüpfungstabelle in einer M:N-Beziehung durchaus legitim. Wir könnten ein weiteres Feld vom Typ AutoWert in die Tabelle aufnehmen und als Primärschlüssel definieren oder einen Schlüssel aus mehreren Feldern erzeugen. 9. Wir verwenden die Variante eines zusammengesetzten Primärschlüssels: Die Felder Heft-Nr und Auftrags-Nr werden als zusammengesetzter Schlüssel eingesetzt. 10. Markieren Sie dazu die Zeilen Heft-Nr und Auftrags-Nr und legen Sie über das Symbol Primärschlüssel den zusammengesetzten Schlüssel fest. Abb 13 Der zusammengesetzte Primärschlüssel 11. Speichern Sie die Tabelle. 18 Hinweis: Die Felddatentypen und Feldgrößen der beiden Fremdschlüsselfelder wurden jeweils entsprechend den Felddefinitionen in den Mastertabellen gewählt. Dem Felddatentyp Long Integer entspricht die Definition des Schlüsselfeldes Auftrags-Nr als AutoWert. M:N-Beziehung erstellen 1. Die Datenbank 98Stadtlupe ist noch geöffnet. Klicken Sie im Register Datenbanktools auf Beziehungen, um das Datenbankschema anzuzeigen. 2. Fügen Sie über das Symbol Tabelle anzeigen die zu ergänzenden Tabellen Anzeigenschaltungen und Aufträge Ihrem Schema hinzu. 3. Sie können auch mit der rechten Maustaste auf die freie Fläche im Fenster Beziehungen klicken und aus dem Kontextmenü Tabelle anzeigen wählen. 4. Schließen Sie die Dialogbox Tabelle anzeigen anschließend. 5. Verschieben Sie zunächst die Tabelle Hefte, so dass sie neben der Tabelle Anzeigenschaltungen platziert ist. 6. Stellen Sie die Beziehung zwischen den Tabellen Hefte und den Anzeigenschaltungen her, indem Sie aus der Tabelle Hefte das Feld Heft-Nr auf das entsprechende Feld Heft-Nr in der Tabelle Anzeigenschaltungen ziehen. 7. Aktivieren Sie in der Dialogbox Beziehungen bearbeiten das Kontrollkästchen Mit referentieller Integrität sowie das Kontrollkästchen Aktualisierungsweitergabe an verwandte Felder. Mit Erstellen wird die Beziehung endgültig hergestellt. Verschieben Sie die Tabellen nach Bedarf. Abb 14 Beziehungen bearbeiten 8. Stellen Sie die Beziehung zwischen den Tabellen Aufträge und den Anzeigenschaltungen her, indem Sie aus der Tabelle Aufträge das Feld Auftrags-Nr auf das entsprechende Feld Auftrags-Nr in der Tabelle Anzeigenschaltungen ziehen. 19 9. Wählen Sie die Optionen Mit referentieller Integrität und Löschweitergabe an verwandte Datensätze aus. Klicken Sie auf Erstellen. Damit haben Sie die Beziehung zwischen Heften und Aufträgen über eine Zwischentabelle komplett definiert. 10. Speichern Sie die erstellten Beziehungen. Hinweis: Beachten Sie, dass in die Tabelle Anzeigenschaltungen zwei 1:NBeziehungslinien münden. Diese Tabelle ist also für zwei Mastertabellen die Detailtabelle. Dies ist typisch für M:N Beziehungen. Abb 15 Die M:N-Beziehung zwischen den Tabellen Hefte und Aufträge wurde über die Verknüpfungstabelle Anzeigenschaltungen hergestellt 20 Tabelle aus dem Datenbankschema entfernen Soll eine Tabelle aus einem Datenbankschema entfernt werden, so müssen Sie zuerst sämtliche Verknüpfungen dieser Tabelle zu den anderen Tabellen lösen und dann die Tabelle selbst löschen. 1. Die Datenbank 099-100Stadtlupe ist geöffnet. Wechseln Sie in das Register Datenbanktools und klicken Sie auf Beziehungen, um das Datenbankschema anzuzeigen. Die Tabelle Aufträge soll aus dem Datenbankschema entfernt werden. 2. Klicken Sie auf die Verbindungslinie zwischen den Tabellen Aufträge und Anzeigenschaltungen. Eine markierte Linie wird kräftiger dargestellt. Abb 16 Eine markierte Linie wird kräftiger dargestellt. 3. Drücken Sie auf (Entf) und bestätigen Sie die Sicherheitsabfrage mit Ja. 4. Klicken Sie anschließend auf die Tabelle Aufträge und drücken Sie wieder auf (Entf). Jetzt ist diese Tabelle vollständig aus dem Schema entfernt. Hinweis: Die Tabelle ist weiterhin in der Datenbank. Sie wurde nur aus dem Schema entfernt. 5. Fügen Sie für die weiteren Beispiele über Tabelle anzeigen die Tabelle Aufträge wieder ein. 6. Stellen Sie die Beziehung zwischen den Anzeigenschaltungen und den Aufträgen wieder her, indem Sie aus der Tabelle Aufträge das Feld Auftrags-Nr auf das Feld Auftrags-Nr der Tabelle Anzeigenschaltungen ziehen. Wählen Sie Mit referentieller Integrität und Löschweitergabe an verwandte Datensätze aus. 21 Beziehung zu einer verknüpften Tabelle einrichten 1. 2. 3. 4. 5. Die Datenbank 099-100Stadtlupe ist noch geöffnet. Klicken Sie im Register Datenbanktools auf Beziehungen. Fügen Sie über Tabelle anzeigen die Tabelle Kunden hinzu. Schließen Sie die Dialogbox Tabelle anzeigen. Stellen Sie eine Beziehung zwischen den Tabellen Kunden und Aufträge her, indem Sie aus der Tabelle Kunden das Primärschlüsselfeld Kunden-Nr auf das Fremdschlüsselfeld Kunden-Nr in der Tabelle Aufträge ziehen. 6. Zwischen einer verknüpften Tabelle und den vorhandenen Tabellen kann nur eine einfache Beziehung hergestellt werden. Es ist also nicht möglich, die referentielle Integrität einzusetzen. Klicken Sie auf Erstellen. Abb 17 Bei Beziehungen zu einer verknüpften Tabelle kann referentielle Integrität nicht eingesetzt werden Abb 18 Die Beziehungen in der Datenbak Stadtlupe 7. Verschieben Sie die Tabellen wunschgemäß. 22