I’ve been considering how best to re-implement the database structures so as to facilitate the new features I’m thinking of for Blog 8.0. I have decided that I definitely want to merge BlogMan and Blog since I want Blog to be a universal blogging tool instead of a one-trick pony :p In order to achieve this, I think I need to separate the actual entries from where they are published to so that I can switch journals from one publishing method, for instance built-in Blog publishing, to another – say, Movable Type – without too many hassles. The way I’ve currently envisioned things, the data will be stored as Journals, Servers, Blogs and Blog Info.
Here, Journals is the collection of actual entries compartmentalized into different … umm .. journals so that you can have a personal journal and say … a photo journal. The Journals are simply entries and things related to entries like categorizations and comments. They contain no publishing/formatting information or data about the eventual locations where the entries will be published.
Servers are all the possible types of locations where the blogs would be published such as local hard disk, FTP or even a third-party blogging server like Blogger, MT, B2 etc. The Servers set simply contains information about the actual server such as how to access it but there will be no publishing information at this level.
Blogs is the table/collection which contains the actual publishing information for each destination blog on each server. I know that the terminology gets a bit confusing what with journal and blog both being used to describe two different things but since I can’t think of a better term, I guess I’ll have to stick with what I’ve come up with so far :p I guess the difference here (for my purposes <g>) is that a journal is simply a collection of entries on your hard disk whereas a blog is actually the published version of that journal on a web site … Hope that doesn’t create any confusion since that’ll be the terminology I’ll be using from Blog 8.0 onwards 🙂 The Blogs collection holds information such as where on a particular server a given journal is to be published as well as default formatting information (such as date formats) for each blog. While it might seem as if that the Blogs collection links a server to a journal, this is not the case. A Blogs collection entry simply specifies an instance of a web log published to a particular server. However, you can for instance, publish your personal journal to a particular location on your server one day and later, publish your photo journal to the same location – not that I see why you’d want to do that but it’s possible to do that with the system I’ve got in mind … though I’m not sure if that’s how it will turn out practically :p
The Blog Info table simply holds publication information for each blog such as links to entry ID’s in a journal and the entry ID on the remote server (for implementations using a blogging server) or the last date of publication to handle archival tasks. Again this is just stuff off the top of my head and all I’m doing is thinking aloud and some of these things will probably change at the implementation stage. Plus, there are other entities that I’ve not mentioned – such as a templates collection which will contain system-wide templates even though some of the implementations (such as those using remote servers) will not actually make use of templates.
As things stand now, this looks to be a fairly ambitious project and one which will basically mean a complete overhaul of Blog code and possibly a lot of rewriting. I want to do this though since it is going to make certain tasks (such as switching from stand-alone Blog to remote server) so much easier and will also provide the ability to plug-in any future methods of publication that might come up with comparative ease …