假设一个用户可以将多个电影和电视节目添加到他们的收藏夹列表中,并且一个电视节目或一部电影可以成为多个用户的收藏夹列表的一部分,我如何创建联结表来模拟这种关系?
尝试添加连接表,但无法弄清楚如何识别主键和外键。目标是仅添加一个可以帮助建立这种关系的联结表。
一种方法是为每种类型的内容添加一个“连接”表:
CREATE TABLE user_favourite_movies
( user_id int not null references users (user_id)
, movie_id int not null references movies (movie_id)
, <additional attributes>
, primary key (user_id, movie_id)
);
CREATE TABLE user_favourite_tv_shows
( user_id int not null references users (user_id)
, tv_show_id int not null references tv_shows (tv_show_id)
, <additional attributes>
, primary key (user_id, tv_show_id)
);
另一种方法是创建一个所有内容通用的实体:
CREATE TABLE content
( content_id INT NOT NULL PRIMARY KEY
, content_type CHAR(1) NOT NULL
, UNIQUE (content_type, content_id)
, CHECK (content_type IN ('M','T'))
);
CREATE TABLE movies
( content_id INT NOT NULL PRIMARY KEY
, content_type CHAR(1) DEFAULT 'M' NOT NULL
, <additional attributes>
, FOREIGN KEY (content_id, content_type)
REFERENCES content (content_id, content_type)
, CHECK content_type = 'M'
);
还有类似的电视节目。然后您可以为用户最喜欢的内容添加一个“连接”表。