我正在使用Microsoft SQL Server Management Studio,并且在创建联结表时是否应该为联结表创建ID列,如果需要,还应将其设为主键和标识列吗?还是只保留我要加入的多对多关系表的2列?

例如,如果这将是多对多表:

MOVIE
Movie_ID
Name
etc...

CATEGORY
Category_ID
Name
etc...

我应该做连接表:
MOVIE_CATEGORY_JUNCTION
Movie_ID
Category_ID
Movie_Category_Junction_ID

[并将Movie_Category_Junction_ID设置为主键,并将其用作标识列]?

要么:
MOVIE_CATEGORY_JUNCTION
Movie_ID
Category_ID

[并且只保留它没有主键或身份表]?

最佳答案

我将使用第二个联结表:

MOVIE_CATEGORY_JUNCTION
Movie_ID
Category_ID

主键将是两列的组合。您还将在MovieCategory表的每一列中都有一个外键。

联结表看起来类似于:
create table movie_category_junction
(
  movie_id int,
  category_id int,
  CONSTRAINT movie_cat_pk PRIMARY KEY (movie_id, category_id),
  CONSTRAINT FK_movie
      FOREIGN KEY (movie_id) REFERENCES movie (movie_id),
  CONSTRAINT FK_category
      FOREIGN KEY (category_id) REFERENCES category (category_id)
);

参见SQL Fiddle with Demo

使用这两个字段作为PRIMARY KEY可以防止将重复的影片/类别组合添加到表中。

关于sql - MS SQL与联结表创建多对多关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14676342/

10-10 10:54