4

虽然我已经使用查询 SQL 数据库工作了一段时间,但在实际构建好表方面我还是个新手。我经常纠结的一件事是使用主键。

在我现在创建的用于记录某些警报设备上的错误的表中,我需要 5 列。和列唯一parkcode标识一个站点(尽管该park列是 atm. 未使用)。然后有一serial列标识有问题的设备,以及一个error包含错误代码的列。最后timestamp,当记录错误时有一个 for。

每个站点都有几个不同的设备,一个设备可能会报告几个错误。更正错误后,将从表中删除该行。

因此,要唯一识别错误,我们需要检查parkcode和。根据可能运行的查询,所有这些似乎都是索引的良好候选者。但是,将所有这些定义为组合主键对我来说似乎并不正确,它们毕竟几乎是表中的所有列!serialfault

我曾多次为类似的问题而苦苦挣扎,但我从未觉得自己找到了一个好的解决方案。任何人都可以为这样的表提出一些好的做法,其中大多数(甚至所有)列都需要唯一标识一行?

4

1 回答 1

3

很多人只会告诉你在该表中添加一个 id 号,并将其作为主键。

我不是那些人中的一员。

如果需要列 {park, code, serial, fault} 来唯一标识一行,从而防止重复,那么 dbms 需要知道这一点。您可以通过以下两种方式之一通知 dbms 该要求。

  • 主键(停车、代码、串行、故障)
  • NOT NULL UNIQUE(停放、代码、序列号、故障)

在某些情况下,使用较小的代理键(ID 号)作为主键是有意义的。这并不能免除您通知 dbms 真实情况的责任。(有NOT NULL UNIQUE (park, code, serial, fault)。)不过,我认为这不适用于您的情况。

于 2011-11-10T12:34:56.543 回答