大家好,我是PostgreSQL的新手,我正在尝试建立一个简单的电影数据库,但是我不知道该怎么做,或者是否有可能用2个表创建一个关系。
create table Movie(
id_movie int PRIMARY KEY,
title char(50),
release date,
url char(100),
local char(50),
resume char(200)
);
create table Categories(
category char(50),
id_movie int,
foreign key (id_film) references Movie(id_movie) on delete restrict
);
我希望使每部电影都与一个或多个类别相关联,但是使用我的代码,所有电影都具有所有类别。有人知道这是否可能吗?
答案 0 :(得分:2)
通常用第三张表来建模。该表具有电影的ID和每行类别的ID。当且仅当电影属于某个类别时,该行中才会包含该电影的ID和该类别的ID。
CREATE TABLE movie
(id_movie integer,
title char(50),
release date,
url char(100),
local char(50),
resume char(200),
PRIMARY KEY (id_movie));
CREATE TABLE category
(id_category integer,
category char(50));
CREATE TBALE movie_category
(id_movie integer,
id_category integer,
PRIMARY KEY (id_movie,
id_category),
FOREIGN KEY (id_movie)
REFERENCES movie
(id_movie),
FOREIGN KEY (id_category)
REFERENCES category
(id_category));
答案 1 :(得分:1)
@stickybit是正确的。这并非不合理。但是,如果不是这种情况,并且您想确保电影仅属于1类,那么您的fk结构将被反转。 M:M关系和1:M关系之间的区别。
create table categories(
category_id serial
, category character varying(50)
, constraint categories_pk primary key (category_id)
, constraint category_uk unique(category )
);
create table movies(
movie_id serial
, category_id int
, title character varying(50)
, release_dt date
, url character varying(100)
, _local character varying(50)
, resume character varying(200)
, constraint movies_pk primary key(movie_id)
, constraint movies_uk unique(title)
, constraint movies2category_fk
foreign key (category_id)
references categories(category_id)
);
其他一些随机注释: