Every year we have new people joining our ranks as database professionals. Many of these new people use systems at the places which they already work as the source of their learning when it comes to database design and data modeling. However this isn’t always the best idea unless the systems which they are referencing have been properly designed.
One system which I urge new people to the field to totally ignore as a reference source is SharePoint. Microsoft’s SharePoint has what we in the database field call a “really screwed up database design”. The SharePoint database design is so screwed up that the SQL Server Product team has had to add features to the SQL Server product so that the SharePoint team can use them in future versions of the SharePoint product.
Now I understand why people want to model their applications on the SharePoint database. It’s a very scalable application that can handle pretty much anything which you throw at it. However as a model for other applications it pretty much sucks. Being that scalable comes with a performance hit, as the database gets larger that performance hit just gets larger and larger. This is just one of the reasons that it is recommended that the SharePoint content databases be limited in size to 100 Gigs for SharePoint (MOSS) 2007 and 200 Gigs for SharePoint 2010.
The problem then becomes how are these new people supposed to know what a crappy database design looks like so that they know not to model other databases like it? That falls to the people that they work with to make sure that they have good solid systems to learn how to build applications properly. When they work in a small shop as the only developer there isn’t anyone to learn from. That’s where blogs and websites from known people in the field become key to learning how to do things correctly.
But what ever you do, don’t use SharePoint as the source of your database design knowledge. It is about the worst possible example you can use. I understand that Forefront Identity Manager is actually worse, but I haven’t dug into a FIM database yet. I will be looking into a FIM system that was setup so that I can see just how bad that database design is.