This week while trying to get some custom build behaviors kicking, I had a chance to poke around the TFS SQL databases. Just trying to unwind the schema makes for some pretty scary driving.
Whoever was actually working on these databases needs a refresher in their database skills. They use multiple names for the same logical key, the don't use DRI, and there is no standardization or reuse to speak of. Frankly it is a miracle the thing functions. And pretty obvious why it can be as slow as it has been known to be.
This in no way is a knock on the product. It is a huge undertaking, long overdue, and a valiant first attempt. But it has a long way to go, and recruiting some actual database talent into the TFS product group couldn't hurt.
For example, trying to figure out how to list the items in a changeset was difficult until you unspool that VersionTo and VersionFrom in a namespace are really changeset ids. Whoa! That just happened. No kidding.
Anyway, perhaps once a roadmap is fully laid out, I'll be more forgiving, but right now, it seems like something stinky and gross. But I guess it works, and beggars can't be choosers.
Wanna know how to get any other internals from TFS, I'm collecting a ton. All you have to do is ask...