Daten mischen

Programmieren ohne Testdaten macht keinen Spaß. Schon gar nicht, wenn man weiß, dass es tausende echte Datensätze gibt, die man aber aus Datenschutzgründen nicht einsetzen darf. Aber vielleicht reicht es ja, wenn man die Daten einfach unkenntlich macht Bei Personendaten etwa könnte man schlicht alle Vor- und Nachnamen sowie gegebenenfalls die Adressdaten ordentlich durcheinanderwirbeln. Dann hat man ausreichend realistisches Testmaterial und außerdem ist der Datenschutzbeauftragte zufriedengestellt.

Meistens enthält eine Tabelle ja nur wenige wirklich datenschutzrelevante Daten wie etwa die Namen von Personen, Adressen, E-Mail-Adressen et cetera. In vielen Fällen reicht es tatsächlich aus, die Daten einmal durchzumischen, also beispielsweise alle Nachnamen der Tabelle zu nehmen und den Datensätzen neu zuzuordnen. Wenn man dies mit Vorname und Nachname durchführt, sollten die Daten nur noch schlecht reproduzierbar sein.

Etwas interessanter wird es, wenn Felder Informationen enthalten, die aus mehreren Feldern zusammengesetzt sind. Gut: Normalerweise sollte dies nicht geschehen, zumindest nicht in einer sorgsam normalisierten Datenbank. Manchmal lässt sich dies aber nicht verhindern: Dann landen Vor- und Nachname etwa im Feld mit der E-Mail-Adresse, deren Inhalt dann nach dem Schema <Vorname>.<Nachname>@<Firma>.xyz aufgebaut ist. Hier brauchen Sie gegebenenfalls eine kleine Spezialbehandlung. So könnte man in einer Abfrage prüfen, ob die E-Mail-Adresse den Vor- und/oder Nachnamen des aktuellen Datensatzes enthält, und die E-Mail-Adresse entsprechend aufbereiten.

Welche Anforderungen gibt es noch an ein Tool, mit dem Sie die Daten einer Tabelle nach dem Zufallsprinzip vermischen möchten Viele Tabellen enthalten beispielsweise ein oder mehrere abhängige Felder. Auch das entspricht im Grunde nicht den Normalisierungsregeln, lässt sich aber manchmal nicht vermeiden. Der Vorname und die Anrede (Herr/Frau) sind ein solches Beispiel: Sie könnten zwar eine Tabelle bereitstellen, welche die passende Anrede für jeden denkbaren Vornamen enthält. Aber was ist mit Namen, die nicht eindeutig einem Geschlecht zugeordnet werden können Die Existenz eines Anrede-Feldes ist also berechtigt. Wenn Sie nun aber die Vornamen der Datensätze Ihrer Tabelle vermischen, dann müssen Sie darauf achten, dass die Anreden nachher zu den Vornamen passen – so realistisch sollen die gemischten Daten schon sein. Das Tool sollte also die Möglichkeit bieten, Kombinationen aus mehreren Feldern zu vertauschen.

Der Datenmischer

Schauen wir uns an, was die Lösung dieses Beitrags für Funktionen bereithält. Sie besteht aus einem einzigen Formular, das gleichzeitig den kompletten Code enthält. Das Formular heißt frmMischer und sieht wie in Bild 1 aus.

pic001.png

Bild 1: Das Formular mit den Funktionen zum Mischen von Daten

Mit dem Kombinationsfeld Tabelle wählen Sie zunächst die Tabelle aus, deren Daten Sie durcheinanderwürfeln möchten. Die Auswahl wirkt sich auf drei weitere Steuerelemente aus: Die beiden Listenfelder Felder und Abhängige Felder zeigen die Felder der auswählten Tabelle an, das Unterformular auf der Registerseite Originaldaten zeigt die Daten der Tabelle selbst an.

Im Listenfeld Felder wählen Sie eines oder mehrere Felder aus, die einzeln oder in Kombination gemischt werden sollen. Wählen Sie hier beispielsweise nur das Feld Geburtstdatum aus, werden die Geburtsdaten zufällig einem der enthaltenen Datensätze zugewiesen.

Dabei bleiben alle Geburtsdaten erhalten, sie finden sich jedoch mit hoher Wahrscheinlichkeit in einem neuen Datensatz wieder (natürlich kann ein Wert auch im gleichen Datensatz landen – dies wird von der Anwendung nicht ausgeschlossen). Wenn Sie zwei oder mehr Felder im Listenfeld Felder auswählen, werden die Kombinationen vertauscht.

Das rechte Listenfeld Abhängige Felder behandelt solche Fälle, in denen die Daten der Felder des ersten Listenfeldes in weiteren Feldern wiederholt werden. Wenn Sie die Nachnamen aller Datensätze vertauschen möchten, passen die E-Mail-Adressen möglicherweise nicht mehr dazu – im geschäftlichen Bereich ist es ja mittlerweile die Regel, dass der Name in der E-Mail-Adresse auftaucht.

Alle Felder, die im rechten Listenfeld ausgewählt wurden, werden also auf Vorkommen der Werte der im linken Listenfeld ausgewählten Felder geprüft. Treten solche Werte auf, werden diese entsprechend der Vertauschung mit ersetzt.

Mischvorgang auslösen

Den Mischvorgang können Sie auf zwei Arten auslösen:

  • Die Schaltfläche Mischen führt den Mischvorgang direkt durch. Dieser Vorgang lässt sich nicht rückgängig machen – es sei denn, Sie hätten noch eine Kopie der Daten und würden diese wiederherstellen. Das Ergebnis können Sie gleich auf der Registerseite Originaldaten des Registers unten betrachten (s. Bild 2).
  • pic002.png

    Bild 2: Das Formular frmMischen in der Entwurfsansicht

  • Die Schaltfläche Testen erstellt erst eine Kopie der Tabelle und führt den Mischvorgang mit den ausgewählten Parametern mit den Daten der Kopie aus. Das Ergebnis wird auf der Registerseite Testdaten des Registersteuerelements angezeigt.

Wenn Sie den Mischvorgang zuerst getestet haben, können Sie zwischen den beiden Seiten des Registersteuerelements hin- und herwechseln und sich die Unterschiede ansehen.

Beim Schließen des Formulars fragt dieses noch, ob die temporären Tabellen gelöscht werden sollen.

Steuerelemente des Formulars

Das Formular enthält die folgenden Steuerelemente:

  • cboTabellen: Auswahl der Tabellen
  • cmdMischen: Stößt den Mischvorgang mit den Originaldaten an.
  • cmdTesten: Kopiert die Tabelle zuerst und mischt die Daten dann in der Kopie.
  • lblFelder und lblFelderAbhaengig: Beschriftungsfelder, die dynamisch die Anzahl der in den Listenfeldern ausgewählten Einträge anzeigen.
  • lstFelder: Erlaubt das Auswählen einzelner Felder oder von Kombinationen aus mehreren Feldern, die zwischen den Datensätzen ausgetauscht werden sollen.
  • lstFelderAbhaengig: Legt die Felder fest, die auf Vorkommen der Inhalte der Felder aus lstFelder untersucht werden sollen.
  • reg: Registersteuerelement zum Anzeigen der Original- und der Testdaten.
  • sfmTabelle: Unterformularsteuerelement, das die Daten der Originaltabelle anzeigt
  • sfmTabelleTest: Unterformularsteuerelement, das die Daten der zu Testzwecken kopierten Tabelle anzeigt

Tabelle auswählen

Das Kombinationsfeld cboTabellen soll alle Tabellen der aktuellen Datenbank anzeigen – mit Ausnahme der Systemtabellen und temporären Tabellen.

Die Namen der Tabellen lesen Sie mit einer Abfrage wie der aus Bild 3 aus der Systemtabelle MSysObjects aus.

pic003.png

Bild 3: Abfrage zur Ermittlung der Tabellen der aktuellen Datenbank

Damit das Kombinationsfeld zusätzlich zu den Tabellennamen einen Eintrag mit dem Wert <Auswählen> enthält, ändern Sie den SQL-Code der Abfrage wie folgt ab:

SELECT "<Auswählen>" AS Name FROM MSysObjects
UNION
SELECT Name FROM MSysObjects
WHERE Name Not Like ''MSys*''
And Name Not Like ''~*'' AND Type=1 ORDER BY Name;

Außerdem verwenden Sie die folgende Prozedur, die durch das Ereignis Beim Laden des Formulars ausgelöst wird, um diesen Eintrag gleich beim Öffnen des Formulars anzuzeigen:

Private Sub Form_Load()
    Me!cboTabelle = Me!cboTabelle.ItemData(0)
    Me!sfmTabelle.SourceObject = ""
    Me!sfmTabelleTest.SourceObject = ""
End Sub

Die Prozedur leert gleichzeitig die beiden Unterformulare. Das Auswählen eines der Einträge des Kombinationsfeldes löst die Prozedur aus Listing 1 aus. Diese Prozedur prüft zunächst, ob der Benutzer den Eintrag <Auswählen> oder einen der Tabellennamen ausgewählt hat. Im Falle einer Tabelle nimmt die Prozedur einige Einstellungen vor:

Listing 1: Füllen der übrigen Steuerelemente nach Auswahl der Tabelle mit den zu verändernden Daten

Private Sub cboTabelle_AfterUpdate()
    If Not Me!cboTabelle = "<Auswählen>" Then
        Me!lstFelder.RowSource = Me!cboTabelle
        Me!lstFelderAbhaengig.RowSource = Me!cboTabelle
        Me!sfmTabelle.SourceObject = "Tabelle." & Me!cboTabelle
    Else
        Me!lstFelder.RowSource = ""
        Me!lstFelderAbhaengig.RowSource = ""
        Me!sfmTabelle.SourceObject = ""
    End If
    Me!sfmTabelleTest.SourceObject = ""
End Sub
  • Die beiden Listenfelder lstFelder und lstFelderAbhaengig werden mit den Feldnamen der ausgewählten Tabelle gefüllt.
  • Das Unterformular sfmTabelle erhält die ausgewählte Tabelle als Herkunftsobjekt.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar