【发布时间】:2019-02-21 09:17:55
【问题描述】:
我正在使用 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 |
【问题讨论】:
-
MySQL 和 SQL Server 是两种不同的 RDBMS,您实际使用的是哪一种?像这样的问题也很“固执”; Stack Overflow 不是讨论什么是“最佳”设计方式的地方。这不是特定的编码问题。如果你有一个编码问题,这里是什么?
-
第三张表确实应该有一个主键:
(CategoryId, SkillId)我没有看到为其添加生成的 ID 的好处 -
是时候阅读一本关于信息建模和数据库设计的教科书了。 PS不清楚你在问什么。但是,如果您在没有特定字符串/名称的情况下搜索了许多关于您的问题的清晰简洁的陈述,在考虑提出任何问题之前您应该这样做,那么您会发现这是一个常见问题解答。 (也许是关于是否应该将唯一的 id 列作为额外的键添加到表中。即在技术术语中,当已经存在自然键时添加代理键。)
-
我想我们应该重新提出这个问题。我已经重新措辞以符合规则。有了这几个变化 询问创建主键的方法是一个很好的问题。如何创建主键不是一个主要基于意见的问题,而是一个公开两种公认选项的机会:“自然键” vs “替代键”。在我看来,这是一个很好的问题。
-
@daniherrera 这个问题还不清楚。如果很清楚,它仍然是重复的。
标签: sql-server database-design