2009-12-22 16 views
6

Frage: Wir haben ein Projekt für einen Kunden gestartet, das beinhaltet, was normalerweise mit einer Datenbank geschieht.XML vs. SQlite vs. Access

Der Kunde möchte jedoch keine Datenbank installiert, da es nur eine kleine Anwendung ist. Wir beabsichtigen jedoch, den Code für ein größeres Projekt wiederzuverwenden, das eine Datenbank verwenden wird.

Das Problem ist, dass der Code auf der Serverseite anders sein wird, wenn ich XML oder SQlite oder Access verwende.

Ich tendiere zu SQlite, aber ich weiß es nicht. Wäre das Hinzufügen der Datenbank in einer MS-Access-Datei eine bessere Lösung? Wenn ich es in eine Access-Datenbank legen würde, benötigt der Kunde MS-Access installiert oder nur das MSFT MDAC? Wenn ich die Access DB verwende, läuft das auch unter Linux mit Mono, oder gibt es keinen MDAC Ersatz?

+0

Ich hoffe, Sie beabsichtigen, den Kunden für all die zusätzliche Arbeit berechnen, die Sie entstehen ... und er weiß, es ist, weil er keine Datenbank will. –

Antwort

9

Ich würde in Betracht ziehen, NHibernate zu verwenden, Sie können es mit SQLite verbinden, aber später auf eine vollständige Datenbank später aktualisieren, ohne viel Code ändern zu müssen. Wenn Sie nicht daran interessiert sind, würde ich SQLite direkt über XML-Dateien verwenden.

+1

+1 für SQLite. Außerdem müssen Sie kein ORM für eine korrekte 3-Tier-Implementierung verwenden. Stellen Sie nur sicher, dass Ihre DAL einfach ausgetauscht werden kann (z. B. über eine Schnittstelle) und dass keine DAL-Logik in Ihrem BLL vorhanden ist (natürlich Präsentation). – synhershko

+0

+1 für NHibernate. Sie brauchen * kein * ORM, aber es macht es leichter. –

3

Ich würde SQLite über Access verwenden - für SQLite müssen Sie nur die DLLs versenden, für Access benötigen Sie ein Installationsprogramm (obwohl ich denke, dass es in neueren Versionen von Windows eingebaut ist). Auch SQLite ist eine bessere DB.

Oder Sie könnten natürlich den Data Stoage-Mechanismus mit dem Repository-Muster oder ähnlichem abstrahieren? Wenn Sie die Daten in einer Datei speichern möchten, laden Sie sie und stellen Sie sie mit Linq-To-Objects aus Ihrem Repository bereit. Später können Sie sie einfach durch Linq-to-SQL ersetzen, ohne den Client-Code zu ändern .

+0

Ich habe bereits ein Installationsprogramm für das Projekt, und ich denke, eine Abhängigkeit zum Access MDAC wäre kein großes Problem. –

+1

Trotzdem würde ich für SQLite gehen; zu oft mit Access gebrannt. Auch wenn es ein kleines Projekt wie Sie ist, haben Sie vielleicht nichts zu verlieren. Wenn Sie den Code in einem größeren Projekt verwenden, würde ich vorschlagen, dass sich der Overhead der Repository-Schicht lohnt. – Grokys

4

Sie müssen Access nicht installieren, um die Jet-Engine zu verwenden. Jet wird mit allen neueren Versionen von Windows installiert, soweit ich mich erinnere. Sie können Jet (Access) with Linux verwenden. Jet benötigt im Vergleich zu den Alternativen, einschließlich SQLite, nur sehr wenig Datenbankmanagement.

1

Alle neueren Windows-Versionen bis hin zu Windows 7 wurden mit einer Kopie von JET (der MS-Access-Daten-Engine) ausgeliefert. Also brauchen Sie weder mdac noch ms-access.

Sie können sogar ein Windows-Skript in eine saubere Windows-Box schreiben, ohne dass eine Software installiert ist. Sie können also Daten aus einer mdb-Datei (ms-access) lesen.

So ist das Problem hier nicht zu installieren, da "JET" (die Datenbank-Engine, die MS-Access verwendet) mit Windows sowieso ausgeliefert wird.

Ich denke, die einzige Ausnahme oder Überlegung hier ist, planen Sie an 64-Bit-Versionen des Betriebssystems zu arbeiten und In-Process-64-Bit-Anwendungen?

Es gibt eine 64-Bit-Version von ms-access für office 2010, und soweit ich weiß, wird es auch einen separaten Download für die Installation der JET (jetzt ACE) Engine auf 64 Boxen geben.

Ich plane, nur auf 32-Bit-Maschinen zu arbeiten (oder 32-Bit-Editionen Ihrer Software auf einer 64-Bit-Box zu verwenden), dann brauchen Sie weder ms-access, noch müssen Sie irgendetwas installieren, um mdb zu lesen und zu benutzen. ms-Zugriffsdateien).

Da JET mit allen aktuellen Windows-Versionen ausgeliefert wird, basieren Ihre Entscheidungen nicht auf der Installation von JET (Sie müssen nicht), Ihre Entscheidungen werden andere Probleme und wenn JET Ihre Anforderungen erfüllt.

+1

Ich entwickle auf einer 64 Bit Hasta-La-Vista Maschine. Als ich 64 Bit Office 2010 installierte, musste ich MDAC installieren, es funktionierte nicht aus der Box. Vielleicht, weil ich Office 2007 deinstalliert habe, vielleicht weil es ein 64-Bit-Rechner ist oder weil der vorinstallierte JET/ACE veraltet ist. Also ich denke, es sollte im Installer enthalten sein. –

+0

Die Version von Jet, die mit Windows ausgeliefert wird, ist 32-Bit-Jet. Daher müssen Sie für i386 kompilieren, da die 32-Bit-Bibliotheken nicht in einer reinen 64-Bit-Programmdatei verwendet werden können. Das Installieren von A2010 oder das Deinstallieren von A2007 (oder das Installieren/Deinstallieren einer beliebigen Version von Access) hat keinerlei Auswirkungen auf Jet, da es sich um eine Betriebssystemkomponente handelt, die nicht entfernt werden kann. –

2

Sie haben möglicherweise Probleme mit sqlite in Umgebungen mit mittlerem Vertrauen (z. B. bei Shared Hosting). Wenn Sie für andere Lösungen geöffnet sind, können Sie versuchen, VistaDB zu versuchen. Es wird von allen wichtigen Orm (Nhibernate, OpenAccess, Entityspaces, Unterschall und viele mehr ..) unterstützt.

+0

Ich werde keine Windows-only-Lösung verwenden. Schlimm genug, wenn meine Kollegen es tun. –

+3

Ich bin mir nicht sicher, aber ich denke, VistaDB kann auf Mono laufen. – elpipo

+0

Jet ist eine Nur-Windows-Lösung, also möchten Sie es aus Ihrer ursprünglichen Frage heraus bearbeiten? –