表格需要多个标识符

3

我不是SQL专家,所以我肯定做错了什么。我在这里读到一些关于需要主键的问题。按照我创建这个表的方式,我找不到实际上有一个唯一键的方法。这是一个调查类型的数据库。我有一个表用于主要细节,如日期、分诊号和涉及的人员。另一个表用于问题结果,还有一个表用于评论。我本来想让分诊号唯一,但是可能会有多个人参与,所以同样的分诊号会被多次使用。涉及的人员也可能出现多次。唯一真正的事情是将人员与分诊号组合起来。我考虑过自动键,但它没有任何作用。对于调查类型的表,使用两个标识符是否可以是可接受的做法?


2
听起来你有一个多对多的关系。 - Conrad Frix
这使得最终问题的答案是“是”。 - Dan Bracuk
这样可以吗,还是我需要重新设计后端?我在几个地方读到有时候可以使用第三张表,但感觉好像也不必要。 - Jeebwise
2
看起来对我来说还不错。它甚至有一个名字——复合主键。 - Dan Bracuk
我曾考虑过自动生成密钥,但它没有任何意义——它可以用来创建唯一的标识符... - rhughes
2个回答

2

重要部分:

"... 可以涉及多人,因此相同的分类号码可能会被多次使用。参与的人也可以出现多次。"

根据您的评论,例如这两个字段中的数据:

 Triage  Person
 ------  ------
    1     PersonA
   1     PersonB
 ...
    7     PersonA
   7     PersonB

如果Person字段中记录的每个人都具有唯一标识符,则可以使用Triage和Person组合键。也就是说,如果每个人的值都是像“John Smith”这样的名称,那么如果有2个或更多个回答调查的John Smith,您可能会遇到问题。因此,您的Person值本身必须能够唯一标识人员。假设分诊号已经区分开(即,没有一个分诊号代表超过一个语义相关的分诊位置),如果在任何时候,您的调查创建了多个唯一的分诊-人员组合,则这两个字段作为组合键将适用于您。
每个其他表的外键应该是主表的组合键组合,但如果另外两个表可以合并到主表中,则考虑将其合并以减少连接负担。例如:如果评论表仅存储单个字段中的评论而没有其他信息,则为什么不将该字段包含在主表中并且删除评论表呢?

2

您的问题比较笼统,我没有足够的信息给您一个确定的答案,但希望下面的评论能有所帮助。

使用复合主键(由2个或更多列组成的键)并不是问题。它通常用于链接表中,例如在多对多关系中。

需要考虑的一件事是,如果您想从其他表中引用具有复合主键的表,您将不得不在外键中引用2个列,在所有连接中都要这样做等等。创建一个单独的列作为主键(例如自动递增数字)可能更容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接