Every two or three projects I work on my client wants to make sure that their application is not tied to the underlying database. They want to have the flexibility to move from SQL Server to Oracle, or even to an open source database like MySQL.

This might seem like a noble desire, but in most cases it isn’t. IBM’s DB2, despite being clumsy, expensive, and very difficult to learn is still going strong. The same goes for Oracle (not to mention the religious fervor surrounding this DB). My point is that the underlying DB almost never changes. I say ‘almost’ because there are rare cases where the underlying DB does need to change. One of those reasons is scalability. MS Access doesn’t scale well. If the backend DB is Access and the application grows significantly then it will have to be changed. Other than that, the only reason I can think of is that a DB vendor makes an incredible offer: "We’ll upgrade all of your database servers and software for free and we’ll pay for the application upgrades just so we can tell the world that your company runs <insert your favorite DB here>". It happens.

So, with that in mind, there is no reason I can think of spend significant time and resources to build a data layer that is completely decoupled from the underlying database. If you start off using SQL Server, then you’ll be using SQL Server 5 years from now on the same project. Once the data layer architecture is complete nobody will want to go in and review those hairy SQL statements to port them over to Oracle or MySQL. It just won’t happen.

Save yourself some time, save your clients some money. Use your DB to its fullest. Take advantage of as many of the built-in performance and usability features as you can to make that application hum.