Sunday, May 23rd, 2021

« Previous Day Next Day »

Project: CeMeNT

I have started thinking about my next coding project. For those of you not aware, in the past year I've written a homebrew blog engine (Glowbug, which you're probably reading right now) and I've rewritten my MLS Pick'em website, which has taken roughly 3 months of on/off work. Next on my bigger coding projects is a project I've codenamed "CEMENT" - CollEction ManagEr aNd Tracker.

I have a large collection of Magic cards (a sorting project that I've been working on for over a year.) My wife has a large collection of PEZ. We both need a system for tracking them. There are plenty of collection management software options out there, but, as I am feeling motivated to try and roll my own.

I spent a while yesterday doodling a database diagram and it is fairly complex. I've thought about whether a relational database is what I want or if I want to go with a NoSQL structure. I'm not sure. If I use MySQL, here is my initial database structure:

This structure is hugely flexible, allowing a completely formless and infinitely deep nesting taxonomy system such that I can define every collection via taxonomy. Let's start though at the actual things. The database has Objects and Entities. Objects are the type of things, and Entities are the actual items in the collection of that. For example I might have multiple printings of a specific Magic card. That's my thinking on it.

The taxonomy is such that I could define a structure as follows:

Essentially the system would see any Taxonomy entry without childen as values and any with children as categories. And is infinitely able to add more collections in case I want to start tracking my scotch cabinet, or books, or boardgames or something else.

The downside to this flexibility is that doing things based off taxonomies is now extremely complicated. For example, if I was importing a price list, then coding it becomes quite a bit more complicated I think.

I also have a location tracking in mind for tracking both where things come from and where they get stored. This is more notable for my Magic collection so I could track if cards are in the stacks or in decks, etc.

As I wrote this blog post there is one feature which is not currently included: usage tracking. This came to me as I was noting that I could track my boardgame. I have a spreadsheet for tracking my boardgame collection and the vast majority of the data could be ported over to the taxonomy system I'm designing, but the usage tracking is not directly transferrable except for a very clunky use of the taxonomy system (I could create a category for 'Used' and then add a child option for a date. It works but isn't great.)

What I need is an ability to define "free text" fields for entities. I could do this as part of taxonomy, adding a flag for it to be a field to be filled out and what type of field it is. Text, number, date, etc. Going to need to think that one over.

I mean, I am thinking the whole thing over. But this is the start of the project. We'll see where it goes.

5/23/2021 9:07 am | | Tags: programming, collecting, database design
« Previous Day Next Day »