我绝不是 SQL 专家,所以我确信我做错了什么。我在这里阅读了一些关于需要主键的问题。我创建此表的方式我找不到真正拥有唯一键的方法。它是一个调查类型的数据库。我有一个表格,其中包含主要详细信息,例如日期、分类编号和相关人员。问题结果的另一个表格和评论的另一个表格。我会让分类变得独一无二,但可以涉及不止一个人,因此相同的分类编号将被多次使用。涉及的人也可以出现不止一次。唯一真正独特的是将人与分类相结合。我想过一个自动钥匙,但它没有用。对于调查类型表,使用两个标识符是否可以接受?
2 回答
你的问题很笼统,我没有足够的信息给你一个明确的答案,但希望我下面的评论能有所帮助。
使用复合主键(由 2 列或更多列组成的键)不是问题。它更常用于链接表,例如多对多关系。
您应该考虑的一件事是,如果您还想从其他表中引用具有复合主键的表,则必须引用外键中的 2 列、所有连接等。这可能更容易为主键创建一个单独的列(例如自动递增的数字)。
重要的部分:
“......可以涉及不止一个人,因此相同的分类号码将被使用不止一次。相关人员也可以出现不止一次。”
根据您的评论,这两个字段中的数据,例如:
Triage Person
------ ------
1 PersonA
1 PersonB
...
7 PersonA
7 PersonB
如果在 Person 字段中记录的每个人都是唯一可识别的,那么 Triage 和 Person 可以创建一个复合键。也就是说,如果 ea. person value 是像“John Smith”这样的名字,如果有 2 个或更多 John Smiths 回答调查,您可能会遇到问题。因此,您的 Person 值本身必须唯一地识别人员。假设分类号。被区分(即,没有分类编号代表多个语义相关的分类位置),当且仅当您的调查在任何时候都不会创建多个唯一的分类-人员组合时,这两个字段作为复合键才对您有效.
其他每个表的外键应该是主表的复合键组合,但是如果其他两个表可以合并到主表中,请考虑减少连接负担。例如:如果评论表只在一个字段中存储评论而仅此而已,为什么不将该字段包含在主表中并去掉评论表?