{"id":55001106,"date":"2017-12-01T00:00:00","date_gmt":"2020-05-13T21:27:25","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1106"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Vereinsverwaltung_Von_Excel_zum_Datenmodell","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/","title":{"rendered":"Vereinsverwaltung: Von Excel zum Datenmodell"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/e24532bc623a491aa7d829f7b5f85da3\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Die Tage war es soweit: Schwiegervater, seines Zeichens zweiter Vorsitzender eines Sportvereins, druckste herum: &#8222;Die Mitgliederdatei, also &#8230; die Excel-Datei &#8211; kannst Du uns da nicht mal was Richtiges draus zaubern Also ein Programm, mit dem ich Mitglieder eingeben und auch mal ein paar Auswertungen machen kann&#8220; Na klar kann ich. Also hatte ich ein neues Projekt: Eine Excel-Tabelle mit allen relevanten Daten sollte in einer relationalen Datenbank landen, die nicht nur die Dateneingabe vereinfachte, sondern auch noch verschiedene andere Aufgaben &uuml;bernehmen sollte. Ein perfektes Beispiel f&uuml;r eine L&ouml;sung in Access im Unternehmen! Dieser Teil beschreibt, wie wir die Daten aus der Excel-Tabelle in ein frisch erstelltes Datenmodell &uuml;berf&uuml;hren.<\/b><\/p>\n<p>Die Herausforderung bringt so Einiges mit sich, was man beim &uuml;berf&uuml;hren einer Excel-Tabelle in ein relationales Datenmodell an Herausforderungen erwarten kann. Alle Daten sind in einer einzigen Tabelle gespeichert, Lookup-Daten etwa zum Ausw&auml;hlen von Anreden, Altersklassen et cetera gibt es nicht, verschiedene Felder wie etwa der Nachname werden zum Hinzuf&uuml;gen zus&auml;tzlicher Informationen verwendet. Au&szlig;erdem gibt es noch verschiedene farbige Markierungen, die einen bestimmten Status des Mitglieds belegen.<\/p>\n<h2>Verkn&uuml;pfung erstellen<\/h2>\n<p>Als Erstes wollen wir uns die Daten der Excel-Datei in Form einer verkn&uuml;pften Access-Tabelle f&uuml;r unsere gewohnten Werkzeuge verf&uuml;gbar machen. Das ist schon mal nicht allzu einfach, da der bisherige Verwalter dieser Daten ja nicht nur Werte in die Spalten eingetragen hat, sondern auch noch Informationen in Form unterschiedlicher Formatierungen, in diesem Fall etwa farbiger Hintergr&uuml;nde oder fetter Schrift hinterlegt hat. Au&szlig;erdem beginnen die Zeilen mit den Daten auch nicht gleich in der ersten oder zweiten Zeile, sondern im Kopf befindet sich zun&auml;chst noch eine &uuml;berschrift, die normalweise nat&uuml;rlich im Kopfbereich der Seite landen sollte &#8211; genauso wie die Legende im unteren Bereich, die im Fu&szlig;bereich erscheinen sollte.<\/p>\n<p>Die L&ouml;sung f&uuml;r die &uuml;berfl&uuml;ssigen Zeilen &uuml;ber und unter den relevanten Daten ist relativ einfach: Wir legen dazu einfach einen Bereich in der Excel-Tabelle fest, den wir dann beim Verkn&uuml;pfen oder Importieren ausw&auml;hlen k&ouml;nnen. Wie geht das Dazu markieren Sie den gew&uuml;nschten Bereich und klicken dann in das Namenfeld links oben &uuml;ber der Tabelle und geben dort den Namen f&uuml;r den gew&auml;hlten Bereich ein &#8211; in diesem Fall wollen wir den Bereich <b>Mitglieder <\/b>nennen (s. Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_001.png\" alt=\"Benennen eines Bereiches\" width=\"649,559\" height=\"435,8578\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Benennen eines Bereiches<\/span><\/b><\/p>\n<p>Wenn Sie dann im Ribbon von Excel den Befehl <b>Formeln|Definierte Namen|Namensmanager <\/b>w&auml;hlen, erscheint der Dialog aus Bild 2, mit dem Sie die bereits festgelegten Bereiche bearbeiten k&ouml;nnen. Hier k&ouml;nnen Sie auch eventuell falsch markierte Bereiche l&ouml;schen oder bearbeiten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_002.png\" alt=\"Verwalten der benannten Bereiche\" width=\"499,6607\" height=\"391,0388\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Verwalten der benannten Bereiche<\/span><\/b><\/p>\n<h2>Farbige Markierungen in Daten umwandeln<\/h2>\n<p>Damit haben wir die Voraussetzung geschaffen, dass wir die Daten gleich mit Access verkn&uuml;pfen k&ouml;nnen. Nun ist allerdings noch ein weiteres Problem vorhanden: Wie k&ouml;nnen wir die farbigen Markierungen so darstellen, dass diese auch nach dem Verkn&uuml;pfen von Access aus gelesen werden k&ouml;nnen<\/p>\n<p>Im Detail sieht es es aus, dass wir in der ersten Spalte verschiedene farbige Markierungen vorfinden, die nicht etwa aus einer bedingten Formatierung stammen, sondern die vom Benutzer manuell erstellt wurden. In Access k&ouml;nnen wir diese Markierungen aber nach dem Importieren oder Verkn&uuml;pfen der Excel-Tabelle nicht mehr erkennen, diese werden ignoriert. Also m&uuml;ssen wir die Markierungen irgendwie in einen Zahlencode oder eine andere Information &uuml;bertragen.<\/p>\n<p>Wer zu faul ist, kann nat&uuml;rlich einfach dem Auftraggeber sagen, dass er eine neue Spalte anlegen und die Informationen aus den farbigen Markierungen dort eintragen soll. Aber wir sind ja immer an kreativen L&ouml;sungen interessiert und nehmen dies daher selbst in die Hand. In diesem Fall wollen wir eine neue Spalte namens Farbcode anlegen und f&uuml;r die Zellen dieser Spalte eine Formel hinterlegen, welche die Hintergrundfarbe der ersten Spalte ausliest und einen entsprechenden Zahlenwert in die Felder der neuen Spalte eintr&auml;gt.<\/p>\n<p>Um die Hintergrundfarbe in Form eines Zahlencodes in einer neuen Spalte rechts von den eigentlichen Inhalten anzuzeigen, gehen Sie wie folgt vor:<\/p>\n<ul>\n<li>W&auml;hlen Sie den Ribbon-Eintrag <b>Formeln|Definierte Namen|Namen definieren<\/b>. Dies &ouml;ffnet den Dialog aus Bild 3.<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_003.png\" alt=\"Name f&uuml;r eine Formel auf Basis einer Zelle\" width=\"499,6607\" height=\"253,451\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Name f&uuml;r eine Formel auf Basis einer Zelle<\/span><\/b><\/p>\n<li>Hier geben Sie in das Feld <b>Name <\/b>den Wert <b>Hintergrundfarbe <\/b>ein.<\/li>\n<li>In das Feld <b>Bezieht sich auf <\/b>geben Sie den folgenden Ausdruck ein: <b>=ZELLE.ZUORDNEN(63;INDIREKT(&#8222;ZS(-15)&#8220;;))<\/b><\/li>\n<li>Nun schlie&szlig;en Sie den Dialog <b>Name bearbeiten<\/b>.<\/li>\n<li>Geben sie in die erste freie Spalte des Excel-Tabellenblatts die folgende Formel ein: <b>=Hintergrundfarbe<\/b><\/li>\n<\/ul>\n<p>Nun liefert die hintere Spalte die den Hintergrundfarben entsprechenden Farbwerte (s. Bild 4). Damit k&ouml;nnen wir beim Import von Access aus doch schon etwas anfangen!<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_004.png\" alt=\"Hinzuf&uuml;gen des Namens mit der Referenz\" width=\"649,559\" height=\"402,7692\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Hinzuf&uuml;gen des Namens mit der Referenz<\/span><\/b><\/p>\n<p>Was aber haben wir hier gemacht &#8211; und wie funktioniert die angegebene Formel genau Die <b>Zuordnen<\/b>-Funktion erwartet zwei Parameter: der erste erh&auml;lt einen Zahlencode, der die Eigenschaft repr&auml;sentiert, die wir f&uuml;r die im zweiten Parameter angegebenen Bereich ermitteln wollen. In diesem Fall liefert der Zahlencode <b>63 <\/b>einen Wert f&uuml;r die Eigenschaft <b>Hintergrundfarbe<\/b>. Mit dem zweiten Ausdruck geben wir die zu untersuchende Zelle an. In diesem Fall nutzen wir die indirekte Schreibweise: <b>INDIREKT(&#8222;ZS(-15)&#8220;)<\/b>. Hinter <b>Z <\/b>befindet sich keine Zahl, also wollen wir in der gleichen Zeile arbeiten, hinter <b>S <\/b>befindet sich der Wert <b>-15<\/b>, was bedeutet, dass wir uns auf die Zeile beziehen, die 15 Spalten weiter links liegt.<\/p>\n<p>Dadurch dass wir die Formel <b>=Hintergrundfarbe <\/b>in die Zeile <b>R <\/b>schreiben, erhalten wir die Hintergrundfarbe f&uuml;r die Zelle der gleichen Zeile in der Spalte <b>B<\/b>. Nun wollen wir auch noch zwei weitere Formatierungen in den folgenden beiden Spalten unterbringen, n&auml;mlich die Schriftart in der Spalte <b>B <\/b>und ob der Text in Spalte <b>B <\/b>fett formatiert ist.<\/p>\n<p>Dazu legen wir zwei neue Eintr&auml;ge im Dialog <b>Namens-Manager <\/b>hinzu, sodass diese anschlie&szlig;end wie in Bild 5 aussieht. Die Formel f&uuml;r den Namen <b>Schriftfarbe <\/b>sieht so aus &#8211; hier verwenden wir also den Code <b>24<\/b>:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_005.png\" alt=\"Anlegen zweier weiterer Benennungen\" width=\"599,593\" height=\"411,6769\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Anlegen zweier weiterer Benennungen<\/span><\/b><\/p>\n<pre>=ZELLE.ZUORDNEN(24;INDIREKT(\"ZS(-17)\";))<\/pre>\n<p>Die Formel f&uuml;r den Namen <b>Fett <\/b>gestalten wir mit dem Code <b>20 <\/b>wie folgt:<\/p>\n<pre>=ZELLE.ZUORDNEN(20;INDIREKT(\"ZS(-18)\";))<\/pre>\n<p>Damit haben wir die drei m&ouml;glichen Informationen, die durch die verschiedenen Formatierungen entstehen, und k&ouml;nnen diese auch beim Import in die Access-Datenbank ber&uuml;cksichtigen.<\/p>\n<p>Den benannten Bereich f&uuml;r den Import m&uuml;ssen Sie &uuml;brigens nicht mehr um die drei neu angelegten Spalten erweitern, da wir dort die kompletten Zeilen als Bereich angegeben haben.<\/p>\n<h2>Import\/Verkn&uuml;pfung der Daten<\/h2>\n<p>Nun wollen wir die Daten aus der Excel-Tabelle in Access verf&uuml;gbar machen. Dazu haben wir zwei M&ouml;glichkeiten: Entweder wir importieren die Daten oder wir erstellen eine Verkn&uuml;pfung. In diesem Fall, wo nur eine einmalige Migration der Daten geplant ist, k&ouml;nnen wir die Daten direkt importieren. Das erledigen wir wie folgt:<\/p>\n<ul>\n<li>&ouml;ffnen Sie eine neue Access-Datenbank.<\/li>\n<li>W&auml;hlen Sie den Ribbon-Befehl <b>Externe Daten|Importieren und Verkn&uuml;pfen|Neue Datenquelle|Aus Datei|Excel <\/b>aus (s. Bild 6).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_006.png\" alt=\"Starten des Import-Vorgangs\" width=\"424,7115\" height=\"332,4239\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Starten des Import-Vorgangs<\/span><\/b><\/p>\n<li>Geben Sie im folgenden Dialog die Quelldatei an, behalten Sie die Einstellung <b>Importieren &#8230; <\/b>bei und klicken Sie auf <b>OK<\/b> (s. Bild 7).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_007.png\" alt=\"Auswahl von Quelldatei und Import \" width=\"649,559\" height=\"452,2134\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Auswahl von Quelldatei und Import <\/span><\/b><\/p>\n<li>Wechseln Sie im folgenden Dialog zur Option <b>Benannte Bereiche anzeigen<\/b>. Dies liefert unseren weiter oben angelegten Bereich <b>Mitglieder<\/b>, den wir nun aktivieren. Die Liste darunter zeigt nun den von uns ausgew&auml;hlten Bereich an (s. Bild 8).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_008.png\" alt=\"Festlegen des zu importierenden Bereichs\" width=\"630\" height=\"425,5893\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Festlegen des zu importierenden Bereichs<\/span><\/b><\/p>\n<li>Aktivieren Sie im folgenden Schritt die Option <b>Erste Zeile enth&auml;lt Spalten&uuml;berschriften<\/b>. Dies bringt zun&auml;chst die Meldung aus Bild 9 zutage. Dabei handelt es sich um die von uns hinzugef&uuml;gten Spalten ganz rechts. Die fehlenden Spalten&uuml;berschriften sind kein Problem, so lange wir die Daten nur einmal importieren m&uuml;ssen &#8211; Sie k&ouml;nnen sich also aussuchen, ob Sie diese in der Excel-Tabelle nachtragen und den Import erneut starten oder ob Sie die Feldnamen in Access anpassen.<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_009.png\" alt=\"Es fehlen einige Spalten&uuml;berschriften\" width=\"700\" height=\"194,4445\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Es fehlen einige Spalten&uuml;berschriften<\/span><\/b><\/p>\n<li>Einen Schritt weiter m&uuml;ssen Sie nun festlegen, welche Felder importiert werden sollen und k&ouml;nnen ein paar Eigenschaften f&uuml;r diese Felder festlegen. Dazu geh&ouml;ren der Feldname, der Datentyp und die Indizierung. Wir behalten alle Werte bei, da wir die Daten aus der Importtabelle ohnehin noch aus weitere Tabellen aufteilen m&uuml;ssen (s. Bild 10).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_010.png\" alt=\"Einstellen der Feldeigenschaften\" width=\"599,593\" height=\"405,0481\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Einstellen der Feldeigenschaften<\/span><\/b><\/p>\n<li>Im vorletzten Schritt (s. Bild 11) geben wir noch an, dass wir keinen neuen Prim&auml;rschl&uuml;ssel anlegen wollen &#8211; dies aus dem gleichen Grund wie zuvor: Die Daten werden ohnehin noch in die Zieltabellen &uuml;berf&uuml;hrt.<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_011.png\" alt=\"Festlegen eines Prim&auml;rschl&uuml;ssels\" width=\"599,593\" height=\"405,0481\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Festlegen eines Prim&auml;rschl&uuml;ssels<\/span><\/b><\/p>\n<li>Im letzten Schritt k&ouml;nnen Sie noch den Namen der Zieltabelle festlegen, wobei wir den Namen <b>Mitglieder <\/b>beibehalten k&ouml;nnen.<\/li>\n<\/ul>\n<p><!--30percent--><\/p>\n<p>Im vorliegenden Beispiel traten beim Import ein paar Fehler auf, die der Import-Assistent in der Tabelle <b>Mitglieder_Importfehler <\/b>gespeichert hat. Die Fehler traten wohl in der Spalte mit der Postleitzahl auf, die entsprechenden Zeilennummern sind ebenfalls in der Tabelle angegeben (s. Bild 12). Ein Blick in die Zieltabelle <b>Mitglieder <\/b>zeigt, dass das Feld <b>Postlz <\/b>f&uuml;r die angegebenen Zeilen leer ist. Also werfen wir auch noch einen Blick auf die Daten in der Ausgangsdatei.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_012.png\" alt=\"Tabelle der Importfehler\" width=\"424,7115\" height=\"209,3076\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Tabelle der Importfehler<\/span><\/b><\/p>\n<p>Hier zeigt sich dann ein gern gemacht er Fehler: Statt das Land in einer eigenen Spalte zu speichern, wird dieses als K&uuml;rzel vor die Postleitzahl geschrieben. In diesem Fall handelt es sich um die Schweiz und Eintr&auml;ge wie etwa <b>CH-8005<\/b>. Beim Import werden die Datentypen der Zielfelder auf Basis der oberen paar Werte ermittelt. Hier traten noch keine Postleitzahlen mit anderen Zeichen als mit Zahlen auf, daher wurde ein Zahlendatentyp f&uuml;r das Feld festgelegt. In ein solches Feld k&ouml;nnen wir nat&uuml;rlich keine Werte mit Buchstaben importieren. Auch hier haben Sie die Wahl: &auml;ndern Sie die paar Eintr&auml;ge in der Zieltabelle von Hand oder wollen Sie dies in der Quelldatei erledigen und die Daten erneut importieren Wir starten den Import erneut und stellen diesmal den Datentyp f&uuml;r die Spalte <b>PLZ <\/b>auf <b>Kurzer Text <\/b>ein &#8211; nun gelingt auch der Import der PLZ-Werte mit L&auml;nderkennzeichen.<\/p>\n<p>Damit w&auml;re der Import abgeschlossen und wir k&ouml;nnen uns dem Datenmodell und dem &uuml;bertragen der Daten aus der Tabelle <b>Mitglieder<\/b> in die noch zu erstellenden Tabellen der Anwendung konzentrieren. Wir k&ouml;nnen noch die meisten der in der Zieltabelle <b>Mitglieder<\/b> angelegten Felder mit den Bezeichnungen <b>F21<\/b>, <b>F22 <\/b>und so weiter l&ouml;schen sowie den drei von uns angelegten Feldern entsprechende Feldnamen zuweisen. Der Entwurf des Datenmodells sieht anschlie&szlig;end wie in Bild 13 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_013.png\" alt=\"Datenmodell der Tabelle nach dem Umbenennen und Entfernen unn&ouml;tiger Felder\" width=\"599,593\" height=\"409,2177\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Datenmodell der Tabelle nach dem Umbenennen und Entfernen unn&ouml;tiger Felder<\/span><\/b><\/p>\n<h2>Erstellen der Zieltabellen<\/h2>\n<p>Nun erstellen wir die Zieltabellen f&uuml;r die Daten aus der tempor&auml;ren Tabelle <b>Mitglieder<\/b>. Als Erstes legen wir die Tabelle <b>tblMitglieder <\/b>an, welche die Basisdaten eines jeden Mitglieds enth&auml;lt &#8211; also <b>Vorname<\/b>, <b>Nachname<\/b>, <b>Mitgliedsnummer <\/b>und so weiter. Des Weiteren werden wir einige Lookup-Tabellen brauchen &#8211; zum Beispiel f&uuml;r die Anrede. Wobei an dieser Stelle auff&auml;llt, dass die Excel-Tabelle gar keine Spalte f&uuml;r die Anrede enth&auml;lt. Eine Spalte f&uuml;r das Geschlecht ist auch nicht vorhanden. Wie wurden denn dann die Serienbriefe mit der korrekten Anrede gef&uuml;llt Vielleicht hat man diese einfach weggelassen. Wir werden auf jeden Fall eine Anrede unterbringen. Dazu ben&ouml;tigen wir die Lookup-Tabelle <b>tblAnreden<\/b>, deren Entwurf wie hier nicht extra vorstellen wollen &#8211; sie enth&auml;lt lediglich die Felder <b>AnredeID<\/b>, <b>Anrede<\/b>, <b>Briefanrede <\/b>und <b>Adressanrede<\/b> (also f&uuml;r Werte wie <b>Herr<\/b>, <b>Sehr geehrter Herr <\/b>und <b>Herrn<\/b>).<\/p>\n<p>Der Haken an der Tabelle mit den Anreden ist, dass das entsprechende Fremdschl&uuml;sselfeld in der Tabelle <b>tblMitglieder <\/b>manuell gef&uuml;llt werden muss, da die Excel-Tabelle ja noch gar keine Informationen bez&uuml;glich Anrede oder Geschlecht enth&auml;lt. Das einzige Feld, dem man eine Information &uuml;ber das Geschlecht entnehmen kann, ist <b>Vorname<\/b>. Allerdings gibt es auch keinen Algorithmus, der zuverl&auml;ssig das Geschlecht vom Vornamen ableitet. Wenn wir aber in der Excel-Tabelle etwas weiter nach rechts schauen, findet sich dort eine Spalte mit der &uuml;berschrift <b>AK\/Pa<\/b>. Was <b>Pa <\/b>ist, ist aktuell nicht bekannt, aber <b>AK <\/b>hei&szlig;t offensichtlich Altersklasse. Dort finden sich dann Werte wie <b>EPM<\/b>, <b>EPW<\/b>, <b>WJ <\/b>oder <b>EAM<\/b>. Die Gemeinsamkeit ist: Alle Eintr&auml;ge enthalten entweder ein <b>M <\/b>f&uuml;r <b>M&auml;nnlich <\/b>oder ein <b>W <\/b>f&uuml;r <b>Weiblich<\/b>. Bingo!<\/p>\n<p>F&uuml;r das Geschlecht legen wir wie f&uuml;r die Anrede eine eigene Lookup-Tabelle namens <b>tblGeschlechter <\/b>an. Diese enth&auml;lt die beiden Felder <b>GeschlechtID <\/b>und <b>Geschlecht<\/b> (s. Bild 14).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_014.png\" alt=\"Die Tabelle tblGeschlechter\" width=\"349,7625\" height=\"181,0423\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Die Tabelle tblGeschlechter<\/span><\/b><\/p>\n<h2>Altersklassen<\/h2>\n<p>Apropos Altersklassen. Normalerweise ist sehr eindeutig festgelegt, mit welchem Alter man in welcher Altersklasse unterwegs ist. Allerdings gibt es immer Vereine, die in einer Altersklasse zu wenige Spieler haben. Bevor man dann in dieser Altersklasse gar keine Mannschaft meldet, stockt man diese gegebenenfalls mit j&uuml;ngeren Spielern auf, was in den meisten Sportarten bis zu einem gewissen Alter m&ouml;glich ist, oder man spielt au&szlig;er Konkurrenz und nimmt ein paar &auml;ltere Spieler hinzu. Was hat das mit dem Datenmodell zu tun Nun: Normalerweise wird jedes Mitglied einer Altersklasse zugeordnet. Das kann man auch automatisiert machen, indem man das Geburtsdatum des Mitglieds ermittelt, den Stichtag hinzunimmt, an dem das Alter f&uuml;r die aktuelle Saison ermittelt wird und dann aus einer entsprechenden Tabelle die Altersklasse ausliest. Aber was, wenn wir oben Mitglieder in mehr als einer Altersklasse gef&uuml;hrt werden sollen, weil eben in einer Mannschaft zu wenige Mitglieder sind und diese aufgestockt werden muss An dieser Stelle kommen wir an einer Verfeinerung der Begriffe nicht vorbei: Ein Spieler kann nat&uuml;rlich immer nur einer Altersklasse angeh&ouml;ren. Allerdings k&ouml;nnen durchaus Spieler verschiedener Altersklassen einer Mannschaft zugeordnet werden.<\/p>\n<p>Wir behalten also die Idee bei, die Altersklasse &uuml;ber das Geschlecht und die Tabelle mit den Altersklassen zu ermitteln. Zus&auml;tzlich legen wir eine Tabelle an, die alle f&uuml;r die aktuelle Saison gemeldeten Mannschaften enth&auml;lt. Eine Tabelle zum Herstellen einer m:n-Beziehung erlaubt dann das Zuordnen eines Spielers zu einer oder mehreren Mannschaften.<\/p>\n<h2>Tabelle f&uuml;r die Altersklassen<\/h2>\n<p>Wir ben&ouml;tigen also mindestens noch eine Tabelle namens <b>tblAltersklassen<\/b>. Diese enth&auml;lt ein Prim&auml;rschl&uuml;sselfeld namens <b>AltersklasseID<\/b>, ein Textfeld mit der Bezeichnung der Altersklasse namens <b>Altersklasse<\/b>, ein Fremdschl&uuml;sselfeld namens <b>GeschlechtID<\/b>, mit dem wir das Geschlecht ausw&auml;hlen k&ouml;nnen und zwei Felder f&uuml;r das Mindestalter und das H&ouml;chstalter f&uuml;r diese Altersklasse. Schlie&szlig;lich haben wir noch ein Feld namens <b>Kuerzel<\/b>, welches die Kurzform der <b>Bezeichnung <\/b>enth&auml;lt. Den Entwurf der Tabelle finden Sie Bild 15. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_015.png\" alt=\"Entwurf der Tabelle tblAltersklassen\" width=\"499,6607\" height=\"375,7847\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 15: Entwurf der Tabelle tblAltersklassen<\/span><\/b><\/p>\n<p>Bei der Beispielanwendung handelt es sich um Daten aus dem Hockeysport, wo die Altersklassen wie in Bild 16 aussehen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_017.png\" alt=\"Datenblattansicht der Tabelle tblAltersklassen\" width=\"599,593\" height=\"373,7491\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 16: Datenblattansicht der Tabelle tblAltersklassen<\/span><\/b><\/p>\n<h2>Tabelle f&uuml;r Optionen<\/h2>\n<p>Wenn wir &uuml;ber Altersklassen sprechen, m&uuml;ssen auch den Begriff Stichtag ins Spiel bringen. Verb&auml;nde legen damit fest, an welchem Tag des Jahres das Alter ermittelt wird, damit die Zuordnung zu den Altersklassen erfolgen kann. Im vorliegenden Fall handelt es sich dabei um den 31.12.2017. Dieses Datum muss nat&uuml;rlich jedes Jahr angepasst werden, damit die Mitglieder jeweils in die entsprechende Altersklasse rutschen. F&uuml;r Daten wie diese legen wir eine Optionen-Tabelle namens <b>tblOptionen <\/b>an. Der Entwurf sieht wie in Bild 17 aus. Diese Tabelle darf nat&uuml;rlich immer nur einen Datensatz enthalten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_016.png\" alt=\"Entwurf der Tabelle tblOptionen\" width=\"499,6607\" height=\"111,9503\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 17: Entwurf der Tabelle tblOptionen<\/span><\/b><\/p>\n<p>Alternative: Der Stichtag liegt nat&uuml;rlich immer im aktuellen Kalenderjahr. Man k&ouml;nnte hier auch nur den Tag und den Monat speichern und das Jahr aus dem aktuellen Datum hinzuf&uuml;gen. Auf diese Weise braucht man den Stichtag nie zu aktualisieren, au&szlig;er er &auml;ndert sich einmal auf einen anderen Tag des Jahres &#8211; beispielsweise auf den 1. Januar oder auf den 1. Juli eines Jahres.<\/p>\n<h2>Tabelle zum Speichern der Mannschaften<\/h2>\n<p>Dar&uuml;ber hinaus ben&ouml;tigen wir noch eine Tabelle, mit der wie die Mannschaften speichern. Diese soll <b>tblMannschaften <\/b>hei&szlig;en und die Felder <b>MannschaftID<\/b>, <b>Mannschaft <\/b>und <b>AltersklasseID <\/b>enthalten (s. Bild 18).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_018.png\" alt=\"Entwurf der Tabelle tblMannschaften\" width=\"499,6607\" height=\"385,5347\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 18: Entwurf der Tabelle tblMannschaften<\/span><\/b><\/p>\n<p>Hier k&ouml;nnten wir das Spiel noch weitertreiben &#8211; zum Beispiel mit einem <b>Ja\/Nein<\/b>-Feld <b>AusserKonkurrenz <\/b>oder mit einem Fremdschl&uuml;sselfeld namens <b>LigaID<\/b>, mit dem wir einstellen, in welcher Liga in einer dann noch zu erstellenden Tabelle <b>tblLigen <\/b>die Mannschaft spielt. Wobei sich dann die Frage stellt, ob man dies nicht &uuml;ber eine m:n-Beziehung realisiert, die auch noch die Saison speichert. So h&auml;tte man dann direkt eine Historie, welche Mannschaft wann in welcher Liga gespielt hat. Aber warum &uuml;berhaupt wollen wir neben der Tabelle <b>tblAltersklassen <\/b>noch die Tabelle <b>tblMannschaften <\/b>nutzen Weil es ja auch einmal zwei Mannschaften einer Altersklasse geben kann, zum Beispiel <b>Herren I <\/b>und <b>Herren II <\/b>oder <b>M&auml;dchen A I <\/b>und <b>M&auml;dchen B II<\/b>.<\/p>\n<h2>Mitglieder zu Mannschaften zuweisen<\/h2>\n<p>Um die Mannschaften zu bilden &#8211; sprich: einer Mannschaft Mitglieder zuzuweisen -, ben&ouml;tigen wir eine passende Verkn&uuml;pfungstabelle. Diese soll <b>tblMitgliederMannschaften <\/b>hei&szlig;en und neben dem Prim&auml;rschl&uuml;sselfeld <b>MitgliedMannschaftID <\/b>noch zwei Fremdschl&uuml;sselfelder auf die Tabellen <b>tblMitglieder <\/b>und <b>tblMannschaften <\/b>aufweisen. F&uuml;r die beiden Fremdschl&uuml;sselfelder stellen wir einen eindeutigen Index ein, da ja jedes Mitglied nur einmal einer Mannschaft zugeteilt werden soll (s. Bild 19).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_019.png\" alt=\"Entwurf der Tabelle tblMitgliederMannschaften\" width=\"599,593\" height=\"388,342\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 19: Entwurf der Tabelle tblMitgliederMannschaften<\/span><\/b><\/p>\n<p>Andererseits soll ein Mitglied auch einmal zu mehreren Mannschaften geh&ouml;ren k&ouml;nnen &#8211; daher die m:n-Beziehung.<\/p>\n<p>Auch hier k&ouml;nnte man noch einen Schritt weiter gehen, wenn man eine Historie mit einpflegen m&ouml;chte: Durch Hinzuf&uuml;gen eines Feldes <b>SaisonID<\/b>, das auf eine Tabelle namens <b>tblSaisons <\/b>verweist, k&ouml;nnte man aufzeichnen, wann welcher Spieler in welcher Mannschaft gespielt hat. Dieses Feature wollen wir allerdings in der aktuellen Version noch nicht einbauen.<\/p>\n<h2>Beitr&auml;ge<\/h2>\n<p>Einer der Haupteinsatzzwecke einer Mitgliederverwaltung ist das die Verwaltung der Beitr&auml;ge. Allermindestens sollte die Mitgliederverwaltung dabei zu jedem Mitglied speichern, welcher Beitrag zu zahlen ist. Dazu finden wir in unserer Exceltabelle eine entsprechende Spalte mit dem Beitrag als Zahlenwert.<\/p>\n<p>Bei n&auml;herer Betrachtung sind diese Zahlen allerdings nicht gerade konsistent &#8211; mindestens nicht in dem Sinne, als dass man erwarten w&uuml;rde, dass die Mitglieder einer gemeinsamen Altersklasse auch einen einheitlichen Beitrag zahlen w&uuml;rden. Ohne weitere Informationen sind die Zahlen auch nicht reproduzierbar. Abhilfe schafft dann eine weitere Spalte namens Bemerkung, in welcher oft der regul&auml;re Beitrag angegeben wird und eine Prozentzahl, um welche dieser reduziert wurde.<\/p>\n<p>Dies wollen wir nun etwas konsistenter abbilden. Dabei ben&ouml;tigen wir zun&auml;chst eine M&ouml;glichkeit, den regul&auml;ren Beitrag zu speichern. Der regul&auml;re Beitrag sollte sich von der Altersklasse ableiten. Bei unseren Altersklassen, die wir oben in der Tabelle <b>tblAltersklassen <\/b>eingetragen haben, w&uuml;rden dann allerdings noch ein paar Eintr&auml;ge fehlen &#8211; beispielsweise f&uuml;r passive Mitglieder. Diese k&ouml;nnen wir jedoch recht schnell hinzuf&uuml;gen.<\/p>\n<p>Allerdings fehlt dieser Tabelle noch ein W&auml;hrungsfeld namens <b>Beitrag<\/b>, das wir an dieser Stelle hinzuf&uuml;gen k&ouml;nnten. Aber wie sinnvoll ist es wirklich, auch die passiven Mitglieder zur Tabelle der Altersklassen hinzuzuf&uuml;gen &#8211; und somit auch die Beitr&auml;ge Immerhin haben wir ja gerade eine saubere Trennung der verschiedenen Altersklassen &uuml;ber die Altersbereiche. Wenn wir nun noch zwei Klassen etwa namens <b>Passiv m&auml;nnlich <\/b>und <b>Passiv weiblich <\/b>hinzuf&uuml;gen, die ja theoretisch jeden Alters sein k&ouml;nnen, bringt dies unser Konzept durcheinander. Wie sollen wir also die passiven Mitglieder handhaben <\/p>\n<p>Bringen wir also noch ein <b>Ja<\/b>\/<b>Nein<\/b>-Feld etwa namens <b>Aktiv <\/b>in die Tabelle <b>tblMitglieder <\/b>ein, um diese Eigenschaft direkt f&uuml;r das Mitglied festzulegen Dann w&uuml;rde es Sinn machen, auch noch eine eigene Tabelle anzulegen, welche die Beitragss&auml;tze f&uuml;r die verschiedenen Gruppen enth&auml;lt. Diese k&ouml;nnten dann etwa nach dem Alter und der aktiven oder passiven Vereinszugeh&ouml;rigkeit aufgeteilt werden.<\/p>\n<h2>Beitragsrabatte<\/h2>\n<p>Nun kommen aber noch die verschiedenen Rabatte hinzu. Davon gibt es verschiedene: Bei manchen Eintr&auml;gen scheinen diese willk&uuml;rlich vergeben worden zu sein &#8211; au&szlig;er im entsprechenden Hinweisfeld finden sich keine weiteren Informationen zum Rabatt. In einigen F&auml;llen greift ein Familienrabatt, der folgende Regel vorsieht: Das erste Mitglied zahlt den regul&auml;ren Beitrag, das zweite bekommt 20% Rabatt, das dritte 30% Rabatt und so weiter. Der gesamte Beitrag f&uuml;r die Mitglieder einer Familie ist allerdings auf einen bestimmten Beitrag gedeckelt &#8211; hier 300 EUR.<\/p>\n<p>Auch dies wollen wir entsprechend abbilden. Dazu soll man einem Mitglied die &uuml;brigen Familienmitglieder zuordnen k&ouml;nnen. Das erledigen wir &uuml;ber eine weitere m:n-Beziehung, die wir mit der Tabelle <b>tblFamilienmitglieder <\/b>abdecken. Diese Tabelle enth&auml;lt neben dem Feld <b>FamilienzugehoerigkeitID <\/b>die beiden Fremdschl&uuml;sselfelder <b>FamilienoberhauptID <\/b>und <b>FamilienmitgliedID<\/b>, die beide mit der Tabelle <b>tblMitglieder <\/b>verkn&uuml;pft sind. Auch hier legen wir wieder einen zusammengesetzten, eindeutigen Schl&uuml;ssel &uuml;ber die beiden Fremdschl&uuml;sselfelder fest.<\/p>\n<p>Wo aber speichern wir die Rabatte f&uuml;r das zweite, dritte, vierte und die weiteren Familienmitglieder Dazu bietet sich die Optionentabelle an, der wir f&uuml;r jeden Rabatt ein weiteres Feld zuweisen &#8211; f&uuml;r das erste weitere Familienmitglied beispielsweise in <b>Familienrabatt1<\/b> (s. Bild 20).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_023.png\" alt=\"Entwurf der Tabelle tblOptionen, erweitert\" width=\"499,6607\" height=\"232,0663\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 20: Entwurf der Tabelle tblOptionen, erweitert<\/span><\/b><\/p>\n<p>Das Feld legen wir als W&auml;hrungsfeld mit Format <b>Prozentzahl <\/b>aus. Au&szlig;erdem legen wir hier ein Feld namens <b>MaximalerFamilienbeitrag <\/b>an, welches den Familienbeitrag deckeln kann &#8211; wenn also etwa vier Mitglieder einer Familie angemeldet sind, die mit den entsprechenden Rabatten 350 EUR bezahlen sollen, kann man den Betrag beispielsweise auf 300 EUR beschr&auml;nken. <\/p>\n<p>F&uuml;r die &uuml;brigen Rabatte legen wir eine Tabelle an, welche die Felder <b>RabattklasseID <\/b>als Prim&auml;rschl&uuml;sselfeld, <b>Rabattklasse <\/b>f&uuml;r die Bezeichnung und <b>Rabatt <\/b>f&uuml;r den prozentualen Rabatt enth&auml;lt.<\/p>\n<p>Wie Bild 21 zeigt, haben wir f&uuml;r den Rabatt den Datentyp <b>W&auml;hrung <\/b>festgelegt, aber f&uuml;r die Eigenschaft <b>Format <\/b>den Wert <b>Prozentzahl<\/b>. Auf diese Weise erhalten wir eine Festkommazahl und eine ausreichend gro&szlig;e Genauigkeit.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_020.png\" alt=\"Entwurf der Tabelle tblRabattklassen\" width=\"499,6607\" height=\"362,1394\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 21: Entwurf der Tabelle tblRabattklassen<\/span><\/b><\/p>\n<p>Die Rabattklasse wollen wir dem Mitglied &uuml;ber ein Fremdschl&uuml;sselfeld namens <b>RabattklasseID <\/b>in der Tabelle <b>tblMitglieder <\/b>zuweisen. Damit ist klar, dass wir in dieser Tabelle auch einen Datensatz anlegen m&uuml;ssen, der einen Rabatt von 0% auszeichnet &#8211; so k&ouml;nnen wir diesen Datensatz standardm&auml;&szlig;ig &uuml;ber das Fremdschl&uuml;sselfeld ausw&auml;hlen.<\/p>\n<p>Sie k&ouml;nnen den Familienrabatt nat&uuml;rlich auch in Form von Rabattklassen festlegen und diesen dann den Familienmitgliedern direkt zuweisen. Wir wollen uns aber der Herausforderung stellen und dies per Datenmodell abbilden, um etwa beim Ausscheiden eines Familienmitgliedes und der damit gegebenenfalls verbundenen &auml;nderung von Rabattklassen nicht immer manuell eingreifen zu m&uuml;ssen.<\/p>\n<p>F&uuml;r das Fremdschl&uuml;sselfeld <b>RabattklasseID <\/b>in der Tabelle <b>tblMitglieder <\/b>k&ouml;nnen wir, wenn Sie in der Tabelle <b>tblRabatte <\/b>als ersten Datensatz einen Eintrag mit der Bezeichnung <b>Ohne Rabatt <\/b>mit einem Rabattwert von <b>0% <\/b>eingetragen haben, den Standardwert <b>1 <\/b>f&uuml;r den entsprechenden Prim&auml;rschl&uuml;sselwert festlegen.<\/p>\n<p>Bei der Gelegenheit f&uuml;gen wir der Tabelle <b>tblMitglieder<\/b> auch gleich noch ein <b>Ja\/Nein<\/b>-Feld namens <b>Aktiv <\/b>hinzu, welches das Mitglied als aktives oder passives Mitglied markiert.<\/p>\n<h2>Vereinszugeh&ouml;rigkeiten<\/h2>\n<p>Was soll geschehen, wenn ein Mitglied in den Verein eintritt, wieder austritt und dann wieder eintritt Hier gibt es mindestens drei M&ouml;glichkeiten:<\/p>\n<ul>\n<li>Wir pflegen immer nur einen Datensatz zu einem Mitglied in der Tabelle <b>tblMitglieder<\/b> und tragen dort in zwei Feldern namens <b>Eintrittsdatum <\/b>und <b>Austrittsdatum <\/b>die angefallenen Daten ein. Wenn ein Mitglied austritt, l&ouml;schen wir es und es wird wieder neu angelegt, wenn es wieder eintritt (oder behalten den Datensatz und aktualisieren das Eintrittsdatum und leeren das Austrittsdatum, wenn ein erneuter Eintritt erfolgt).<\/li>\n<li>Wir behalten alte Datens&auml;tze zu einem Mitglied, wenn es ausgetreten ist, und legen einen neuen Datensatz an, wenn es wieder eintritt.<\/li>\n<li>Wir pflegen immer nur einen Datensatz zu einem Mitglied und erfassen die Zugeh&ouml;rigkeiten in einer weiteren Tabelle etwa namens <b>tblVereinszugehoerigkeiten<\/b>, die wir dann &uuml;ber ein Fremdschl&uuml;sselfeld mit der Tabelle <b>tblMitglieder<\/b> verkn&uuml;pfen.<\/li>\n<\/ul>\n<p>Die Entscheidung h&auml;ngt davon ab, ob man eine Historie w&uuml;nscht und auch im Nachhinein etwa die Entwicklung der Mitgliederzahlen nachvollziehen m&ouml;chte. In diesem Fall w&auml;ren die zweite und die dritte Variante angezeigt. Wenn es keine Rolle spielt, ob ein Mitglied irgendwann fr&uuml;her bereits einmal Mitglied war, kommt auch Variante eins in Frage. Wenn allerdings, wie es in manchen Vereinen &uuml;blich ist, beispielsweise Ehrungen vorgenommen werden, wenn ein Mitglied zehn, 25 oder 50 Jahre Vereinszugeh&ouml;rigkeit aufweist, w&auml;re eine konsequente Aufzeichnung der Zugeh&ouml;rigkeiten sinnvoll.<\/p>\n<p>Wie wollen redundante Daten vermeiden und w&auml;hlen f&uuml;r unsere Anwendung die dritte Variante mit der Tabelle <b>tblVereinszugehoerigkeiten<\/b>. In der Tabelle speichern wir neben dem Verweis auf das Mitglied das Eintritts- und das Austrittsdatum in Datumsfeldern (s. Bild 22).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_021.png\" alt=\"Entwurf der Tabelle tblVereinszugehoerigkeiten\" width=\"550\" height=\"129,4118\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 22: Entwurf der Tabelle tblVereinszugehoerigkeiten<\/span><\/b><\/p>\n<h2>Die Tabelle tblMitglieder<\/h2>\n<p>Damit k&ouml;nnen wir uns auch die aktuelle Version der Ta-belle <b>tblMitglieder<\/b> ansehen, die im Entwurf wie in Bild 23 aussieht. Die Tabelle enth&auml;lt die &uuml;blichen Felder f&uuml;r Anschrift, Telefon, E-Mail und so weiter sowie einige Daten, die f&uuml;r die Mitgliedschaft relevant sind.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_022.png\" alt=\"Entwurf der Tabelle tblMitglieder\" width=\"550\" height=\"356,25\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 23: Entwurf der Tabelle tblMitglieder<\/span><\/b><\/p>\n<p>Bei der Mitgliedsnummer gehen wir davon aus, dass diese nur einmalig vergeben wird, auch wenn die Person sich zwischenzeitlich vom Verein verabschiedet &#8211; deshalb f&uuml;gen wir dieses Feld auch der Tabelle <b>tblMitglieder<\/b> hinzu und nicht der Tabelle <b>tblVereinszugehoerigkeiten<\/b>.<\/p>\n<p>Bild 24 zeigt das komplette Datenmodell der Anwendung. In einem weiteren Beitrag namens <b>Vereinsverwaltung: Daten migrieren <\/b>(<b>www.access-im-unternehmen.de\/1107<\/b>) zeigen wir, wie Sie die Daten aus der importierten Excel-Tabelle in unser hier vorgestelltes Datenmodell &uuml;bertragen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1106_024.png\" alt=\"Datenmodell\" width=\"700\" height=\"402,1716\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 24: Datenmodell<\/span><\/b><\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Vereinsverwaltung_Anonymisiert.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/49B4062B-E7F6-43F7-B866-71D4B2206DF9\/aiu_1106.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Tage war es soweit: Schwiegervater, seines Zeichens zweiter Vorsitzender eines Sportvereins, druckste herum: &#8222;Die Mitgliederdatei, also &#8230; die Excel-Datei &#8211; kannst Du uns da nicht mal was Richtiges draus zaubern Also ein Programm, mit dem ich Mitglieder eingeben und auch mal ein paar Auswertungen machen kann&#8220; Na klar kann ich. Also hatte ich ein neues Projekt: Eine Excel-Tabelle mit allen relevanten Daten sollte in einer relationalen Datenbank landen, die nicht nur die Dateneingabe vereinfachte, sondern auch noch verschiedene andere Aufgaben &uuml;bernehmen sollte. Ein perfektes Beispiel f&uuml;r eine L&ouml;sung in Access im Unternehmen! Dieser Teil beschreibt, wie wir die Daten aus der Excel-Tabelle in ein frisch erstelltes Datenmodell &uuml;berf&uuml;hren.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662017,66062017,44000021],"tags":[],"class_list":["post-55001106","post","type-post","status-publish","format-standard","hentry","category-662017","category-66062017","category-Tabellen_und_Datenmodellierung"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Vereinsverwaltung: Von Excel zum Datenmodell - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vereinsverwaltung: Von Excel zum Datenmodell\" \/>\n<meta property=\"og:description\" content=\"Die Tage war es soweit: Schwiegervater, seines Zeichens zweiter Vorsitzender eines Sportvereins, druckste herum: &quot;Die Mitgliederdatei, also ... die Excel-Datei - kannst Du uns da nicht mal was Richtiges draus zaubern Also ein Programm, mit dem ich Mitglieder eingeben und auch mal ein paar Auswertungen machen kann&quot; Na klar kann ich. Also hatte ich ein neues Projekt: Eine Excel-Tabelle mit allen relevanten Daten sollte in einer relationalen Datenbank landen, die nicht nur die Dateneingabe vereinfachte, sondern auch noch verschiedene andere Aufgaben &uuml;bernehmen sollte. Ein perfektes Beispiel f&uuml;r eine L&ouml;sung in Access im Unternehmen! Dieser Teil beschreibt, wie wir die Daten aus der Excel-Tabelle in ein frisch erstelltes Datenmodell &uuml;berf&uuml;hren.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:27:25+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/e24532bc623a491aa7d829f7b5f85da3\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"22\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Vereinsverwaltung: Von Excel zum Datenmodell\",\"datePublished\":\"2020-05-13T21:27:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/\"},\"wordCount\":4463,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/e24532bc623a491aa7d829f7b5f85da3\",\"articleSection\":[\"2017\",\"6\\\/2017\",\"Tabellen und Datenmodellierung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/\",\"name\":\"Vereinsverwaltung: Von Excel zum Datenmodell - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/e24532bc623a491aa7d829f7b5f85da3\",\"datePublished\":\"2020-05-13T21:27:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/e24532bc623a491aa7d829f7b5f85da3\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/e24532bc623a491aa7d829f7b5f85da3\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vereinsverwaltung: Von Excel zum Datenmodell\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Vereinsverwaltung: Von Excel zum Datenmodell - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/","og_locale":"de_DE","og_type":"article","og_title":"Vereinsverwaltung: Von Excel zum Datenmodell","og_description":"Die Tage war es soweit: Schwiegervater, seines Zeichens zweiter Vorsitzender eines Sportvereins, druckste herum: \"Die Mitgliederdatei, also ... die Excel-Datei - kannst Du uns da nicht mal was Richtiges draus zaubern Also ein Programm, mit dem ich Mitglieder eingeben und auch mal ein paar Auswertungen machen kann\" Na klar kann ich. Also hatte ich ein neues Projekt: Eine Excel-Tabelle mit allen relevanten Daten sollte in einer relationalen Datenbank landen, die nicht nur die Dateneingabe vereinfachte, sondern auch noch verschiedene andere Aufgaben &uuml;bernehmen sollte. Ein perfektes Beispiel f&uuml;r eine L&ouml;sung in Access im Unternehmen! Dieser Teil beschreibt, wie wir die Daten aus der Excel-Tabelle in ein frisch erstelltes Datenmodell &uuml;berf&uuml;hren.","og_url":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:27:25+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/e24532bc623a491aa7d829f7b5f85da3","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"22\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Vereinsverwaltung: Von Excel zum Datenmodell","datePublished":"2020-05-13T21:27:25+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/"},"wordCount":4463,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/e24532bc623a491aa7d829f7b5f85da3","articleSection":["2017","6\/2017","Tabellen und Datenmodellierung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/","url":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/","name":"Vereinsverwaltung: Von Excel zum Datenmodell - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/e24532bc623a491aa7d829f7b5f85da3","datePublished":"2020-05-13T21:27:25+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/e24532bc623a491aa7d829f7b5f85da3","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/e24532bc623a491aa7d829f7b5f85da3"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Von_Excel_zum_Datenmodell\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Vereinsverwaltung: Von Excel zum Datenmodell"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001106","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001106"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001106\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001106"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}