About 7 years ago, at an e-tailers, I learned the value of middle tier architecture. For a bet with a Yank I removed CommerceServer and SiteServer and replaced the commerce engine of a major etailer with a single stored procedure, (plus one cleanup procedure - so two then.) It ran for about 18 months, and apart from no-one being able to understand it's set based design, and a bit of locking at Christmas, it ran really well.
In order to solve the locking, I thought of moving the content, onto a series of replicated servers, behind a load balancer, each Asp page then opening two connections at page elaboration, one for read only stuff, (eg pricing, stock, descriptions) and the other for the read write stuff (eg basket and account.) This stopped the locking happening, but it didn't "solve" it perse. I learned about middle tier architecture to ultimately sort this.
It turned out though that this "readonly servers behind a load balancer" is infinitely scaleable, and with SQL 2008, they've introduced it too, though they do it with a SAN for BI, whereas my solution does it in any kind of fashion using multiple copies of the data.
This is ironic, because there's a "consultancy" of "architects" aka middle tier only developers, in the old place right now, explaining in gravelly toned voices to senior management over lunch about how "you can't put business logic in a database." Well, you can, as microsoft has proscribed.
The fact that this solution in its native format is no more than an infinitely scaleable, multi view, self updating cache of the data core, seems to have been missed. Don't you just love consultancies?
The real pity is that I was interviewed by a friend in his flat a year later for a titannic job, and the interview was full of loaded questions about "What would you do if someone was wrong, and they were insistent they weren't?" Since I knew he was talking about this project, and I knew I wasn't wrong, I ignored the question. Good to know I've been vindicated, but I was sad at the time, because I didn't get the job.
Anyway, whilst I hate Vista and all its gui nonsense, & change for change's sake rubbish, I think SQL Server is an excellent product, and I'm glad they steal other people's ideas, assess them, and put the ones that work into future products.
It's so much better in my view than having hundreds of different groups of developers all developing vastly different concepts around the world, and then deciding it's someone else's problem to integrate them.
It's also got native Linq support, which means over time, that all the graddies with only middle tier abilities will see the advantages of balancing the workload again. This is good for microsoft, because it means their architects will deliver a bigger percentage of successful projects than those where everything's done in XML because it's new, and everything's done in hibernate because everyone else does it.
I like both these technologies, but I'll be so glad when people realise hibernate isn't the be all and end all of software engineering, like they have with XML.
There are nevertheless some things I'd do different in sql 2008.
I'd allow reverse sql, a la Linq, so intellisense really worked.
I'd also have the ability to update two tables at once in a join, if one of them's a datatable, (non deterministically would be ok,) which would be drastically more powerful than the Merge statement.
I'd also acknowledge that SQL Server's not a pure relational product, and develop the ability to do ordered updates. Yes I know this can be done with cursors, but have you tried to outperform the merge statement with transact? You can't. Or at least I can't (I've got within 10% on occasion,) and I like to think I'm pretty useful at this kind of thing.
And I'd extend their mirroring even further, to have point and click readononly copies as above, with merge replicated tables using modular arithmetic to allow simple insert/updates based on the function parameters mechanism used by Partitioned Views to allow write/deletes to be parallel replicated with the touch of a button too.
I'd have a wizard which auto partitioned a huge single database, to a series of different servers, to allow massive parallel non relational but still representable by Linq query, for reasons that I won't go into, but it's just a little project I'm working on. Sort of a customistable DataMart generator, which did it via functions so it could handle additions. Yes I know OLAP handles incremental dimensions, but I don't think SQL, or OLAP are complete solutions for anything. I think they're merely subsets of a Unified query.
But on the whole, it's super.