admin

MS SQL与联结表创建多对多关系

sql

我正在使用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

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


阅读 144

收藏
2021-05-10

共1个答案

admin

我将使用第二个联结表:

MOVIE_CATEGORY_JUNCTION
Movie_ID
Category_ID

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

联结表看起来类似于:

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

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

2021-05-10