For a new project we're greenfielding using Spring, Java 8, and SQL Server 2012 we will likely have a very large (in the sense of wide, about 150 columns) table, to store contract information. ONe of the goals of the project will be to keep some audit information regarding the contract information. This historical information should also be available in the application itself, so older versions of the contract can be viewed.
If this was a smaller table (and cutting the table up into smaller pieces is something that can definitely be considered) I'd simply make a new entry in the table for the contract, or perhaps have a separate table for the historical information.
This does not seem that optimal when it comes to disk usage, however. Despite the relatively small amount of contracts we'll have (<100k), the amount of history might definitely grow in the future, depending on how the people work.
I know an alternative could be to simply store things in a key/value approach to keep the different deltas, but it somehow seems like a pain to reconstruct the contract in some event sourcing kind of way, just to show historical information.
Am I missing any good alternatives?