我正在使用SQL Server。我有2张桌子。
- 类别
- 技能
这些表看起来像
| 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 |
答案 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约束。