如何在N:M关系上创建主键?

时间:2019-02-21 09:17:56

标签: sql-server database-design

我正在使用SQL Server。我有2张桌子。

  
      
  1. 类别
  2.   
  3. 技能
  4.   

这些表看起来像

| SkillId | SkillName  | CreatedAt  |
=====================================
| 1       | programing | 01/02/2018 |

类别表

| Category| CategoryName | CreatedAt  |
=====================================
| 1       | Technical    | 01/02/2018 |

我有第三个表来映射关系。看起来像

| CategoryId | SkillId |
========================
| 1          | 4       |
| 2          | 3       |
| 2          | 4       |

我的问题是

正确的数据库设计方法是什么?

我尝试过的事情

我是否要为第三张表放置主键。就是这样吗?

| RowId | CategoryId | SkillId |
================================
| 1     | 1          | 4       |
| 2     | 2          | 3       |
| 3     | 2          | 4       |

1 个答案:

答案 0 :(得分:1)

您有两种方法吗?

  • 自然键:由CategoryId , SkillId组成的主键
  • 代理键:一个Id作为主键+ UNIQUE Constraint for CategoryId , SkillId

引用Wikipedia surrogate key explanation

  

数据库中的代理密钥(或合成密钥,实体标识符,系统生成的密钥,数据库序列号,事实密钥,技术密钥或任意唯一标识符)是以下任一者的唯一标识符建模世界中的实体或数据库中的对象。代理密钥不是从应用程序数据派生的,这不同于从应用程序数据派生的自然(或业务)密钥。

还有Wikipedia Natural key definition

  

自然密钥(也称为业务密钥)是一种在关系模型数据库设计中发现的唯一密钥,它由现实世界中已经存在的属性组成。在与业务相关的列中使用。换句话说,自然键是与该行内的属性具有逻辑关系的候选键。自然密钥有时称为域密钥。

此外,您还可以了解Unique Constraint at w3schools

  

UNIQUE约束确保一列中的所有值都不同。   UNIQUE和PRIMARY KEY约束都为一列或一组列的唯一性提供了保证。 PRIMARY KEY约束自动具有UNIQUE约束。但是,每个表可以有许多UNIQUE约束,但是每个表只能有一个PRIMARY KEY约束。