Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Duplikate in einer Access Tabelle vermeiden





Frage

Hallo, Ich habe eine MS Access Tabelle erstellt, deren Felder sind: 1) IDHilfstabelle 2) lngAbsatz 3) lngSatz Die Tabelle soll die Nummer des Absatz und entsprechenden Satz in einem Roman wiedergeben. Also beispielsweise in der Tabellenansicht: lngAbsatz 1 lngSatz 1 in der nächsten Zeile lngAbsatz 1 lngSatz 2 in der nächsten Zeile lngAbsatz 2 lngSatz 1 usw. Da es sich um eine Hilfstabelle für eine n:m Beziehung handelt habe ich sowohl das Feld lng Absatz, als auch das Feld lngSatz mit "Yes (Duplicates ok)" indiziert. [Ihr seht ja in meinem Beispiel, dass z.B. Satz 1 sowohl für Absatz eins als auch für Absatz 2 existieren muss und Absatz 1 sowohl für dessen Satz 1, als auch für dessen Satz 2.] Nun zu meiner Frage: Mir ist aufgefallen, dass es durch diese Indizierung auch zu doppelten Einträgen kommen kann, die dann zwar eine unterschiedliche IDHilfstabelle haben, aber in den entscheidenden zwei anderen Feldern doppelt sind. Ist es möglich eine Indizierung forzunehmen die aus den zusammengesetzten Feldern lngAbsatz und lngSatz besteht? Also beispielsweise dass folgende Tabelleneinträge unmöglich wären: IDHilfstabelle 1 lngAbsatz 1 lng Satz 2 und ID Hilfstabelle 2 lngAbsatz 1 lng Satz 2 Vielen Dank für Eure Hilfe

Antwort 1 von lleopard

moin.

nein, dein Vorhaben das direkt in der Tabelle zu indizieren wird so nicht funktionieren.

Außerdem ist das auch nicht sinn einer Tabelle. Die soll ja lediglich Daten aufnehmen. Die Pürfung der Daten auf Korrektheit, Integrität, Redundanz ... erledigt man meistens über Abfragen.

Zitat:

IDHilfstabelle 1 lngAbsatz 1 lng Satz 2
IDHilfstabelle 2 lngAbsatz 1 lng Satz 2


Mal angenommen du hast einen Datensatz doppelt eingegeben, kannst du einfach eine Duplikatabfrage (der Abfrageassist wid dir sagen was du machen mußt) erstellen und dir die doppelten Datensätze anzeigen lassen. Löschen solltest du die dann händisch. Es wird bei dir ja nicht so oft vorkommen.

Gruß leo

Antwort 2 von reclaimyourcity

Hi Leo,

Danke für Deine Antwort. Mich wundert dass Du sagst es sei nicht Sinn einer Tabelle Redundanzen zu vermeiden. Auf http://www.me-asal.de/access/17-normalformen.htm steht: "...normalisieren einer Datenbank. Der Zweck ist, doppelte (redundante) Daten zu verhindern." im Abschnitt Tabellen. Deshalb habe ich gedacht man sollte redundante Daten bereits bei dem Tabellendesign möglichst ausschließen.

Gruß, Moritz

Antwort 3 von lleopard

hi Moritz

Zitat:
Deshalb habe ich gedacht man sollte redundante Daten bereits bei dem Tabellendesign möglichst ausschließen.


Das ist ja auch richtig. Nur wenn der Anwender doppelte Daten Eingibt, kann das ja durchaus gewollt sein.

Deswegen gibt es ja auch Duplikatabfragen.

Du hast ja auch schon richtig bemerkt, daß jeder Datensatz eine neue ID bekommt. Woher also soll die Datenbank wissen, daß das nicht in deinem Sinne ist?

Da ist also ein wenig mitdenken gefragt.

Mal angenommen du hast dir ein Eingabeformular gebastelt und willst nun die eingegebenen Daten prüfen, dann könnte man die eingegeben Daten zB vor dem Anfügen erst abprüfen.

Solange du aber einfach nur Datensätze erzeugst und jeder eine eigene ID bekommt, kann es auch doppelte Datensätze geben!

Gruß leo

Antwort 4 von reclaimyourcity

Ok Leo,

Danke für Deine Antwort. Da ich erst wieder mit Datenbanken beginne wollte ich einfach nochmal nachfragen ob man solche Redundanzen nicht gleich beim Tabellendesign vermeiden kann. Wenns nicht geht, dann geht es halt nicht. Schade...