Currently works have three fixed attributes (Type, Lyrics language, ISWC). Type and language are columns on work, while iswcs (optionally > 1) are in a separate iswc table.
For some styles of music it would be nice to be able to store additional information. For the CompMusic project we want to store the raaga (melodic structure) and taala (rhythmic structure) of indian music. These are taken from a fixed known list of values. Other types of attributes include things like key, for classical symphonies, etc.
Going into the how a little bit, we are looking at a series of tables like this:
work_attribute_name: Defines an attribute that can be applied to a work (e.g., ISWC, type, raaga). Specify if values for this attribute are from a fixed list, or freeform text, and if there can be more than one attribute (e.g., ISWC), or only 1.
work_attribute_name_values: For attributes that have fixed values, a list of values that can be set. This table may need ordering and hierarchy like the instrument list.
work_attribute, edit_work_attribute: Map a work to an attribute and attribute value, along with edit history.
Work attribute names and name values should be able to be edited by musicbrainz developers and mods. Additions to these lists should go through the existing style proposal process. Work attributes will be managed through the edit system.
Things that need to be done to complete the SQL component of this ticket:
1) Finalise schema and get SQL creation files made
2) Decide if existing attributes should move to this system and get a script to do the moves. We need to see how this will impact replication, and the application of the schema change by all mirrors.
UI changes are tracked in