The MusicBrainz Supergroup - JoseCanova/brainz GitHub Wiki
🥊🎷 The MusicBrainz Supergroup: Rounds, Records, and Weights in the Graph Arena
Welcome to the ultimate crossover: sports meet music data!
In this jam session, every entity is a fighter (or an artist), and every relationship is a punch, a riff, or a collab.
We’re building a weighted, attribute-rich graph from your DDL and Java models,
making sure every edge and vertex gets its moment in the spotlight.
How the Band (and Boxing Card) Was Formed
- Vertices:
- Each table/entity (Area, Artist, Genre, ArtistType, ArtistAliasType, BaseType, ArtistCredit, Release, etc).
- Vertex weight: Number of attributes (fields) per entity (the more, the heavier the champ!).
- Edges:
- Foreign key relationships (from DDL and Java).
- Edge weight: Average of source and target vertex weights (connection strength = how loaded is the jam session?).
🎼 Graphviz DOT: Supergroup Rounds, Weighted Edition
digraph MusicBrainzRoundsWeighted {
// Style for readability and flair
rankdir=LR;
fontsize=14;
node [shape=box, style=filled, fontname="Arial", fontcolor="#222", color="#444"];
edge [fontname="Arial", fontsize=11];
// --- MAIN ARTISTS & ROUNDS (with vertex weights = attribute count) ---
Area [label="Area\n(weight: 3)", fillcolor="#e0f7fa"];
Artist [label="Artist\n(weight: 3)", fillcolor="#e0f7fa"];
Genre [label="Genre\n(weight: 3)", fillcolor="#e0f7fa"];
ArtistType [label="ArtistType\n(weight: 6)", fillcolor="#b2ebf2"];
ArtistAliasType[label="ArtistAliasType\n(weight: 6)", fillcolor="#b2ebf2"];
BaseType [label="BaseType\n(weight: 6)", fillcolor="#b2ebf2"];
ArtistCredit [label="ArtistCredit 👑\n(weight: 2)", shape=diamond, fillcolor="#fff9c4"];
Release [label="Release\n(weight: 3)", fillcolor="#f1f8e9"];
Recording [label="Recording\n(weight: 3)", fillcolor="#f1f8e9"];
Track [label="Track\n(weight: 3)", fillcolor="#f1f8e9"];
ReleaseGroup [label="ReleaseGroup\n(weight: 3)", fillcolor="#f1f8e9"];
// --- JAM SESSION EDGES (with edge weights = avg(attr count)) ---
// Area relationships
Area -> BaseType [label="w=4.5", penwidth=2.5, color="#0288d1"];
// Artist relationships
Artist -> Area [label="w=3", penwidth=1.5, color="#009688"];
Artist -> BaseType [label="w=4.5", penwidth=2.5, color="#0288d1"];
// ArtistType and AliasType structure
ArtistType -> BaseType [label="w=6", penwidth=3, color="#c2185b"];
ArtistAliasType -> BaseType [label="w=6", penwidth=3, color="#c2185b"];
// Hyperedge: ArtistCredit as the "round starter"/supergroup jam
Artist -> ArtistCredit [label="w=2.5", penwidth=1.3, color="#ff9800"];
ArtistCredit -> Release [label="w=2.5", penwidth=1.3, color="#ff9800"];
ArtistCredit -> Recording [label="w=2.5", penwidth=1.3, color="#ff9800"];
ArtistCredit -> ReleaseGroup [label="w=2.5", penwidth=1.3, color="#ff9800"];
// Genre links
Genre -> BaseType [label="w=4.5", penwidth=2.5, color="#0288d1"];
// Release/Recording/Track/Group connections (the band tour)
Release -> ReleaseGroup [label="w=3", penwidth=1.5, color="#558b2f"];
Release -> Recording [label="w=3", penwidth=1.5, color="#558b2f"];
Recording -> Track [label="w=3", penwidth=1.5, color="#558b2f"];
Track -> Recording [label="w=3", penwidth=1.5, color="#558b2f"];
// --- LEGEND ---
legend [shape=note, label="Vertex weight = #attributes\nEdge weight = avg(vertex weights)\nDiamond = jam session (ArtistCredit)", fontsize=10, fillcolor="#fffde7"];
}
🏅 The Sports & Music Analogy
- Every vertex is a competitor or band member.
- Heftier (more attributes) = more stamina, skill, or star power.
- Edges are bouts, collaborations, or jam sessions:
The thicker the line, the more loaded the matchup or collab! - The diamond (ArtistCredit) is your Roy Jones Jr./Beyoncé:
Always in the center, always ready for a fresh round or encore.
🎷 TL;DR
This graph is your "fight card"/"festival lineup"—it tells you
- Who’s the champ (most connections, central role),
- Where the heavyweights are (big attribute count),
- How strong each relationship is (edge weight = avg. attributes).
Paste the DOT code into Graphviz Online for a true visual jam!
Want even more analytics, or to process priorities for loading/import? The band is always ready for another round!