Structuring the database in this case

A client fills out a form for a job request to a music production house.

The client chooses items needed for the project from the following 5 lists:

Elements (Example: Melody, Rhythem, Etc.)
Instruments (Vocals, Violin, Etc.)
Services (Performing, Recording, Editing, Etc.)
Artist (John Jhonson, Joey, Etc.)
Song Section (Intro, Verse, Chorus, Etc.)

Now we know that the client wants those selected item in Elements, Instruments, Services, Artists, Song Sections.

In terms of database it means that we add those selected items (each list having their own “type”) to the current project “thing” in the “Project” type.

But how does the client specify the relations, for example:

John Jhonson” (Artist), will “Perform” (Service) the “Violin” (Instrument) for the “Melody” (Element) on the “Intro” (Song Section).

How is this presented to the database?

I think you’ve kind of got most of it - I’d add another Thing like “project performance components” (which is represents the verb service, is how I think about it)
and that would hold entries of these performance component Things for the project (and thus create the relationships)

Project Performance Components
Project
Artist
Instrument
Element
Song Section

So the Client (well the application does all the inserts) basically inserts rows into “project performance components” that looks like
Project, " “John Jhonson ” (Artist), the “Violin ” (Instrument) for the “Melody ” (Element) on the “Intro ” (Song Section)."

And I imagine a Project has a few rows of these in “Project Performance Components” to create all the components of the song/project

At least that is what makes sense to me :slight_smile: