您应该只创建 3 个表 - 一个用于用户,分别与播放列表、歌曲和专辑配对。它们看起来像:
CREATE TABLE PlaylistLikes
(
UserID INT NOT NULL,
PlaylistID INT NOT NULL,
PRIMARY KEY (UserID, PlaylistID),
FOREIGN KEY (UserID) REFERENCES Users (UserID),
FOREIGN KEY (PlaylistID) REFERENCES Playlists (PlaylistID)
);
CREATE TABLE SongLikes
(
UserID INT NOT NULL,
SongID INT NOT NULL,
PRIMARY KEY (UserID, SongID),
FOREIGN KEY (UserID) REFERENCES Users (UserID),
FOREIGN KEY (SongID) REFERENCES Songs (SongID)
);
CREATE TABLE AlbumLikes
(
UserID INT NOT NULL,
AlbumID INT NOT NULL,
PRIMARY KEY (UserID, AlbumID),
FOREIGN KEY (UserID) REFERENCES Users (UserID),
FOREIGN KEY (AlbumID) REFERENCES Albums (AlbumID)
);
在这里,将两列都放在主键中可以防止用户多次喜欢歌曲/播放列表/专辑(除非您希望它可用 - 然后将其删除或在“喜欢的数量”中跟踪它' 柱子)。
您应该避免将所有 3 种不同类型的点赞放在同一个表中 - 应该使用不同的表来表示不同的事物。您想避免“一个真正的查找表” - 这是一个详细说明原因的答案:OTLT
如果您想查询所有 3 个表,您可以创建一个视图,该视图是 3 个表之间的 UNION 的结果。