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.
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
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
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
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
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
Zitat:
Deshalb habe ich gedacht man sollte redundante Daten bereits bei dem Tabellendesign möglichst ausschließen.
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...
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...