I'm the librarian for our concert band (40 musicians), and currently use a spreadsheet to record the band's sheet music (comprising printed + digital, approx. 1,000 pieces, each holding approx. 60 parts, and multiple copies for most parts), including which sheet music is currently in use, i.e. which parts are in the rehearsal pads for the different band members, and more. I'm using Excel as it's easy to use and accessible, and have avoided going down the route of setting up a relational DB - as I can see the latter approach would very quickly end up with me spending all my time "developing" the database (and I'm just a librarian, not a DBA!) I was wondering whether this kind of use case would perhaps be more suited to Neo4j, and if so, where do I start?! One really handy feature of the spreadsheet approach is that I can easily generate nicely formatted printable reports via pivot tables.
Each row in my spreadsheet is for a specific part (e.g. "alto saxophone 2") for a specific piece of music (e.g. "Satchmo!, Louis Armstrong, arr. Ted Ricketts, pub. Hal Leonard, no. 04001911"), and holds details about the location of the sheet music, both as hard copy as well as digitally, when performed/due to be performed, purchase details (where & when bought, cost), etc. There is a lot of data duplication because in each row I'm repeating all the information for the piece.
In my spreadsheet each row holds the following details:
Many thanks for any pointers / help!
With all the different instrument parts, I'd say this is a good use case for graph. I'd start with a schema along these lines:
Your two main labels would be 'Music piece' and 'Instrument Part' (I trust you can come up with something more appropriate, these seem kinda wordy). The 'Music piece' nodes would have all the information about the song itself. Then the 'Instrument Part' would hold information about a specific instrument/part. All of the parts would then be connected to the song they belong to.
You could have a secondary label on whether the song is in use. Or which parts are currently active. I'm not quite clear on your needs for what's active/in use. The labels would make those nodes searchable for the tables you generate.
You can replicate the pivot table information, but you'll need to learn Cypher to pull the data you're interested in. It's very similar to SQL if you're familiar with that. I found the Cypher Manual the most helpful reference for learning Cypher and the small gotchas (like how rows are counted when grouping).