虽然我一直在查询SQL数据库一段时间,但我仍然是实际构建好表的新手。我经常遇到的一件事就是使用主键。
在一个表格中,我现在正在创建一些报警设备上的记录错误,我需要5列。
park
和code
列唯一标识一个网站(尽管park
列是atm。未使用)。然后会有一个serial
列标识相关设备,以及一个包含错误代码的error
。最后,记录错误时会有timestamp
。
每个站点都有几个不同的设备,一台设备可能会报告几个错误。更正错误后,将从表中删除该行。
因此,为了唯一地识别错误,我们需要检查park
,code
,serial
和fault
。
所有这些似乎都是基于可能运行的查询的索引的良好候选者。但是,将所有这些定义为组合主键似乎并不正确,它们毕竟是表中的几乎所有列!
我曾多次遇到类似问题,我从未觉得自己找到了一个好的解决方案。任何人都可以为这样的表建议一些好的做法,其中大多数(甚至所有)列都需要唯一标识一行?
答案 0 :(得分:3)
很多人会告诉您在该表中添加一个ID号,并将其作为主键。
我不是那些人之一。
如果需要列{park,code,serial,fault}来唯一标识一行,从而防止重复,那么dbms需要知道这一点。您可以通过以下两种方式之一向dbms通知该要求。
在某些情况下,使用较小的代理键(ID号)作为主键是有意义的。这并不能减轻你告知dbms真实情况的责任。 (使用NOT NULL UNIQUE (park, code, serial, fault)
。)我不认为这适用于您的情况。