0

こんにちは、この場合のデータベースを効果的に作成する方法に少し問題があります。

I. データベース スキーム。

CREATE TABLE IF NOT EXISTS `songs` (
`url` varchar(12) NOT NULL,
`author` varchar(250) NOT NULL,
`name` varchar(255) NOT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=293 ;


CREATE TABLE IF NOT EXISTS `account` (
`id` int(11) NOT NULL,
`login` varchar(15) NOT NULL,
`password` varchar(20) NOT NULL,
`social_fb` varchar(20) NOT NULL,
`social_yt` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `playlists` (
`id` int(11) NOT NULL,
`accountid` int(11) NOT NULL,
`songs` varchar(10000) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Ⅱ.イデオロギー。

各ユーザー(アカウント)は複数のプレイリストを持つことができます。プレイリストには、「曲」に id で保存された曲が含まれます。

III. 結論

1) この db スキームがこの種の問題に対して修正されていないことは確かです。song.id をプレイリスト テーブルに取得し、それをユーザーに割り当てる方法がわかりません。私を助けて、それがどのように見えるべきか説明してもらえますか?

2) ユーザーから単一のプレイリストを取得するための可能なクエリ a) ユーザー アカウントに割り当てられたプレイリストの ID を取得します。

御時間ありがとうございます。

4

2 に答える 2

2

4 番目のテーブル、playlist_has_song などを作成して、どの曲をどのプレイリストに入れるかをマッピングする必要があります。その後、プレイリストテーブルのの列を削除できます。

だからあなたは持っています:

table: song
-----------
id (PK)
url
author
name

table: account
--------------
id (PK)
login
password
social_fb
social_yt

table: playlist
---------------
id (PK)
accountid (FK to account.id)

table: playlist_has_song
------------------------
playlistid (FK to playlist.id)
songid (FK to song.id)

テーブルの名前は常に単数形であり、複数形ではないことに注意してください。

クエリ

ユーザー アカウントに割り当てられたプレイリストの ID を取得します。

SELECT id FROM playlist WHERE userid = ?
于 2013-10-29T13:36:38.953 に答える
0

プレイリスト テーブルには、試みたように、プレイリスト内のすべての曲を保持する列はありません。代わりに、プレイリストごと、曲ごとに行を持つ、playlist_song のような子テーブルを作成します。それが曲のリストになります。何かのようなもの:

playlist_song (
  playlist_id int,
  song_id int
)
于 2013-10-29T13:37:54.923 に答える