Gibt es einen Nachteil bei der Verwendung von Access als Datenbank?

8

Ich habe eine Anwendung geerbt, die Daten in mehreren Tabellen in Microsoft Access speichert. Die Access-Datenbank wird nur zur Speicherung verwendet, die gesamte Datenverarbeitung wird von der App (VB.net) übernommen.

Ist das eine gute Praxis? Ich muss eine ähnliche App von Grund auf neu erstellen und bin mir nicht sicher, was "normale" Praxis ist.

Ich habe versucht, die Frage in verschiedenen Formaten zu googeln und zahlreiche Ergebnisse (einschließlich vieler in diesem Forum) durchgesehen, aber alle Fragen scheinen sich darauf zu beziehen, wo Sie in Access programmieren, anstatt sie einfach zur Datenspeicherung zu verwenden.

Ich denke, ich könnte genauer sein und sagen, SQL Server Express oder ähnliches wäre eine bessere Option, und wenn ja, warum?

Wenn Sie diesen Beitrag aufgrund einer ähnlichen Frage lesen, lesen Sie den folgenden Link von @DanielB - /programming/694921/ms-access-mdb-concurrency

OSKM
quelle
2
Das Teilen Ihrer Forschung hilft allen. Sagen Sie uns, was Sie versucht haben und warum es Ihren Anforderungen nicht entsprach. Dies zeigt, dass Sie sich die Zeit genommen haben, um sich selbst zu helfen, es erspart uns, offensichtliche Antworten zu wiederholen, und vor allem hilft es Ihnen, eine spezifischere und relevantere Antwort zu erhalten. Siehe auch Fragen
Mücke
1
@gnat Ich vertraue darauf, dass das oben hinzugefügte Detail weitere Abstimmungen verhindert. Um klar zu sein, ob mich jemand mit einer Antwort verknüpfen kann, die die Frage wirklich beantwortet, werde ich mich freuen, da ich mehrere Stunden damit verbracht habe, diese zu finden, bevor ich auf die Frage zurückgegriffen habe . (Ich weiß, ich hätte das ursprünglich oben sagen sollen, aber ich vergesse, dass nicht alle Fragesteller in diesem Forum die Notwendigkeit von Recherchen in Anspruch nehmen, bevor sie um Selbstverständlichkeit bitten. Einige scheinen zu glauben, dass es sich um eine Hilfedatei handelt!?!)
OSKM
MS Access vs. SQL Server Express: siehe hier stackoverflow.com/questions/5704654/… Sie können jedoch auch die SQL Server Compact Edition in Betracht ziehen, die Access viel ähnlicher ist als SS Express.
Doc Brown

Antworten:

8

MSAccess-Datenbanken werden normalerweise aus mehreren Gründen nicht verwendet. In der Vergangenheit waren sie schuppig und akzeptierten nicht mehrere Verbindungen gleichzeitig. Wenn die MSAccess-Datenbank verwendet wird, wird eine Sperrdatei (ldb) erstellt. Wenn diese Sperrdatei vorhanden ist, kann niemand auf die Datenbank zugreifen. Ich stellte fest, dass sich die Leistung von MSAccess nach einer einmaligen Anwendung nach etwa 50.000 Zeilen erheblich verschlechtern würde. Dies ist jetzt wahrscheinlich besser, aber es wurde sicherlich nicht für größere Anwendungen optimiert.

Typischer ist die Verwendung eines robusteren Datenbanksystems wie Postgres, MySQL oder MSSQL. Für Einzelverbindungsdatenbanken habe ich Derby (mit Java) verwendet.

Was VB betrifft, werden Sie keine professionellen Lösungen finden, die VB als Client-Software für eine Datenbank verwenden. Nun, vielleicht werden einige Lösungen verkauft, aber ich persönlich würde sie vermeiden.

Normalerweise erfolgt Ihre Verarbeitung in einer Sprache wie C #, C ++, Java, Perl, Python oder anderen gängigen Sprachen. Bibliotheken werden verwendet, um eine Verbindung zur Datenbank herzustellen, die von der Sprache getrennt ist. Einige Lösungen verwenden SQL zum Abfragen und Empfangen von Daten, und andere Lösungen verwenden eine Persistenzbibliothek, um Objekte aus den Daten zu erstellen (dies wird immer häufiger).

Was die besten Praktiken angeht, habe ich es immer als am besten empfunden, konsistent zu sein. Wenn Sie ein Geschäft mit vier Personen haben, die MSAccess und VisualBasic verstehen, ist es sehr sinnvoll, dies auf diese Weise fortzusetzen. Wenn es im Unternehmen ein Ziel gibt, sich aufgrund von Fehlern in der Vergangenheit davon zu entfernen, können Sie VB weiterhin verwenden und zu einer anderen Datenbank wechseln. Schauen Sie sich das Verknüpfen von Tabellen in MSAccess an - Ich habe eine VB-Anwendung in einer MSSQL-Datenbank verwendet, indem ich die MSSQL-Tabellen mit einer MSAccess-Datenbank verknüpft habe. Der VB kannte den Unterschied zwischen einer naiven MSAccess-Tabelle und einer verknüpften Tabelle auf einem anderen Server nicht. Die VB-Lösung war immer noch schuppig, funktionierte jedoch mit größeren Datensätzen viel besser.

Hoffe das hilft!

Kieveli
quelle
Vielen Dank für die Antwort. Mein einziges Problem dabei ist "Wenn die MSAccess-Datenbank verwendet wird, wird eine Sperrdatei erstellt (ldb). Wenn diese Sperrdatei vorhanden ist, kann niemand auf die Datenbank zugreifen" für die geerbte Anwendung, die sie verwenden haben 4 gleichzeitige Benutzer (App auf lokaler Computer-Datenbank auf freigegebenem Laufwerk) und keine Probleme mit dem Sperren. Nützlicher Kommentar zu den Zeilen-Nr. Und ich werde jetzt Ihre anderen Vorschläge recherchieren.
OSKM
2
@OSKM Ich glaube, die ldb-Datei wird verwendet, wenn ein Schreibvorgang ausgeführt wird (zur Verdeutlichung - sie wird ständig verwendet, sperrt jedoch normalerweise nur Benutzer, wenn ein Schreibvorgang ausgeführt wird). Diese Frage zu SO zur Parallelität von MS Access (MDB) wird ausführlicher behandelt. Im Allgemeinen kann das Modell "Dateifreigabe über Netzwerk" funktionieren, es gibt jedoch viele Probleme, da die Anzahl der Benutzer skaliert.
Daniel B
5
-1, Sie sollten wirklich die falschen Fakten über MS Access aus Ihrer Antwort löschen, wie "unterstützt jeweils nur einen Benutzer" oder "langsamer werden nach> 50.000 Zeilen", diese Dinge sind einfach falsch. Der Vorschlag einer vollständigen Client-Server-Datenbank als Alternative mit vollem Verwaltungsaufwand ist meiner Meinung nach kein guter Vorschlag. Access ist ein gutes Werkzeug, wenn Sie wissen, wofür es gut ist und wofür nicht.
Doc Brown
6
Ich bevorzuge C #, aber VB ist in Ordnung, wenn sich jemand damit wohl fühlt. Sie haben Zugriff auf genau dieselben Bibliotheken wie C # und mehr oder weniger dieselben Programmierkonzepte wie C #, auch wenn die Grammatik- und Sprachkonzepte sehr unterschiedlich sind. Microsoft sagte, dass künftig neue Sprachfunktionen in beiden Sprachen parallel eingeführt werden.
Olivier Jacot-Descombes
2
-1 für den Kommentar zu VB. VB.NET ist genauso funktional wie C #, obwohl die Syntax ärgerlicher ist. Ich habe für eine Entwicklungsfirma gearbeitet, die ausschließlich VB.NET mit einem MSSQL-Backend verwendete.
Bobson
4

Ich habe in der Vergangenheit in einem großen Unternehmen einige Erfahrungen mit diesem Thema gesammelt.

Mit zunehmender Benutzerbasis traten Sicherheits- und Leistungsprobleme auf, da die Access-Dateien, in denen sich die Daten befanden, in einem freigegebenen Netzwerkordner gespeichert werden mussten und alle Benutzer W / R-Zugriff darauf hatten.

Dies ist nicht theoretisch, sondern eine reale Erfahrung. Access-Datenbanken lassen sich nicht gut auf Dutzende gleichzeitiger Benutzer skalieren , geschweige denn auf ein paar Hundert geografisch verteilte Benutzer.

Mit kostenlosen und guten Datenbanksystemen wie PostgreSQL gibt es kaum einen Grund, sich für Access zu entscheiden, außer den folgenden: Mangel an technischem Know-how.

Tulains Córdova
quelle
2

Persönlich, wenn Sie in der Lage sind, sich vom Zugang zu entfernen, habe ich Kunden gehabt, die wirklich gelitten haben, weil sie einfach nicht "in die Kugel beißen" konnten oder wollten.

Wie Kieveli erwähnte, sind Access-Datenbanken beim Speichern großer Datenmengen schrecklich. Denken Sie daran, dass Anwendungen immer so konzipiert sein sollten, dass sie dem Endbenutzer zugute kommen. Stellen Sie sich vor, Sie haben ein Büro voller Leute, die ein schrecklich langsames System haben, das jede Woche Stunden ihrer Zeit verschwendet?

Aus persönlicher Erfahrung ist das Verschieben einer Zugriffsdatenbank auf SQL Server nicht so schmerzhaft, vorausgesetzt, Sie planen richtig. Die Frage ist, ob Sie über die technischen Fähigkeiten verfügen, um auf etwas wie vb.net usw. umzusteigen.

Mrk Fldig
quelle
Der Zugriff auf -> SQL ist wirklich ziemlich einfach mit ein paar Tutorials
TruthOf42
1

Zugriffsdatenbanken lassen sich nicht gut skalieren, sind jedoch einfach zu handhaben und zu verteilen. Wenn Sie einen Object Relational Mapper (O / R-Mapper) verwenden, der verschiedene Datenbanktypen als Schnittstelle zu Ihrer Datenbank unterstützt, ist Ihre Anwendung wesentlich weniger von einem bestimmten Datenbanktyp abhängig. Auf diese Weise können Sie mit Access beginnen und später zu einer anderen Datenbank wechseln.

Ich habe dies einmal gemacht und ein Projekt mit Access und einem C # -Frontend gestartet, da Datenbanken mit Access sehr einfach eingerichtet und entwickelt werden können. Später bin ich zu einer Oracle-Datenbank gewechselt, weil mein Kunde eine Oracle-Datenbank hat. In meiner Bewerbung waren nur wenige Änderungen erforderlich.

Olivier Jacot-Descombes
quelle
0

Jet-SQL ist schrecklich dokumentiert. Das allein ist ein Grund für mich, mich von Access fernzuhalten.

/programming/11265817/where-can-i-find-a-complete-reference-for-microsoft-access-sql

T-SQL (SQL Server) hingegen ist viel flexibler und Sie finden unzählige Dokumentationen, Blogs und Experten, die Ihnen helfen können.

Natürlich ist Access eine Desktop-Datenbank, während SQL Server eine vollständige Client-Server-Datenbank ist.

Es gibt einige andere Desktop-Datenbanken (ich habe Advantage Database Server verwendet, aber das ist auch ein Nischenprodukt).

Jens Mühlenhoff
quelle