History:Advanced Relationship Type Development: Difference between revisions

From MusicBrainz Wiki
Jump to navigationJump to search
((Imported from MoinMoin))
 
 
(13 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{HistoryHeader}}

=Historical Information=
=Historical Information=


=About the Development of Advanced Relationship Types=
=About the Development of Advanced Relationship Types=


'''Status:''' ''The following text and discussion documents the work of setting up an initial set of [[Advanced Relationship Type|AdvancedRelationshipType]]s. It contains some valuable information about the logic of the system, but is unfortunately a bit messy. Current improvement of AR types is happening on [[Advanced Relationship Type Proposal|AdvancedRelationshipTypeProposal]]. --[[User:DonRedman|DonRedman]]''
'''Status:''' ''The following text and discussion documents the work of setting up an initial set of [[Advanced Relationship Type|AdvancedRelationshipType]]<code><nowiki></nowiki></code>s. It contains some valuable information about the logic of the system, but is unfortunately a bit messy. Current improvement of AR types is happening on [[Proposals|Advanced Relationship Type Proposal]]. --[[User:DonRedman|DonRedman]]''


----
----
Line 13: Line 15:
Following recent discussion about implementing [[Advanced Relationships|AdvancedRelationships]], here is an initial listing of proposed relationship types.
Following recent discussion about implementing [[Advanced Relationships|AdvancedRelationships]], here is an initial listing of proposed relationship types.


'''Note:''' ''Please take some time to read and understand the [[Advanced Relationships|AdvancedRelationships]] proposal and the [[Simple Advanced Relationships Interface|SimpleAdvancedRelationshipsInterface]] that will be implemented before proposing new relationships.''' --[[User:DonRedman|DonRedman]]
'''Note:''' ''Please take some time to read and understand the [[Advanced Relationships|AdvancedRelationships]] proposal and the [[Simple Advanced Relationships Interface|SimpleAdvancedRelationshipsInterface]] that will be implemented before proposing new relationships.'' --[[User:DonRedman|DonRedman]]


Relationship types are to be given in a full sentence in both directions. (Though I did not finish this for all).
Relationship types are to be given in a full sentence in both directions. (Though I did not finish this for all).


While I agree with Tarragon, that we should eventually split[[Artist]] into[[Performer]] and[[Person]], I disregard this now because the main goal is to get AR implemented ''quickly''. --[[User:DonRedman|DonRedman]]
While I agree with Tarragon, that we should eventually split ''Artist'' into ''Performer'' and ''Person'', I disregard this now because the main goal is to get AR implemented ''quickly''. --[[User:DonRedman|DonRedman]]


'''Link designers:''' Please keep in mind that all links now have a begin and an end date. We need to incorporate that into this document. I've started to do that in a few places. -- [[User:RobertKaye|RobertKaye]]
'''Link designers:''' Please keep in mind that all links now have a begin and an end date. We need to incorporate that into this document. I've started to do that in a few places. -- [[User:RobertKaye|RobertKaye]]
Line 31: Line 33:


==Album - Album relationship types==
==Release - Release relationship types==


* '''translation'''
* '''translation'''
** [[Album1]] is translation of[[Album2]]
** ''Release1'' is translation of ''Release2''
** what is this named the other way round?:[[Album2]] is the original language version of[[Album1]]?
** what is this named the other way round?: ''Release2'' is the original language version of ''Release1''?
<ul><li style="list-style-type:none">Note: ''If it is not clear what the "original" language is, e.g. if the same album is released in multiple countries/multiple languages, then do not make "translation" relationships.''
<ul><li style="list-style-type:none">Note: ''If it is not clear what the "original" language is, e.g. if the same release is released in multiple countries/multiple languages, then do not make "translation" relationships.''
</ul>
</ul>


* '''set''' (pointing to the first album)
* '''set''' (pointing to the first release)
** [[Album1]] is the first album of a set with[[Album2]]
** ''Release1'' is the first release of a set with ''Release2''
** [[Album2]] is in a set with (first album)[[Album1]]
** ''Release2'' is in a set with (first release) ''Release1''
<ul><li style="list-style-type:none">Note: ''In order to avoid knots in the relatinships link all albums of the box to the first album of the box.''
<ul><li style="list-style-type:none">Note: ''In order to avoid knots in the relationships link all releases of the box to the first release of the box.''
</ul>
</ul>


* '''set''' (alternative pointing to an empty album)
* '''set''' (alternative pointing to an empty release)
** [[Empty Album|EmptyAlbum]] is a box containing[[Album]]
** ''Empty<code><nowiki></nowiki></code>Release'' is a box containing ''Release''
** [[Album]] is contained in the box\es[[Empty Album|EmptyAlbum]]
** ''Release'' is contained in the box\es ''Empty<code><nowiki></nowiki></code>Release''
<ul><li style="list-style-type:none">If we allow albums without tracks (representing the box), we can link all albums to this one. This would get us pretty close to Tarragons [[Release Groups|ReleaseGroups]] proposal. --Don
<ul><li style="list-style-type:none">If we allow releases without tracks (representing the box), we can link all releases to this one. This would get us pretty close to Tarragons [[Release Groups|ReleaseGroups]] proposal. --Don
</ul>
</ul>


==Album - Artist relationship types==
==Release - Artist relationship types==


Most of these relationship types should be valid for Track - Artist as well
Most of these relationship types should be valid for Track - Artist as well
* '''performer'''
* '''performer'''
** [[Album]] is performed by[[Artist]]
** ''Release'' is performed by ''Artist''
** [[Artist]] performs on[[Album]]
** ''Artist'' performs on ''Release''
<ul><li style="list-style-type:none">this should have sub types by instrument:
<ul><li style="list-style-type:none">this should have sub types by instrument:
</ul>
</ul>
** '''performer (guitar)'''
** '''performer (guitar)'''
<ul><li style="list-style-type:none">''having "instrument" relationships seems like a bad idea, since people will start wanting '''performer (toy piano)''' etc. etc.'' [[User:Dupuy|@alex]] I'd like to capture instruments fairly precisely if we can. See my suggestions below. -- [[User:RobertKaye|RobertKaye]] I thought that there is a pretty static set of common instruments and would use that. "toy piano" would fall under the category[[other]]. for classical music and Jazz this is actually the most important aspect of AR: bassoon, brass, cello, choir, clarinet, clavichord, computer, doublebass, english horn, flute, guitar, guitar (electric), harp, harpsichord, horn, keyboard, mandoline, marimba, oboe, organ, percussion, piano, piano (electric), piccolo flute, sampler, saxophone, saxophone (alt), saxophone (barritone), saxophone (soprano), saxophone (tenor), sequencer , soprano (voice), speaker, recitor, strings, synthesizer, timpano(i), trombone , trumpet, vibraphone, viola, violin, voice, voice (alto), voice (baritone), voice (bass), voice (countertenor), voice (mezzo-soprano), voice (soprano), voice (tenor), xylophone,[[other]]
<ul><li style="list-style-type:none">''having "instrument" relationships seems like a bad idea, since people will start wanting '''performer (toy piano)''' etc. etc.'' [[User:Dupuy|@alex]] I'd like to capture instruments fairly precisely if we can. See my suggestions below. -- [[User:RobertKaye|RobertKaye]] I thought that there is a pretty static set of common instruments and would use that. "toy piano" would fall under the category ''other''. for classical music and Jazz this is actually the most important aspect of AR: bassoon, brass, cello, choir, clarinet, clavichord, computer, doublebass, english horn, flute, guitar, guitar (electric), harp, harpsichord, horn, keyboard, mandoline, marimba, oboe, organ, percussion, piano, piano (electric), piccolo flute, sampler, saxophone, saxophone (alt), saxophone (barritone), saxophone (soprano), saxophone (tenor), sequencer , soprano (voice), speaker, recitor, strings, synthesizer, timpano(i), trombone , trumpet, vibraphone, viola, violin, voice, voice (alto), voice (baritone), voice (bass), voice (countertenor), voice (mezzo-soprano), voice (soprano), voice (tenor), xylophone, ''other''
</ul>
</ul>
** '''performer (orchestra)'''
** '''performer (orchestra)'''
*** (on)[[Album]] has the performing orchestra\s[[Artist]]
*** (on) ''Release'' has the performing orchestra\s ''Artist''
*** [[Artist]] is the the performing orchestra on[[Album]]
*** ''Artist'' is the the performing orchestra on ''Release''


* '''composer'''
* '''composer'''
** [[Album]] is composed by[[Artist]]
** ''Release'' is composed by ''Artist''
** [[Artist]] composed[[Album]]
** ''Artist'' composed ''Release''


* '''conductor'''
* '''conductor'''
** [[Album]] is conducted by[[Artist]]
** ''Release'' is conducted by ''Artist''
** [[Artist]] conducts[[Album]]
** ''Artist'' conducts ''Release''


* '''arranger'''
* '''arranger'''
** [[Album]] is arranged by[[Artist]]
** ''Release'' is arranged by ''Artist''
** [[Artist]] arranged [[Album]]
** ''Artist'' arranged ''Release''
** [[Artist]] produced[[Album]]
** ''Artist'' produced ''Release''


* '''version''' (see discussion below)
* '''version''' (see discussion below)
Line 85: Line 87:


* '''member of band'''
* '''member of band'''
** [[Artist1]] is|was a member of the band\s[[Artist2]] from <date> to present|<date>
** ''Artist1'' is|was a member of the band\s ''Artist2'' from <date> to present|<date>
** [[Artist2]] is a band consisting of the member\s[[Artist1]]
** ''Artist2'' is a band consisting of the member\s ''Artist1''


* '''is person'''
* '''is person'''
** [[Artist1]] is a performance name of the person\s[[Artist2]]
** ''Artist1'' is a performance name of the person\s ''Artist2''
** [[Artist2]] is a real person behind the performance name\s[[Artist1]]
** ''Artist2'' is a real person behind the performance name\s ''Artist1''


There is a lot to do here. Actually AR will change the [[Style Guidelines|StyleGuidelines]]s. With AR it seems to be much more convenient to encourage something like "''John Scofield & Mike Stern'' (for a single CD) if we can then say:
There is a lot to do here. Actually AR will change the [[Style Guideline|StyleGuideline]]<code><nowiki></nowiki></code>s. With AR it seems to be much more convenient to encourage something like "John Scofield & Mike Stern" (for a single CD) if we can then say:
* '''cooperation'''
* '''cooperation'''
** [[[Artist:John|John]] Scofield] is a member of the cooperation\s / project\s [[[Artist:John|John]] Scofield & Mike Stern]
** ''John Scofield'' is a member of the cooperation\s / project\s ''John Scofield & Mike Stern''
** [[[Artist:John|John]] Scofield & Mike Stern] is a cooperation / project consisting of the member\s [[[Artist:John|John]] Scofield], [[[Artist:Mike|Mike]] Stern]
** ''John Scofield & Mike Stern'' is a cooperation / project consisting of the member\s ''John Scofield'', ''Mike Stern''


For cooperation do we want to attempt to indicate the level of cooperation? (e.g. back-up singing vs composing the song and lyrics are two different levels of cooperation.) -- [[User:RobertKaye|RobertKaye]]
For cooperation do we want to attempt to indicate the level of cooperation? (e.g. back-up singing vs composing the song and lyrics are two different levels of cooperation.) -- [[User:RobertKaye|RobertKaye]]
Line 102: Line 104:
<ul><li style="list-style-type:none">That should be fine -- [[User:RobertKaye|RobertKaye]]
<ul><li style="list-style-type:none">That should be fine -- [[User:RobertKaye|RobertKaye]]
</ul>
</ul>
* [[Artist]] is similar in style to[[Artist]]
* ''Artist1'' is similar in style to ''Artist2''
</ul>
</ul>


I would attempt to stick to objective measures (same record label, shared personnel, duets, covers of same songs, on same compilations etc.) rather than rely on a vague and totally subjective 'similarity', particularly if it is totally binary on-off rather than a rating with degrees of similarity.
I would attempt to stick to objective measures (same record label, shared personnel, duets, covers of same songs, on same compilations etc.) rather than rely on a vague and totally subjective 'similarity', particularly if it is totally binary on-off rather than a rating with degrees of similarity.
* '''non-musical relationships'''
* '''non-musical relationships'''
** [[Artist1]] married[[Artist2]]
** ''Artist1'' married ''Artist2''
** [[Artist1]] is the sibling of[[Artist2]] (the male/female could be part of the person, not the relationship)
** ''Artist1'' is the sibling of ''Artist2'' (the male/female could be part of the person, not the relationship)
** [[Artist1]] is the parent of[[Artist2]]
** ''Artist1'' is the parent of ''Artist2''
** [[Artist1]] is the grandparent of[[Artist2]]
** ''Artist1'' is the grandparent of ''Artist2''
** [[Artist1]] dates[[Artist2]]
** ''Artist1'' dates ''Artist2''


==Album - Track relationship types==
==Release - Track relationship types==


* [[Track]] was originally released on[[Album]] (could be figured out by 'same track' + 'release date')
* ''Track'' was originally released on ''Release'' (could be figured out by 'same track' + 'release date')
* [[Album]] is a single release based on[[Track]]
* ''Release'' is a single release based on ''Track''


==Artist - Track relationship types==
==Artist - Track relationship types==


Most of the Album - Artist relationships apply here as well.
Most of the Release - Artist relationships apply here as well.


Covers should ''not'' be done as Artist - track relationships. A song is a cover of another song but a song is ''composed'' by an artist.
Covers should ''not'' be done as Artist - track relationships. A song is a cover of another song but a song is ''composed'' by an artist.
* '''composer'''
* '''composer'''
** [[Artist]] composed[[Track]]
** ''Artist'' composed ''Track''
** [[Track]] is composed by[[Artist]]
** ''Track'' is composed by ''Artist''


* remixes
* '''remixes'''
** [[Artist]] remixed[[Track]]
** ''Artist'' remixed ''Track''
** [[Track]] is remixed by[[Artist]]
** ''Track'' is remixed by ''Artist''


* '''performer''' (in the same fashion as album-artist)
* '''performer''' (in the same fashion as [[Release Artist|ReleaseArtist]])
* '''conductor'''
* '''conductor'''
* '''arranger'''
* '''arranger'''
Line 137: Line 139:
* '''remaster'''
* '''remaster'''


There seems to be a whole sub tree with album-artist in common here. That should be exploited or it will be a pain in the ass to take advantage of. -- [[User:RobertKaye|RobertKaye]]
There seems to be a whole sub tree with [[Release Artist|ReleaseArtist]] in common here. That should be exploited or it will be a pain in the ass to take advantage of. -- [[User:RobertKaye|RobertKaye]]


==Track - Track relationship types==
==Track - Track relationship types==


In descending order of similarity:
In descending order of similarity:
* '''identical''' (eg same track on album & compilation)
* '''identical''' (e.g. same track on release & compilation)
<ul><li style="list-style-type:none">We cannot do a simple "is identical to" relatinship because AR need a clustering element. Otherwise the backend would have to search the table multiple times to get the whole cluster. I propose the first track released as clustering element:
<ul><li style="list-style-type:none">We cannot do a simple "is identical to" relatinship because AR need a clustering element. Otherwise the backend would have to search the table multiple times to get the whole cluster. I propose the first track released as clustering element:
</ul>
</ul>
** [[Track1]] is the first-time release of the following identical track\s[[Track2]]
** ''Track1'' is the first-time release of the following identical track\s ''Track2''
** [[Track2]] is identical to and was first released as[[Track1]]
** ''Track2'' is identical to and was first released as ''Track1''


* '''other version''' (see discussion below)
* '''other version''' (see discussion below)
* '''covers''' (see discussion below)
* '''covers''' (see discussion below)
** [[Track2]] is a cover of the original version[[Track1]]
** ''Track2'' is a cover of the original version ''Track1''
** [[Track1]] is the original of cover version\s[[Track2]]
** ''Track1'' is the original of cover version\s ''Track2''


===Can we display the artist names along with the track names?===
===Can we display the artist names along with the track names?===
Line 157: Line 159:
Because something like [http://test.musicbrainz.org/showtrack.html?trackid=2364777 "More Than This is a cover of More Than This"] isn't very informative. "More Than This (by Bill Murray) is a cover of More Than This (by Roxy Music)" would be nicer. Or is this something for the [[Fancy Advanced Relationships Interface|FancyAdvancedRelationshipsInterface]]? --[[User:ZeroGravitas|ZeroGravitas]]
Because something like [http://test.musicbrainz.org/showtrack.html?trackid=2364777 "More Than This is a cover of More Than This"] isn't very informative. "More Than This (by Bill Murray) is a cover of More Than This (by Roxy Music)" would be nicer. Or is this something for the [[Fancy Advanced Relationships Interface|FancyAdvancedRelationshipsInterface]]? --[[User:ZeroGravitas|ZeroGravitas]]


==Album - URL relationship types==
==Release - URL relationship types==


* Download for free
* Download for free
Line 165: Line 167:
* Informational web page
* Informational web page
** Is the soundtrack to this Film (link to [[Internet Movie Database|InternetMovieDatabase]])
** Is the soundtrack to this Film (link to [[Internet Movie Database|InternetMovieDatabase]])
''These are all adequately handled by the existing [[Album Annotation|AlbumAnnotation]]s; I don't think we should add relationships for these until we see what kind of URL annotations are common.'' [[User:Dupuy|@alex]]
''These are all adequately handled by the existing [[Release Annotation|ReleaseAnnotation]]s; I don't think we should add relationships for these until we see what kind of URL annotations are common.'' [[User:Dupuy|@alex]]


==Artist - URL relationship types==
==Artist - URL relationship types==


* '''fanpage'''
* '''fanpage'''
** [[Artist]] has fanpage\s at[[URL]]
** ''Artist'' has fanpage\s at ''URL''
** [[URL]] is a fanpage of[[Artist]]
** ''URL'' is a fanpage of ''Artist''


* '''official homepage'''
* '''official homepage'''
** [[Artist]] has official homepage\s at[[URL]]
** ''Artist'' has official homepage\s at ''URL''
** [[URL]] is the official homepage of[[Artist]]
** ''URL'' is the official homepage of ''Artist''


* '''informational resource''' (like [[Wikipedia|WikiPedia]]) ''These are all adequately handled by the existing [[Artist Annotation|ArtistAnnotation]]s; I don't think we should add relationships for these until we see what kind of URL annotations are common.'' [[User:Dupuy|@alex]]
* '''informational resource''' (like [[Wikipedia|WikiPedia]]) ''These are all adequately handled by the existing [[Artist Annotation|ArtistAnnotation]]s; I don't think we should add relationships for these until we see what kind of URL annotations are common.'' [[User:Dupuy|@alex]]
Line 181: Line 183:
==Track - URL relationship types==
==Track - URL relationship types==


Same as Album - URL
Same as Release - URL


----
----
Line 189: Line 191:


AR will incur a very drastic change to the database schema. Even if we try to keep the impact minimal (and I try very hard) there will have to be one of these changes:
AR will incur a very drastic change to the database schema. Even if we try to keep the impact minimal (and I try very hard) there will have to be one of these changes:
# Artists that have no album and not track will not be deleted if they have a relationship. ''or''
# Artists with no attributed release and tracks will not be deleted if they have a relationship. ''or''
# There will be additional elements like[[Person]] and perhaps[[Performer]] (unless this is done with the[[Artist]] field), and (less important)[[Country]],[[Language]] etc. These need a table for themselves but do not necessarily be part of the current schema (which links Artists, Albums and Tracks). However add and delete edits would have to be written and integrated into the system.
# There will be additional elements like ''Person'' and perhaps ''Performer'' (unless this is done with the ''Artist'' field), and (less important) ''Country'', ''Language'' etc. These need a table for themselves but do not necessarily be part of the current schema (which links Artists, Releases and Tracks). However add and delete edits would have to be written and integrated into the system.


I know that Tarragon favors the second way and I favor the first for the short term future. I think this decision is up to Robert. --[[User:DonRedman|DonRedman]]
I know that Tarragon favors the second way and I favor the first for the short term future. I think this decision is up to Robert. --[[User:DonRedman|DonRedman]]
<ul><li style="list-style-type:none">''change 1 sounds much simpler. I don't really see the need for a distinction between[[Performer]] and[[Person]]. Certainly we should get AR working first, and see if change 2 is still wanted then.'' --[[User:ZeroGravitas|ZeroGravitas]] ''I made a comment in the section Multi-relationships below on the subject of [[Data Elements For Advanced Relationships|DataElementsForAdvancedRelationships]] that could be added to the database to take advantage of [[Advanced Relationships|AdvancedRelationships]]''. Maybe take this discussion to a new page? --[[andybak]]
<ul><li style="list-style-type:none">''change 1 sounds much simpler. I don't really see the need for a distinction between Performer and Person. Certainly we should get AR working first, and see if change 2 is still wanted then.'' --[[User:ZeroGravitas|ZeroGravitas]] ''I made a comment in the section Multi-relationships below on the subject of [[Data Elements For Advanced Relationships|DataElementsForAdvancedRelationships]] that could be added to the database to take advantage of [[Advanced Relationships|AdvancedRelationships]]''. Maybe take this discussion to a new page? --[[andybak]]
</ul>
</ul>


Line 216: Line 218:
===Multi-relationships===
===Multi-relationships===


There seems to be a general issue here for the Album - Album and Track - Track relationships, like "in box set with", "same song" and "translation" where the relationship is implicitly commutative (i.e. A <REL> B implies B <REL> A) and transitive (i.e. A <REL> B, and B <REL> C, implies A <REL> C) where the current one-to-one nature of [[Advanced Relationships|AdvancedRelationships]] isn't quite what we want, and we would rather have a "collection" of some sort where all the entities are related to all the other ones. This can be implemented by introducing a new entity type (Collection) and using one-to-one relationships between the collection entities and the individual albums or tracks, but I'm not sure that's the best way to handle it. The current hacks of selecting a "first album" (for sets) or "original version" (for translations or covers) are, well, kind of hacky. [[User:Dupuy|@alex]]
There seems to be a general issue here for the Release - Release and Track - Track relationships, like "in box set with", "same song" and "translation" where the relationship is implicitly commutative (i.e. A <REL> B implies B <REL> A) and transitive (i.e. A <REL> B, and B <REL> C, implies A <REL> C) where the current one-to-one nature of [[Advanced Relationships|AdvancedRelationships]] isn't quite what we want, and we would rather have a "collection" of some sort where all the entities are related to all the other ones. This can be implemented by introducing a new entity type (Collection) and using one-to-one relationships between the collection entities and the individual releases or tracks, but I'm not sure that's the best way to handle it. The current hacks of selecting a "first release" (for sets) or "original version" (for translations or covers) are, well, kind of hacky. [[User:Dupuy|@alex]]
<ul><li style="list-style-type:none">''I can see many benefits to be gained by adding a relatively few number of [[New Entities|NewEntities]] to the database. For instance: 'grouping' entities for albums/releases such as boxed sets. Grouping entities for tracks would allow us to indicate movements within a larger work for classical music. Maybe I should sketch outsome thoughts on the issue of [[Classical Advanced Relationships|ClassicalAdvancedRelationships]]'' --[[andybak]]
<ul><li style="list-style-type:none">''I can see many benefits to be gained by adding a relatively few number of new entities to the database. For instance: 'grouping' entities for releases such as boxed sets. Grouping entities for tracks would allow us to indicate movements within a larger work for classical music. Maybe I should sketch outsome thoughts on the issue of [[Classical Advanced Relationships|ClassicalAdvancedRelationships]]'' --[[andybak]]
</ul>
</ul>


Line 237: Line 239:
** '''identical''' - The same recording
** '''identical''' - The same recording


* Album - Album
* Release - Release
** '''version''' - Mostly the same audio material (and [[Album Title|AlbumTitle]] and same [[Artist Name|ArtistName]]) but different track-listings
** '''version''' - Mostly the same audio material (and [[Release Title|ReleaseTitle]] and same [[Artist Name|ArtistName]]) but different track-listings
** '''remaster''' - Same [[Album Title|AlbumTitle]] and same [[Artist Name|ArtistName]] but different (e.g. remastered) audio material.
** '''remaster''' - Same [[Release Title|ReleaseTitle]] and same [[Artist Name|ArtistName]] but different (e.g. remastered) audio material.


What do you think of this? --[[User:DonRedman|DonRedman]]
What do you think of this? --[[User:DonRedman|DonRedman]]
Line 251: Line 253:
** instrument
** instrument
*** string
*** string
*** * guitar
**** guitar
*** ** electric guitar
***** electric guitar
*** ** base guitar
***** base guitar
*** ** acoustic guitar
***** acoustic guitar
*** ** double guitar
***** double guitar

*** wind
*** wind
*** * trombone
**** trombone
*** * tuba
**** tuba
*** * french horn
**** french horn
*** * trumpet
**** trumpet
*** * Saxophone
**** Saxophone
*** ** Alto saxophone
***** Alto saxophone
*** ** Tenor saxophone
***** Tenor saxophone
*** ** Stinking normal saxophone
***** Stinking normal saxophone

*** piano
*** piano
*** * grand piano
**** grand piano
*** * upright piano
**** upright piano
*** * other pianos
**** other pianos
*** ** toy piano
***** toy piano


* vocal
** vocal
** lead vocals
*** lead vocals
** backup vocals
*** backup vocals
** bathtub vocals
*** bathtub vocals


We should see if we can find an instrument breakdown that we can use somewhere. For now, lets not worry about how to represent this in the UI -- lets come up with the right datastructure and then we'll figure out how to make it palatable for our users. -- [[User:RobertKaye|RobertKaye]]
We should see if we can find an instrument breakdown that we can use somewhere. For now, lets not worry about how to represent this in the UI -- lets come up with the right datastructure and then we'll figure out how to make it palatable for our users. -- [[User:RobertKaye|RobertKaye]]
Line 280: Line 284:
but then you have to think about what can be done when we run into instances where someone is both [[Backing Guitar|BackingGuitar]] and [[Lead Vocals|LeadVocals]] ~[[User:mo|mo]] ''(xd, 'bathtub')''
but then you have to think about what can be done when we run into instances where someone is both [[Backing Guitar|BackingGuitar]] and [[Lead Vocals|LeadVocals]] ~[[User:mo|mo]] ''(xd, 'bathtub')''


[[Category:To Be Reviewed]]
[[Category:History]] [[Category:Development]]

Latest revision as of 13:59, 4 October 2011

Status: This Page is Glorious History!

The content of this page either is bit-rotted, or has lost its reason to exist due to some new features having been implemented in MusicBrainz, or maybe just described something that never made it in (or made it in a different way), or possibly is meant to store information and memories about our Glorious Past. We still keep this page to honor the brave editors who, during the prehistoric times (prehistoric for you, newcomer!), struggled hard to build a better present and dreamed of an even better future. We also keep it for archival purposes because possibly it still contains crazy thoughts and ideas that may be reused someday. If you're not into looking at either the past or the future, you should just disregard entirely this page content and look for an up to date documentation page elsewhere.

Historical Information

About the Development of Advanced Relationship Types

Status: The following text and discussion documents the work of setting up an initial set of AdvancedRelationshipTypes. It contains some valuable information about the logic of the system, but is unfortunately a bit messy. Current improvement of AR types is happening on Advanced Relationship Type Proposal. --DonRedman



List of Relationship types for AdvancedRelationships

Following recent discussion about implementing AdvancedRelationships, here is an initial listing of proposed relationship types.

Note: Please take some time to read and understand the AdvancedRelationships proposal and the SimpleAdvancedRelationshipsInterface that will be implemented before proposing new relationships. --DonRedman

Relationship types are to be given in a full sentence in both directions. (Though I did not finish this for all).

While I agree with Tarragon, that we should eventually split Artist into Performer and Person, I disregard this now because the main goal is to get AR implemented quickly. --DonRedman

Link designers: Please keep in mind that all links now have a begin and an end date. We need to incorporate that into this document. I've started to do that in a few places. -- RobertKaye



I removed URL - URL from the AR link features since its pointless, so I removed it from the table above as well -- RobertKaye



Release - Release relationship types

  • translation
    • Release1 is translation of Release2
    • what is this named the other way round?: Release2 is the original language version of Release1?
  • Note: If it is not clear what the "original" language is, e.g. if the same release is released in multiple countries/multiple languages, then do not make "translation" relationships.
  • set (pointing to the first release)
    • Release1 is the first release of a set with Release2
    • Release2 is in a set with (first release) Release1
  • Note: In order to avoid knots in the relationships link all releases of the box to the first release of the box.
  • set (alternative pointing to an empty release)
    • EmptyRelease is a box containing Release
    • Release is contained in the box\es EmptyRelease
  • If we allow releases without tracks (representing the box), we can link all releases to this one. This would get us pretty close to Tarragons ReleaseGroups proposal. --Don

Release - Artist relationship types

Most of these relationship types should be valid for Track - Artist as well

  • performer
    • Release is performed by Artist
    • Artist performs on Release
  • this should have sub types by instrument:
    • performer (guitar)
  • having "instrument" relationships seems like a bad idea, since people will start wanting performer (toy piano) etc. etc. @alex I'd like to capture instruments fairly precisely if we can. See my suggestions below. -- RobertKaye I thought that there is a pretty static set of common instruments and would use that. "toy piano" would fall under the category other. for classical music and Jazz this is actually the most important aspect of AR: bassoon, brass, cello, choir, clarinet, clavichord, computer, doublebass, english horn, flute, guitar, guitar (electric), harp, harpsichord, horn, keyboard, mandoline, marimba, oboe, organ, percussion, piano, piano (electric), piccolo flute, sampler, saxophone, saxophone (alt), saxophone (barritone), saxophone (soprano), saxophone (tenor), sequencer , soprano (voice), speaker, recitor, strings, synthesizer, timpano(i), trombone , trumpet, vibraphone, viola, violin, voice, voice (alto), voice (baritone), voice (bass), voice (countertenor), voice (mezzo-soprano), voice (soprano), voice (tenor), xylophone, other
    • performer (orchestra)
      • (on) Release has the performing orchestra\s Artist
      • Artist is the the performing orchestra on Release
  • composer
    • Release is composed by Artist
    • Artist composed Release
  • conductor
    • Release is conducted by Artist
    • Artist conducts Release
  • arranger
    • Release is arranged by Artist
    • Artist arranged Release
    • Artist produced Release
  • version (see discussion below)
  • remaster (see discussion below)

Artist - Artist relationship types

  • member of band
    • Artist1 is|was a member of the band\s Artist2 from <date> to present|<date>
    • Artist2 is a band consisting of the member\s Artist1
  • is person
    • Artist1 is a performance name of the person\s Artist2
    • Artist2 is a real person behind the performance name\s Artist1

There is a lot to do here. Actually AR will change the StyleGuidelines. With AR it seems to be much more convenient to encourage something like "John Scofield & Mike Stern" (for a single CD) if we can then say:

  • cooperation
    • John Scofield is a member of the cooperation\s / project\s John Scofield & Mike Stern
    • John Scofield & Mike Stern is a cooperation / project consisting of the member\s John Scofield, Mike Stern

For cooperation do we want to attempt to indicate the level of cooperation? (e.g. back-up singing vs composing the song and lyrics are two different levels of cooperation.) -- RobertKaye

  • similarity
  • I suppose we can afford to have real clusters here, so this relationship would not be directional. Robert: is this a problem?
    • Artist1 is similar in style to Artist2

I would attempt to stick to objective measures (same record label, shared personnel, duets, covers of same songs, on same compilations etc.) rather than rely on a vague and totally subjective 'similarity', particularly if it is totally binary on-off rather than a rating with degrees of similarity.

  • non-musical relationships
    • Artist1 married Artist2
    • Artist1 is the sibling of Artist2 (the male/female could be part of the person, not the relationship)
    • Artist1 is the parent of Artist2
    • Artist1 is the grandparent of Artist2
    • Artist1 dates Artist2

Release - Track relationship types

  • Track was originally released on Release (could be figured out by 'same track' + 'release date')
  • Release is a single release based on Track

Artist - Track relationship types

Most of the Release - Artist relationships apply here as well.

Covers should not be done as Artist - track relationships. A song is a cover of another song but a song is composed by an artist.

  • composer
    • Artist composed Track
    • Track is composed by Artist
  • remixes
    • Artist remixed Track
    • Track is remixed by Artist
  • performer (in the same fashion as ReleaseArtist)
  • conductor
  • arranger
  • version
  • remaster

There seems to be a whole sub tree with ReleaseArtist in common here. That should be exploited or it will be a pain in the ass to take advantage of. -- RobertKaye

Track - Track relationship types

In descending order of similarity:

  • identical (e.g. same track on release & compilation)
  • We cannot do a simple "is identical to" relatinship because AR need a clustering element. Otherwise the backend would have to search the table multiple times to get the whole cluster. I propose the first track released as clustering element:
    • Track1 is the first-time release of the following identical track\s Track2
    • Track2 is identical to and was first released as Track1
  • other version (see discussion below)
  • covers (see discussion below)
    • Track2 is a cover of the original version Track1
    • Track1 is the original of cover version\s Track2

Can we display the artist names along with the track names?

Because something like "More Than This is a cover of More Than This" isn't very informative. "More Than This (by Bill Murray) is a cover of More Than This (by Roxy Music)" would be nicer. Or is this something for the FancyAdvancedRelationshipsInterface? --ZeroGravitas

Release - URL relationship types

  • Download for free
  • Purchase to Download
  • Purchase for Mail Order
  • Purchase for (?) Retail
  • Informational web page

These are all adequately handled by the existing ReleaseAnnotations; I don't think we should add relationships for these until we see what kind of URL annotations are common. @alex

Artist - URL relationship types

  • fanpage
    • Artist has fanpage\s at URL
    • URL is a fanpage of Artist
  • official homepage
    • Artist has official homepage\s at URL
    • URL is the official homepage of Artist
  • informational resource (like WikiPedia) These are all adequately handled by the existing ArtistAnnotations; I don't think we should add relationships for these until we see what kind of URL annotations are common. @alex

Track - URL relationship types

Same as Release - URL



Discussion

AR will incur a very drastic change to the database schema. Even if we try to keep the impact minimal (and I try very hard) there will have to be one of these changes:

  1. Artists with no attributed release and tracks will not be deleted if they have a relationship. or
  2. There will be additional elements like Person and perhaps Performer (unless this is done with the Artist field), and (less important) Country, Language etc. These need a table for themselves but do not necessarily be part of the current schema (which links Artists, Releases and Tracks). However add and delete edits would have to be written and integrated into the system.

I know that Tarragon favors the second way and I favor the first for the short term future. I think this decision is up to Robert. --DonRedman

  • change 1 sounds much simpler. I don't really see the need for a distinction between Performer and Person. Certainly we should get AR working first, and see if change 2 is still wanted then. --ZeroGravitas I made a comment in the section Multi-relationships below on the subject of DataElementsForAdvancedRelationships that could be added to the database to take advantage of AdvancedRelationships. Maybe take this discussion to a new page? --andybak


Cover Versions

After further thought... How about instead of Cover Version, we have an AR Track-Track link that says "These are recordings of the Same Song".

Assuming the release date is set on the earlier track, who covered who is calculated automatically. This approach avoids data redundancy. All we need is a report to suggest linking of songs with the same titles. This also maps to re-recordings of a song by the original artist.

Note that The Covers Project defines the original artist as the first person to release a song:

  • "apparently Danzig wrote a song ("Thirteen") which Johnny Cash released in 1994. In 1999, Danzig also recorded the song, so technically (for the purpose of The CoversProject) they covered a Johnny Cash song that happened to have been written by him."

Sooner or later we're going to hit this sort of case, so seems like a good idea to think about it now... --ZeroGravitas



Multi-relationships

There seems to be a general issue here for the Release - Release and Track - Track relationships, like "in box set with", "same song" and "translation" where the relationship is implicitly commutative (i.e. A <REL> B implies B <REL> A) and transitive (i.e. A <REL> B, and B <REL> C, implies A <REL> C) where the current one-to-one nature of AdvancedRelationships isn't quite what we want, and we would rather have a "collection" of some sort where all the entities are related to all the other ones. This can be implemented by introducing a new entity type (Collection) and using one-to-one relationships between the collection entities and the individual releases or tracks, but I'm not sure that's the best way to handle it. The current hacks of selecting a "first release" (for sets) or "original version" (for translations or covers) are, well, kind of hacky. @alex

  • I can see many benefits to be gained by adding a relatively few number of new entities to the database. For instance: 'grouping' entities for releases such as boxed sets. Grouping entities for tracks would allow us to indicate movements within a larger work for classical music. Maybe I should sketch outsome thoughts on the issue of ClassicalAdvancedRelationships --andybak


Covers and such

As alex pointed out, you cannot do wild clustering for covers. Therefore you must have a single element to which all other elements relate to. I propose to do this by time. The root relationship would then be

  • first version
    • [1] is the first-time release of [2]
    • [2] was first released as [1]

then we can destinguish the sets; i.e. from what set is this the first-time release? sets I can think of:

  • Track - Track
    • cover - The same composition
    • version - The same song by the same artist
    • identical - The same recording
  • Release - Release

What do you think of this? --DonRedman

  • The problem is that if I think version A is the first version, but I am wrong, the person who needs to fix that can't just change one relationship to indicate which one is first, they have to change all the relationships to point to the true first version. I would prefer an arbitrary selection, or better, a new entity type (like Collection). @alex Well you could make a batch operation for this. I will discuss this with Robert... --DonRedman

Instruments

I think that for indicating instruments we will want to have a deeper link tree. I would suggest doing something like:

  • performer
    • instrument
      • string
        • guitar
          • electric guitar
          • base guitar
          • acoustic guitar
          • double guitar
      • wind
        • trombone
        • tuba
        • french horn
        • trumpet
        • Saxophone
          • Alto saxophone
          • Tenor saxophone
          • Stinking normal saxophone
      • piano
        • grand piano
        • upright piano
        • other pianos
          • toy piano
    • vocal
      • lead vocals
      • backup vocals
      • bathtub vocals

We should see if we can find an instrument breakdown that we can use somewhere. For now, lets not worry about how to represent this in the UI -- lets come up with the right datastructure and then we'll figure out how to make it palatable for our users. -- RobertKaye

but then you have to think about what can be done when we run into instances where someone is both BackingGuitar and LeadVocals ~mo (xd, 'bathtub')