Kleine Entscheidungshilfe Access vs. SQL-Server vs. mySQL Für die meisten allgemeinen Verwaltungsaufgaben werden Sie mit einer Access-Datenbank in Hinsicht auf die Größe und "Menge" an zu erwartenden Daten ausreichend versorgt sein. Wenn sich Ihre Anforderungen an Ihre Datenbank jedoch ändern, sollten Sie überlegen, ob sich der Einsatz eines wesentlich schnelleren, flexibleren und sichereren Datenbank-Systems als "Back-End" lohnen könnte. Sie könnten z.B. Ihre Access Anwendung als „Front-End“ weiter verwenden und lediglich die BackendSeite auf SQL-Server umstellen. Als Alternative steht auch mySQL zur Verfügung. Als wesentlicher Aspekt kann hier das Kostenargument gelten. MySQL ist grundsätzlich kostenlos (open-source), für die kommerzielle Nutzung fallen – wenn überhaupt - minimale Lizenzgebühren an. MySQL eignet sich besonders als Online-Datenbanksystem. Für die Steuerung können Front-End-Programme (auch Access) verwendet werden (Access allerdings nicht ohne Probleme). Zugriff und Steuerung auf eine mySQL-Datenbank wird allerdings bevorzugt – aber nicht notwendigerweise - über einen Browser vorgenommen. Die Programmierung findet über HTML/PHP, Perl, Java oder dergleichen statt. Im Gegensatz zu Access und SQL-Server ist es erforderlich, zusätzliche Steuerungs-Tools zu installieren (bsp: SQLAdministrator, Control-Center, Query-Browser, SQLYog etc.) SQL-Server Express (SSE) Seit der Version SQL-Server 2005 stellt Microsoft als Nachfolge zur MSDE (Microsoft-DatabaseEngine) die etwas abgespeckte Version SQL-Server-Express (SSE) zum download zur Verfügung. Im Gegensatz zu MSDE, die auf 2GB beschränkt war, sind in dieser Nachfolgeversion nun immerhin 4GB verfügbar. Diese Version kann überdies 1GB Arbeitsspeicher adressieren. Ähnlich wie bei mySql sollten hier weitere Tools installiert werden, da die Administration ansonsten äußerst umständlich ausfällt. Im Wesentlichen sei hier „Management Studio Express“ (ähnlich dem Enterprise-Manager) erwähnt. SQL Express erwartet außerdem die Installation von Dotnet-Framework 2.0f auf dem Server. Vermutlich als Konkurrenz zu mySql ist diese Version von Sql-Server auch als OnlineDatenbank konzipiert, kann aber zumindest gut verwendet werden, um eine Online-Datenbank offline vorzubereiten (die Online-Datenbank wird oft bei einem Provider "gemietet"). Zur "Vorbereitung" einer SQL-Server-Datenbank (oder auch mehrerer) kann auch die SQL-ServerDeveloper-Edition verwendet werden, die zwar nicht mehr kostenlos aber immer noch deutlich(!) günstiger zu erwerben ist als die Vollversion, zudem müssen hier keine weiteren Tools installiert werden wie bei SSE. Das Framework (dotnetfx.exe), die Datenbank (SQLEXPR.exe) als auch das Management Studio (SQLServer2005_SSMEE.msi) sind bei MS frei also kostenlos verfügbar. [Literatur-Empfehlung zum Thema SSE: „SQL-Server Express Edition“ von Andreas Kosch] Kleine Entscheidungshilfe Access vs. SQL-Server vs. mySQL 1/6 Migration / Import von Daten in SSE Für die Migration / Import (einspielen bzw. Übernahme) von Access-Daten stellt MS ein Tool zur Verfügung: SQL Server Migration Assistant for Access (SSMA Access) und ist zum Zeitpunkt der Erstellung dieses Berichts unter http://www.microsoft.com/downloads/details.aspx?familyid=D842F8B4-C914-4AC7-B2F3D25FFF4E24FB&displaylang=en erhältlich. Nach dem Download, wird eine Licence-Registration fällig, die aber ebenfalls bei MS erhältlich ist. Die Licence-Datei wird lokal gespeichert und beim ersten Programmstart abgefragt (und sollte anschließend nicht gelöscht werden). Wichtig bei der Migration: die Quelldaten sollten hinsichtlich der Spalten- bzw. Feldnamen den allgemeinen internationalen Standards entsprechen und keine Sonderzeichen beinhalten - auch nicht Minuszeichen und dergleichen – siehe hierzu meinen Bericht unter http://tensai.de/Seite3/Feldnamen_Empfehlungen.pdf Seit der Version Access 2007 aus Office-2007 ändert sich hinsichtlich der bisherigen Verfahren bei Access so einiges. Bei den ersten Beta-Versionen hatte ich noch den Eindruck, dass sich die ganze Office-Palette (einschließlich Excel) so allmählich entwicklerunfreundlich gestaltet, aber mittlerweile scheint sich der erste Eindruck nicht zwingend zu verdichten. Der Schwerpunkt verlagert sich jedoch recht erheblich. Zwar geht es auch weiterhin um „Datenbanken“, jetzt aber nicht mehr so begrenzt auf .MDB-Dateien (bzw. .ACCDB bei Access 2007 und 2010) mit den üblichen Verknüpfungen und Importen. Eher geht darum „multifunktional“ Daten aus unterschiedlichsten Quellen einzulinken und möglichst variabel darzustellen. Auch Autofilter, die ansonsten Excel vorbehalten waren, finden jetzt ihre Entsprechung. Die Datenbank-Erstellung im „konventionellen“ (und auch weiterhin absolut unverzichtbaren) Sinne wird in Zukunft eher auf SQL-Server(-Express) und DotNet (.Net) ausgelagert. Besonders erwähnenswert ist, dass Microsoft mit der Version 2007 für Access eine Runtime-Version zur Verfügung stellt, die kostenlos(!!) aus dem Netz geladen und ohne Aufwand installiert werden kann. Somit können Anwendungen erstellt werden, die auf dem Ausführungsrechner keine Installation von Access erfordert. Dieses Runtime-Tool war bei den Vorläufer-Versionen (also bis 2003) recht kostenaufwändig gesondert zu erwerben. Access-Datenbank im Web: Office Access 2007 enthält nur begrenzte Unterstützung für das Freigeben einer Datenbank im Web (nur die Veröffentlichung von Listen verschieben der Datenbank in Dokumentbibliotheken). In Access 2010 dagegen können Sie eine Webdatenbank erstellen (wenn Sie Zugriff auf Access Services in Microsoft SharePoint Server 2010 haben). Benutzer können die Datenbank dann in einem Webbrowserfenster verwenden. Änderungen am Entwurf erfordern jedoch Access 2010. Obacht: Einige Features für Desktopdatenbanken sind nicht auf das Web übertragbar – es können viele der gleichen Aufgaben mithilfe neuer Features ausgeführt werden (beispielsweise berechnete Felder und Datenmakros). b.w. Kleine Entscheidungshilfe Access vs. SQL-Server vs. mySQL 2/6 Hier einige Hinweise zur Entscheidungshilfe für eine eventuelle Umstellung: Datenimport / -export: o o o o SQL-Server: Bestehende Datenbestände können mit Hilfe der Import-Assistenten (DataTransfer-Service) bzw. dem Integration-Services in eine SQL-Datenbank importiert / exportiert werden SQL-Server-Express: nach einer Installation zunächst nicht verfügbar, allerdings können die oben erwähnten SSMA-Tools für Importe verwendet werden Access: Es existieren die Standard Office-Konverter und die ODBC-Schnittstelle. mySQL: Es existieren Konverter und die ODBC-Schnittstelle (ist gesondert zu installieren). Sicherungsverfahren (siehe dazu auch weiter unten unter "Datensicherheit, Performance und Weiterverwendung"): o o o o SQL-Server: Sicherungen können automatisiert (z.B zeitgesteuert) werden. SQL-Server-Express existiert das Backup-Divices-Tool und kann ebenfalls zeitgesteuert eingestellt werden Access: Sicherungen und evtl. Wiederherstellungen müssen von Hand gesteuert oder Sicherungsverfahren programmiert werden. mySQL: Sicherungen und evtl. Wiederherstellungen müssen von Hand gesteuert oder Sicherungsverfahren programmiert werden. Installation: o o o o SQL-Server: Eine Serverinstallation; Client-Tools auf den Benutzerrechnern. SQL-Server-Express: desgleichen Access: Auf jeden Rechner eine Access- oder eine Runtime-Installation. mySQL: Server- Client-Installation mit Benutzerrechten. Benutzerverwaltung: o o o o SQL-Server: es kann eine nahezu beliebige Anzahl von Benutzern für alle Datenbanken auf dem Server verwaltet werden. Die Zugriffsrechte können für jede Datenbank, jede Tabelle und auf Spaltenebene definiert werden. SQL-Server-Express: Anmeldung wird über Security-Logins bzw Security-users der jeweiligen Datenbank und der Server- und Database-Roles verwaltet Access: Es existieren die Access-Benutzer-Verwaltungs-Modalitäten für jede Datenbank einzeln. Zugriffbeschränkungen können nicht auf Spaltenebene definiert werden. mySQL: Ähnlich wie SQL-Server. Datenbestände: o o o SQL-Server: Der Datenbestand kann ohne Verlust von Geschwindigkeit ausgedehnt werden. Datenbestände können problemlos im Terabyte-Bereich verwaltet werden. SQL-Datenbanken sind fast frei skalierbar. Sie können Ihre Daten auch mit anderen Systemen nutzen, die Abfragesprache SQL ist systemübergreifend. Es können beliebig viele Datenbanken definiert werden. -SQL-Server-Express: max 4GB. Access: Eine Datenbank erfasst max. 2GB Daten (bei abnehmender Geschwindigkeit). In eine Access-Tabelle können Sie max. 2.147 Mrd. Datensätze erfassen; das ist zwar für nahezu alle Datenbanken im Verwaltungsbereich vollkommen ausreichend, wenn Sie allerdings einen bestimmten Datenbestand erreicht haben (der nicht genau zu bestimmen ist, ist abhängig von der Hardware sowie vom Netz und Netztransfer), wird Access als interpretierendes System sehr langsam, um nicht zu sagen unerträglich mySQL: .es existieren verschiedene Tabellen-Typen (MyIsam, InnoDB...). Die Datenbanken sind fast frei skalierbar. SQL entspricht mit leichten Einschränkungen der Standard-Norm. Es sind beliebig viele Datenbanken definierbar. Kleine Entscheidungshilfe Access vs. SQL-Server vs. mySQL 3/6 Ein wesentlicher Punkt ist der Datentransfer: o o o o o SQL-Server: führt die Abfrage auf dem Server aus und transferiert lediglich die selektierten Daten zumindest dann, wenn "direkt auf dem Server" programmiert werden kann, wenn also Abfragen/gespeicherte Prozeduren "in der Datenbank" abgelegt werden können. Alternativ bietet sich noch die Möglichkeit eine ODBC1-Schnittstelle für den Zugriff auf die Daten zu verwenden SQL-Server-Express: wie SQL-Server Access: Bei einer Access-Abfrage werden zum Ausführen einer Abfrage ALLE Daten über das Netz transferiert und lokal selektiert. Das kann dazu führen, dass eine Abfrage, die sich auf einen Datenbestand von z.B. 200.000 Zeilen bezieht und 5.000 selektiert, bei einer Access-Datenbank das System für längere Zeit stark belastet, während SQL-Server damit keine Probleme hat. mySQL: Bei einer Abfrage werden zum Ausführen einer Abfrage alle Daten vorselektiert. Ein weiterer wesentlicher Punkt ist die Komprimierung: o o o o SQL-Server: Die Daten liegen immer komprimiert vor. SQL-Server-Express: wie SQL-Server Access: In einer Access-Datenbank werden gelöschte Datensätze mit einem “Gelöscht”Kennzeichen geführt und erst dann physisch aus der Datenbank entfernt, wenn die Datendatei komprimiert wird (Im Menü: Datenbank-Dienstprogramme: Komprimieren und reparieren). Dieser Komprimierungsvorgang sollte regelmäßig vorgenommen werden. Das hat sich in der Version 2007 und sogar in 2010 (auch ACCDB) leider immer noch nicht geändert mySQL: Die Daten liegen grundsätzlich komprimiert vor. Bei der Verwendung von DynamicTabellen (häufige Verwendung) sollte allerdings gelegentlich von Hand komprimiert werden. Outer Joins: o o o o SQL-Server: Left-Join und Right-Join; zusätzlich Full-Join SQL-Server-Express: wie SQL-Server Access: Left-Join und Right-Join mySQL: Left-Join und Right-Join, zusätzlich Full-Join Sicherheit: o o o o SQL-Server: Alle Zugriffe werden protokolliert und können nachvollzogen werden SQL-Server-Express: Server-Logs werden protokolliert Access: keine Protokolle mySQL: Logging kann aktiviert werden, verlangsamt allerdings den DB-Betrieb. Multi-User-Fähigkeit: o o o o 1 SQL-Server: als serverbasiertes Datenbanksystem stehen alle Möglichkeiten der MultiuserFähigkeit zur Verfügung SQL-Server-Express: wie SQL-Server, es gelten eingeschränkte Spezifikationen (siehe unter msdn-online.de) Access: Multiuserfähigkeit u.a. mit der Einschränkung des DatentransferGeschwindigkeitsproblems. mySQL: Volle Multiuserfähig; spezielle Web-Tauglichkeit ODBC: Open-database-connectivity (wird über die Systemsteuerung lokal vorgeommen) Kleine Entscheidungshilfe Access vs. SQL-Server vs. mySQL 4/6 Letzter Zugriff: o o o o SQL-Server: kann mittels timestamp-Spalten (millisekundengenaue Erfassung des letzten Zugriffs) gesteuert werden SQL-Server-Express: timestamp-Spalte wie SQL-Server Access: keine Möglichkeit vorgesehen, kann aber über Modul-Funktionen abgefragt bzw. ausgelesen werden mySQL: timestamp-Spalten wie SQL-Server. Wartung / Aufwand /Schulung: o o o o SQL-Server: Backups, Importe, Exporte und dergleichen sind einstellbar; Fachpersonal muss ggf. geschult oder akquiriert werden. SQL-Server-Express: Backups sind einstellbar, es existiert aber kein DTS (data-transferservice) bzw. Integration-Services, Fachpersonal sollte geschult oder akquiriert werden Access: Kann ggf. auch von Office-Personal bedient werden. Aber Obacht: Die Erstellung einer Datenbank erfordert Erfahrung (und Weitsicht) und wird nicht einfach aus dem Ärmel geschüttelt. Häufig treten tief greifende Probleme erst später in Erscheinung, angefangen bei der Vergabe von Spaltennamen (bzw. Feldnamen) und noch lange nicht aufgehört bei der Normalisierung. mySQL: Fachpersonal insbesondere für die Zugriffssteuerung und Programmierung erforderlich. Mein Fazit zum Thema Access: Über Access wird viel herumgeunkt. Was die Back-End-Verwendung betrifft kann ich die Ansicht grundsätzlich teilen, was die Front-End-seitige Verwendung betrifft eher nicht. Die Back-End-Verwendung: Man stelle sich nur vor: Eine Daten-Back-End-Datei kann im Explorer mit der Entfernten-Taste einfach gelöscht werden!! Der datentechnische Super-GAU! Eine SQLServer-Datenbank löscht man nicht einfach mit der Entf-Taste, zumal in der Regel nur legitimiertes Personal an die Entwicklungsumgebung des SQL-Servers herankommt. Andererseits: gerade kürzlich habe ich wieder einen Fall erlebt, bei dem ein Mitarbeiter einer großen norddeutschen Bank mit meiner Unterstützung eine Datenbank zu einem bestimmten ControllingThema erstellt hat und zwar mit einer MDB als Frontend UND als Backend. Innerhalb kürzester Zeit (einige Wochen) würde offenbar, dass er hier etwas "Wertvolles" (ein Tool mit hoher Aussagerelevanz) entwickelt und die Datenbank wurde (schon aus den schnell erkanten Sicherheitsgründen) in eine sichere Umgebung überführt. Hätte der Mitarbeiter erst die IT-Abteilung mit dieser Problematik beauftragt, wäre daraus wohl in den nächsten Jahren nichts geworden. Also: Access ist ein hervorragendes (und relativ einfaches) Programm zu Problemverdeutlichung. Es besteht die Möglichkeit eine Datenbank ohne allzu großen Aufwand "erstmal" zu erstellen (was nicht darüber hinwegtäuschen soll, dass – wie weiter oben bereits erwähnt – jede Datenbank – auch eine MDB – mit Weitsicht und vertiefender Kenntnis erstellt werden muss). Zur Front-End-Verwendung: Wie erwähnt (siehe hierzu auch weiter unten) kann Access auch als Front-End-Programm "relativ" einfach programmiert werden (vorzugsweise unter Anbindung eines "vernünftigen" Back-End-Systems). Jetzt kommt es natürlich noch darauf zu definieren, wie DAUsicher die Anwendung sein soll. Im Regefall sollte das selbstverständlich sein. Hier sind verschiedene Einstellungen vorzunehmen wie z.B. die Vermeidung eine Front-End-MDB einfach mit gedrückt gehaltener Shift-Taste einfach im Entwicklungsmodus zu öffnen und dergleichen. Also: Access als Front-End: JA; als Back-End - auf Dauer -: NEIN Datensicherheit, Performance und Weiterverwendung Eine Datensicherung kann in Access leider nicht automatisiert eingestellt werden, da es sich bei MDB- bzw. ACCDB-Dateien lediglich um komplexere Dateien handelt, aber nicht um einen Datenbankserver. Eine Datensicherung muss daher leider von Hand durchgeführt werden, oder über einen Laufwerk-Sicherungslauf vorgenommen werden, was z.B. mit dem Laufwerk V: (auf dem eine Backend-MDB- oder ACCDB-Datei aufgespielt sein könnte) eingestellt ist. Eine deutlich bessere Möglichkeit, relevante Daten zu führen wäre es, die Daten (schon Kleine Entscheidungshilfe Access vs. SQL-Server vs. mySQL 5/6 aufgrund ihrer Relevanz) in einem SQL-Server zu überführen und die Access-Frontend-Datei z.B. mit einer ODBC-Schnittstelle an diese Datenbank anzubinden. Somit würden sich folgenden Vorteile ergeben: 1. Datensicherheit: Die Zugriff-Legitimierung auf die Daten kann über die Benutzersteuerung des SQL-Server eingestellt werden, z.B. mittels der Windows-Autenzifizierung 2. Datensicherung: Ein SQL-Server ist hinsichtlich der Datensicherung einstellbar und wird von Datenbankadministratoren vor Ort verwaltet 3. Komprimierungsverlust: SQL-Server speichert die Daten stets komprimiert, eine händische Komprimierung entfällt 4. Daten-"Mengen" und Performance: Für Access-Dateien gilt eine begrenzte Dateigröße, die zwar mit "üblichen" Verwaltungs-Daten nicht so schnell erreicht werden, aber je größer die Datei, desto geringer die Performance bzw. desto langsamer der Zugriff und Datentransfer. SQL-Server-Datenbanken sind frei skalierbar, Performance-Probleme sind nicht zu erwarten 5. Übergreifende Verwendung der Daten: Die Daten verfügen ggf. über die Relevanz langfristig auch mit anderen Datenbanken in Verbindung gebracht und ausgewertet werden zu können. Davon ausgehend, dass auf einem Server auch andre Daten abgelegt werden, ist eine Verknüpfung dieser Daten technische relativ einfach zu erreichen. 6. Zukunftsgerichtete Verwendung: Während sich MDB- bzw. ACCDB-Dateien als Datenbestandsführung in irgend absehbarer technisch erledigen dürften, kann davon ausgegangen werden, dass SQL-Server-Daten(banken) zukunftsfähig und für eine eventuelle Umstellung auf ein anderes Frontend geeignet sind. Auch z.B. ein browsergesteuerter Zugriff (Stichwort "Intranet") ist schnell einzurichten. 7. Weiternutzung eines Access-Frontend bei Umstellung einer MBD bzw. ACCDBDatendatei: Die Datenbank kann wie gewohnt weiterverwendet werden. Es sind lediglich folgende Umprogrammierungen vorzunehmen: a. ggf. Anpassung der Feldnamen an die Richtlinien von SQL-Server b. Umwandeln der Backend-Datei in eine SQL-Server-Datenbank - dafür gibt es Integration-Service-Tools mit denen der Vorgang automatisiert werden kann – bedenken Sie aber bitte, dass es in den allermeisten Fällen geradezu zwingend ist, in jeder Tabelle eine TimeStamp-Spalte mit aufzunehmen! c. Anpassen eventuell geänderter Felder/Spalten in den Steuerungsformularen/Abfragen/Berichten/Codes d. Anpassen der Abfragen in Hinsicht auf boolsche Felder Hinweis zu den boolschen Feldern: SQL-Server-Datentabellen verwenden im Gegensatz zu Access Ja/Nein-Feldern drei Zustände anstatt zwei: true, false und null das bedeutet, dass eine Abfrage (query) mitunter derart angepasst werden muss, dass es in den Kriterien heisst "…WHERE boolschesFeld = False or boolschesFeld IS NULL" e. Anpassung des Codes in Hinsicht auf die Datenzugriffe (also die Recordsets und die OpenRecordset-Parameter, insbesondere der Parameter bzw die Konstante dbSeeChanges) f. Erstellung einer lokalen ODBC-Verknüpfung auf allen Rechnern, auf denen die Datenbank genutzt werden soll - es sei denn die ganze Geschichte läuft über eine Citrix-Umgebung, hier gelten etwas andere Regeln: Die ODBC-Verknüpfung wird hier in der Regel im Profil angelegt. g. Erstellung einer ODBC-Autoverknüpfung beim Start der Datenbank (Programmierung einer "Autostart"-Funktion, die den Link bzw. Connect zur Datenbank untersucht bzw. überprüft und bei Erfolg anlinkt) h. Die Benutzer müssten in der SQL-Server Benutzertabelle geführt werden Kleine Entscheidungshilfe Access vs. SQL-Server vs. mySQL 6/6