实体中的主键

时间:2012-09-11 19:51:07

标签: database database-design entity primary-key entity-relationship

如果没有唯一列可以识别表中的每一行,

然后我的主键至少是一组两个字段。

这是对的吗?

如果它是正确的,那么当我绘制关系图时,我必须强调构成主键的两个属性?

谢谢你

3 个答案:

答案 0 :(得分:2)

以下是一些术语:

  • 超级密钥是一组列,它们一起唯一地标识行。
  • 候选键(或只是:“key”)是最小的 1 超级键。有时一个键只包含一个列,有时它包含几个(在这种情况下它被称为“复合”)。
  • 对于practical reasons,我们会将密钥归类为主要备用。一个表有一个主键和零个或多个备用键。
  • 如果密钥来自数据的固有属性,则“自然”。换句话说,它“意味着”某种东西。
  • 如果密钥本身没有任何意义,则“代理” - 只有用于识别目的。它通常实现为自动递增整数,但可能还有其他策略,如GUID(对复制很有用)。自然键复合很常见,但代理人几乎不会发生这种情况。

如果没有“明显”的自然键,整行总是可以作为键 2 。但是,这很少是实用的,在这种情况下,您通常会为了识别行而引入代理键。

Sometimes,但并非总是如此,在现有的自然密钥中引入代理商以及是很有用的。

ER图将清楚地识别PK 3 ,无论是天然的还是替代的,以及它是否是复合的。这看起来如何取决于使用的符号,但PK通常以图形方式绘制,并可能以“PK”为前缀。


1 I.e。如果您要从中删除任何列,它将不再是唯一的。

2 数据库表是“关系”的数学概念的物理表示。由于设置了关系,所以没有任何目的可以有两个相同的行,所以至少整行必须是唯一的(一个元素在集合中或者不是 - 它不能在集合中“两次”,如反对multiset)。

3 假设它不仅仅是实体级别,那么根本不显示任何属性。

答案 1 :(得分:1)

你说的是正确的。从技术上讲,主键和唯一键可以是两个不同的东西。您可以在表或实体上拥有唯一标识该实体的主键。在同一个表中,您可以使用唯一键约束,然后可以使用该约束来确保根据您选择的条件,没有两行最终具有相同的属性。因此,您可以在同一个表上拥有两者主键和唯一约束。 只需在数据库中自动生成一个主键列,然后选择表中要用于强制执行唯一键约束的两列

答案 2 :(得分:0)

如果您没有主键,则可以识别您的数据,但这不符合要求。

作为最佳做法,您可以在桌上使用小学。

首选项是使用自动增量列作为主键