【问题标题】:Unique keys mean they are primary keys?唯一键意味着它们是主键?
【发布时间】:2013-05-21 01:52:26
【问题描述】:

一个客户可以进行多次预订。 .a booking 中的每个房间都可以入住 由一两个客户。一个客户可以占用几个。房间。一顿饭 booking 通过 tableNumber 属性分配给一个表。 属性 name 和 phoneNumber 的组合是唯一的,属性 roomNumber 是 独一无二。

唯一键是否意味着它的主键? 这是否意味着 name 和 phoneNumber 都是主键?

附加问题:

同一个键可以是表中的外键和主键吗?

【问题讨论】:

  • 唯一键意味着它是...唯一的。这使它成为一个候选键和一个理想的主键,但不一定必须那样。
  • 那么这是否意味着所有唯一键都不是主键?可能只有他们中的一个可能是 PK 对吧?
  • 只有一个可以作为主键@aayat,一张桌子上不可能有多个。
  • 在一张桌子上?是的。
  • 那么它是否被认为是复合键?

标签: class database-design uml


【解决方案1】:

唯一键是否意味着它的主键?

没有。首先,每个键都是唯一的,因此说“唯一键”而不是“键”是多余的。同一张表中的所有键在逻辑上都是等价的,但出于方便和历史原因,我们挑出其中一个并将其称为“主键”,而将其余键称为“备用键”。

这是否意味着姓名和电话号码都是主键?

不,这里没有两个键(更不用说两个 primary 键了)。只有一个复合(又名“compound”、“complex”)键,由两个字段组成,也恰好是主键。

这是否是一个键是另一回事......

【讨论】:

  • 谢谢我现在明白了。它被认为是一个复合键。
【解决方案2】:

不,唯一属性仅指该属性具有唯一值,不会在表的任何其他行中重复。它可以是主键,但您必须在关系设计中指明它。

here的一些要点

  • 一个表最多可以有一个主键,但可以有多个唯一键。
  • 主键是唯一指定行的列的组合。
  • 一个区别是主键具有隐式的 NOT NULL 约束,而唯一键则没有。因此,唯一键列中的值可能为 NULL,也可能不是值)

【讨论】:

  • “最多一个 NULL 字段” 是错误的。您可以拥有任意数量的 Null。 (只有 SQL-Server 有这种奇怪的行为,“唯一列中只有一个 NULL”,这违反了 SQL 标准。)
  • @vivoconunxino 我还有一个问题。同一个键可以是表中的外键和主键吗?
  • 是的,为什么不呢?例如,在表 A 和 B 的关系 n:n 中,当您需要一个额外的表 C 来将 A 的一个实例与 B 的许多实例相关联时,反之亦然。您需要两个字段,每个表的外键,并且两者都可以形成复合主键。在其他情况下,当表 A 只有一个主键并且它也是引用另一个表 B 的外键时......好吧,你可以这样做,但我认为你也可以将表 A 中的所有字段添加到以更简单的方式直接访问表 B。
猜你喜欢
  • 2018-07-25
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
相关资源
最近更新 更多