У меня есть сущность, которая не может существовать без определения другой, и я хочу, чтобы эта сущность участвовала в отношениях «многие ко многим».
Пример: у исполнителя есть альбом (альбом не может существовать без исполнителя), альбом также имеет много дорожек, но одна и та же дорожка может существовать во многих альбомах.
Так что между альбомом и треками у нас есть отношения многие ко многим.
Если альбом является слабой сущностью, то его первичным ключом является внешний ключ, ссылающийся на исполнителя, поэтому он не может быть внешним ключом для другой таблицы, представляющей отношение «многие ко многим».
Вопрос в том, возможно ли иметь такие отношения в SQL, и если да, то как их выразить?
database-design
foreign-key
referential-integrity
Райден Фриман
источник
источник
artist_id
внешний ключ, который ссылается на художника. Если вы хотите, чтобы одна дорожка была сопоставлена с несколькими альбомами, используйте таблицу сопоставления сtrack_id, album_id
. Легко :)Ответы:
Я думаю, что вы можете, используя «алмазную» диаграмму отношений:
источник
(albumID, trackNo)
и добавлю другое ограничение Unique.К сожалению, у меня недостаточно представителей, чтобы комментировать ответ ypercubeᵀᴹ , поэтому вместо этого я опубликую альтернативный ответ - я в целом согласен с этим ответом, но считаю, что первичный ключ и уникальные ограничения
AlbumTrack
неверны, поскольку альбомы и треки слабые юридические лица. Например, следующие допустимые данные с предписанными ограничениями будут запрещены:Вместо этого я бы установил
PRIMARY KEY (artistID, albumID, trackID)
и исключил уникальное ограничение, в результате чего:Треки все еще ограничены, чтобы встречаться не более одного раза на альбом.
Кроме того , вопрос на самом деле не указать , что треки слабые объекты (только то , что альбомы) - если следы на самом деле может существовать независимо от художников, как
Track
иAlbumTrack
таблицы слегка определяется по- разному:источник