Полагаю, мне не хватает точки отношения "Artist_Group".
Модель данных в моем уме:
Исполнитель: физическое лицо.
Песня: сама песня.
Исполнение: конкретное исполнение или аранжировка песни. Обычно это одна песня, но вы можете предоставить связующую таблицу m: n для размещения попурри. В идеале это было бы единственное реальное исполнение, т. Е. Была бы соответствующая дата.
Запись: конкретная фиксированная версия исполнения (CD или что-то еще). Обычно у исполнения есть только одна запись, но наличие отдельной таблицы будет обрабатывать сценарий Grateful Dead / множественная бутлега, а также переиздание альбомов, воспроизведение по радио в прямом эфире против версий CD и т. Д.
Performance_Artists: таблица привязки определенного исполнения к списку исполнителей. Для каждого из них также может быть атрибут, который описывает их роль в исполнении (вокалист, барабанщик и т. Д.).
Нет явной связи между набором исполнителей, , за исключением , что они разделяют общие исполнения. Таким образом, любая таблица, которая пытается объединить случайные наборы исполнителей вне контекста записи, не является точной реляционной моделью, так как нет реальной связи.
Если вы пытаетесь представить явное отношение между группой исполнителей (то есть, они находятся в одной группе), то у групп есть имена, которые имеют уникальность (хотя этого недостаточно, чтобы быть основным ключ), и группа может быть сохранена просто как Исполнитель, а затем иметь таблицу ссылок Artist_Member, которая ссылается на отдельные записи Исполнителя. Или вы можете иметь отдельную таблицу Band и таблицу Band_Members, чтобы назначать на нее исполнителей, возможно, с датами членства. В любом случае, просто помните, что участники группы меняются со временем, а роли группы меняются от одной песни к другой, поэтому ассоциирование группы с выступлением не должно заменять привязку выступлений непосредственно к участвующим артистам.