@startuml
'https://plantuml.com/class-diagram
left to right direction

skinparam shadowing false

frame "Album" #line.dashed {
  class Release << Aggregate Root >> {}

  class ReleaseGroup << Child Entity >> {}

  class ReleaseGroupPrimaryType << Child Entity >> {}

  class ReleaseStatus << Child Entity >> {}

  class ReleasePackaging << Child Entity >> {}

  class Language << Child Entity >> {}

  class Script << Child Entity >> {}

  Release "0..n" --o "1" Script
  Release "0..n" --o "1" Language
  Release "0..n" --o "1" ReleasePackaging
  Release "0..n" --o "1" ReleaseStatus

  ReleaseGroup "0..n" --o "1" ReleaseGroupPrimaryType
  Release "1..n" --o "1" ReleaseGroup
}

frame "Song" #line.dashed {
  class Recording << Aggregate Root >> {}

  ArtistCredit --* Recording
}

frame "Artist" #line.dashed {
  class Artist << Aggregate Root >> {}

  class Area << Child Entity >> {}
  class AreaType << Child Entity >> {}

  class ArtistType << Child Entity >> {}

  class ArtistAlias << Child Entity >> {}

  class ArtistAliasType << Child Entity >> {}

  class Gender << Child Entity >> {}

  class ArtistCredit << Child Entity >> {}

  class ArtistCreditName << Child Entity >> {}

  ArtistCreditName "1..n" *--o "1" Artist
  ArtistCreditName "1..n" *-- "1" ArtistCredit

  Artist "0..n" --o "1" ArtistType
  Artist "0..n" --o "1" Gender

  ArtistAlias "0..n" --o "1" ArtistAliasType

  ArtistAlias "0..n" --* "1" Artist

  Area "0..n" --o "1" AreaType

  Artist "0..n" --o Area
}

@enduml