对于多到多的关系,相交表被用来解决这两个一对多的关系。我的问题是,我现在有两个表,“播放列表”和“歌曲”。每首歌都出现在许多播放列表中,每一首播放列表都可以包含许多歌曲。为了解决这个问题,添加了第三个表,“歌曲日志”来解决多到多的问题。
但是,当涉及到向数据库中添加值时,我有点困惑。例如,如何使用相交表将一些(例如4)歌曲添加到播放列表表中?另外,我如何添加哪些歌曲在哪一个播放列表的细节?我是不是搞错了,这对很多人来说是真的吗?还是我完全搞错了?
我很困惑,所以一个清晰和基本的解释这方面的设计可能会有帮助!非常感谢。
发布于 2014-12-23 19:06:22
让我们把这个问题分解一下。
你有歌。
CREATE TABLE Songs
(
SongID int,
SongName varchar(50)
);你有播放列表的信息。(播放列表的名字,是谁创建的,随便吧)。
CREATE TABLE PlaylistDef
(
PlaylistID int,
PlaylistName varchar(50)
);你的歌都在播放列表里。歌曲可以在多个播放列表中。
CREATE TABLE Playlist
(
PlaylistID int,
SongID int
);让我们填充表:
INSERT INTO Songs
(SongID, SongName)
VALUES
(1, 'A'),
(2, 'B'),
(3, 'C'),
(4, 'D'),
(5, 'E');
INSERT INTO PlaylistDef
(PlaylistID, PlaylistName)
VALUES
(1, 'a'),
(2, 'b');
INSERT INTO Playlist
(PlaylistID, SongID)
VALUES
(1, 1),
(1, 2),
(1, 3),
(1, 4),
(2, 2),
(2, 3),
(2, 4),
(2, 5);然后,您现在可以运行类似的东西来查看特定的播放列表。
SELECT * FROM Playlist WITH (NOLOCK) WHERE PlaylistID = 2它会把这个还回去
PLAYLISTID SONGID
2 2
2 3
2 4
2 5这个有用吗?
发布于 2014-12-23 18:49:28
这是一个操作顺序问题:代码方面,我们必须先添加歌曲,然后才能将它们添加到PlayListSongs中。但是,从用户的角度来看,我们可以允许他们在更新列表的同时将歌曲添加到列表中。
PlayList (ID, Name)
1 My List 1
2 My List 2
Song (ID, Name)
1 Song A
2 Song B
3 Song C
PlayListSongs (PlayListID, SongID), (or what you called songLog)
1 1
1 2
1 3
2 3添加歌曲时,必须先将它们添加到“歌曲”表中,获取ID,然后将关系添加到播放列表中。在用户界面中,您可以同时为用户执行此操作。但是,通过允许他们将歌曲添加到现有的播放列表中,您必须在封面下先将列表添加到“歌曲”表中,然后将其添加到playListSongs中.图示如下。
事件用户在他们的PlayList“我的列表1”中添加一首新歌“宋D”
事件-用户只想添加一堆歌曲1。我们保存歌曲信息,使用进入歌曲表。
事件-用户希望创建一个带有歌曲1的新播放列表。我们在playlist 2中插入一个新记录。我们允许用户选择现有歌曲(这只会导致条目3 )。我们允许用户动态创建新歌曲,添加到歌曲表中,并自动添加到所选播放列表中。
发布于 2014-12-23 18:50:41
对于您的交叉表,您可能有如下内容:
歌曲
id
title
artist
length播放列表
id
titleplaylists_songs
song_id
playlist_id
order对于应用程序中的每一首歌曲,都有一行。对于每个播放列表,将有一行。对于任何给定播放列表中的歌曲,都会有多行。一旦在各自的表中有了歌曲和播放列表行,就可以将歌曲添加到播放列表中。要做到这一点,您需要将一行插入到playlists_songs表中,并为添加操作使用song_id (它们将不同)和playlist_id (它们将是相同的)。此外,该表将歌曲的顺序存储在播放列表中,以便以后对它们进行排序。查询可能如下所示:
INSERT INTO playlists_songs (song_id, playlist_id, order) VALUES (1, 1, 1)
INSERT INTO playlists_songs (song_id, playlist_id, order) VALUES (2, 1, 2)
INSERT INTO playlists_songs (song_id, playlist_id, order) VALUES (3, 1, 3)
INSERT INTO playlists_songs (song_id, playlist_id, order) VALUES (4, 1, 4)上面的歌曲将添加id为1、2、3和4的歌曲到id为1的播放列表中。要获得播放列表1的歌曲,可以执行以下操作:
SELECT s.*
FROM songs AS s
INNER JOIN playlists_songs AS p
ON p.song_id = s.song_id
WHERE p.playlist_id = 1
ORDER BY p.orderhttps://stackoverflow.com/questions/27626160
复制相似问题