One of the tenents of SaaS (software as a service) is that the data must be configurable on a customer by customer basis. This is because, although each customer may sell widgets, no two customers will describe their widgets in the same way and so we have to let them define their own widgets. So, how do you do that then? Well, we use the pattern below.

Here, we define a "User" table with the details we need to record, including their expiry date (the date after which they will no longer be able to use the system). Then we create a "Widget" table to hold the information that we believe will be common to all widgets. Next, we create a "WidgetMetaData" table that allows a user to define the fields they will use to describe their own widgets. Lastly, we create a "WidgetExtension" table that that "fills in" the user defined field names for a particular widget. Simple really.