I see 2 questions: what tiering and layering to use, and what technology.
tiering: I have two definition issues:
- When you say "tier", do you mean physical layer? To me, a tier is a physical thing, i.e., a server (or set of servers), but sometimes other people use the same term for logical layers.
- The data access layer is a software layer that you write in .NET, not the actual database (which you'll be running on Oracle/Linux).
In general, you have logical layers which you distribute over tiers. A way of distributing layers over tiers (and the one you are shooting for if I am reading your question correctly):
- browser: runs your UI
- web server: runs the presentation, business and data access layer
- database server: runs the storage "layer"
Communication: 1 <> 2: HTTP, 2 <> 3: native database format.
Technology: NHibernate is a good idea, but can be a bit challenging if you are new to the world of O/RM. If you do go for NH, check out the Fluent NHibernate effort; this lets you specify mappings between your entities and database tables in C# instead of using XML. If you find NHibernate a bit daunting to dive into, look at standard Microsoft solutions such as Entity Framework. The current version has some issues, but for simple systems those might not be to big a deal.
Have you considered using ASP.NET MVC? If so, S#arp architecture is a nice starting point (both for MVC and for NHibernate). Another suggestion is to look at CSLA, also an open source architecture. CSLA has not been designed with testability or separation of concerns in mind, but might be easier to grok.