2009-07-29 4 views
2

Ich arbeite an einer Business-App (asp.net). Im Moment benutze ich SQL Server. Aber ich plane, zumindest mysql und postgresql auf der Straße zu unterstützen. Was sind die Probleme, die ich berücksichtigen sollte, um zukünftige Kopfschmerzen zu vermeiden? Vor allem über Datentypen (Spaltentypen). Z.B. Ich denke, BIT-Spalte wird nicht auf einigen dbs unterstützt, also verwende ich Tinyint?Datenbank Portabilität (SQL Server zu MySQL, PostgreSQL)

Ich verwende meistens plain sql (kein Entity Framework oder linq, etc) und versuche es so einfach wie möglich zu halten. Ich verwende keine Dinge wie Trigger usw. Ich verwende gespeicherte Prozeduren, aber sie können mit Plain SQL ersetzt werden, wenn ich muss.

Antwort

1

Ihre einzige Hoffnung besteht darin, den Datenzugriff in eine geeignete Datenzugriffsebene zu unterteilen, wie Remus Rusanu vorschlägt. Die Datenzugriffsebene kann eine konsistente Schnittstelle zum Rest des Codes aufweisen und für jede andere DB-Plattform für andere Versionen geändert werden. Halten Sie die SQL-Standard wird helfen, aber es ist nicht wirklich möglich, einen Körper von SQL-Code zu schreiben und es überall funktionieren (der SQL-Standard ist nicht so gut implementiert.)

0

Stellen Sie sicher, dass Sie alle Ihre Client-Code mit dem Abstract IDbConnection, IDbCommand, IDataReader anstelle des konkreten schreiben. Sie müssen außerdem Ihre SQL-Anweisungen ständig überprüfen, um sicherzustellen, dass Sie nur kompatible Syntax verwenden.

können Sie auch versuchen, über die Verbindungs ​​OdbcConnection/OdbcCommand Komponenten und verwenden generische ODBC-Syntax und generische ODBC-Datentypen (dh. Die {fn SUBSTRING(...)} Sachen, aka. the ODBC Escaped Syntax).

Als Alternative bevorzuge ich, den Datenzugriff zu isolieren und spezifische DAL-Klassen für jedes Backend zu erstellen. Ich benutze XML und XSLT, um den DAL-Code zu generieren. Ähnlich wie this the technique of integrating XSLT code generation von meinem Blog, aber mit XSLTs speziell für jeden Back-End-spezifischen Code ausgerichtet.

1

Betrachten (mit einigen Kosten in Bezug auf das Lernen Kurve) die Annahme eines Domänenmodells und einer Datenzugriffsschicht basierend auf einem OR/M wie NHibernate (https://www.hibernate.org/343.html)