Some of my thoughts.
Firstly, I think you are looking to hard at turning a particular navigation style straight into a database model. I think you should work by looking at the data more:
You need to consider how published pages and unpublished pages will work before anything else. The reason for this is knowing that if a page is edited and hence becomes unpublished would the previous published version still need to exist? ie. Does the previous content need to be displayed until someone approves the new content. Having this in mind I wold probably create a Pages table to hold basic information about each page and then a PageDetail table which would include rows representing the history and state of the page. I would use an enumeration for page state which would be something like :
Code:
public enum PageState
{
Published,
UnPublished,
Obsolete
}
I would also probably create a PageChangeLog table, where I record the datetime, userid, and page changes (ie. so I can see who edited which page).
Once I have this Page structure worked out I would look at the categorization, since categories would be relatively simply and for the most part would just need to drop a PageId into the categories table to allow a category to display a specific page.
I should add that a lot of times I build systems like this I use a Meta style engine which I create in the database. This allows me to actually let the user create, edit and delete fields, thereby allowing them to create custom forms and add entries. There are several applications that use similar techniques, which basically requires a table to hold the field datatypes, another table to hold the field definitions, and another table to hold the field values. This structure can be extended by having default values and input validation.
If you want to discuss this more than let me know as I am building a new Meta Data engine in C# and MS SQL at the moment.
Bookmarks