当前位置: 首页 > 面试题库 >

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

陈允晨
2023-03-14
问题内容

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

主键将是两列的组合。您还将在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可以防止将重复的影片/类别组合添加到表中。



 类似资料:
  • 问题内容: 我有一个使用联接表建模的一对多关系: 这些表应该模拟一个t1与多个t2的关系。使用JPA为这些表建模的正确方法是什么? 问题答案: 一个T1到多个T2的典型表是在T2上有一个指向T1的外键。通常不需要T1_T2表。 这样,JPA结构将是一对多的,可能是双向的。 可能会有一些安排,以使您描述的结构起作用。您可以更改T1_T2: 在T2上添加唯一约束(以便仅允许一个T2) 那真的是你想要的

  • 我有两个多对多关联的表。 DB详细信息:用户-->列[Id,name]

  • 用户表结构:用户 id、名称、用户名、密码、创建时间、更新时间 文章表结构:文章 id、标题、内容、创建时间、更新时间 关系表:文章\用户 id、文章id、用户id处于活动状态、创建时间、更新时间 标签 id、名称、用户id、创建时间、更新时间 透视表项目用户与标记的关系。表:文章\用户\标签 标签号,物品号,用户号 我想连接这些表,以便可以像这样或类似的格式访问 并且应该能够创建/更新smth,

  • 比如我们要关联用户和角色之间的关系,就要用到多对多。多对多需要一张中间表来做关联。 定义 多对多关联会用到的注解: @ManyToMany、@JoinFromMiddle、@JoinToMiddle、@AutoSelect、@AutoInsert、@AutoUpdate、@AutoSave、@AutoDelete 如 imi-demo 中代码所示,类定义了一个$userRole属性和$role属性

  • 多对多关联 关联定义 例如,我们的用户和角色就是一种多对多的关系,我们在User模型定义如下: <?php namespace app\index\model; use think\Model; class User extends Model { public function roles() { return $this->belongsToMany('R

  • 比如我们有一张文章表,一张书籍表,一张标签表,一张标签关联表。文章和书籍共用标签库。 mysql> desc tb_article; +---------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra