Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我可以将此列设置为主键吗?_Sql_Sql Server_Database Design_Primary Key - Fatal编程技术网

Sql 我可以将此列设置为主键吗?

Sql 我可以将此列设置为主键吗?,sql,sql-server,database-design,primary-key,Sql,Sql Server,Database Design,Primary Key,我是SQL Server新手,如果您能在这里帮助我,我将不胜感激 医疗保健提供者也是如此,我们在内部为每个患者分配一个ID(例如,1234)。我目前正在构建另一个数据库,我只是想知道,如果我们的内部ID是唯一的,我可以使用它们作为主键吗?如果是这样,因为我不打算对主键进行任何计算,我可以将它们设置为主键的string/char数据类型吗?主键的条件是该键在表中是唯一的,并且从不NULL 您的患者id似乎具有这些特征 也就是说,有充分的理由开发一个合成主键(自动递增/标识/序列,取决于数据库)。更

我是SQL Server新手,如果您能在这里帮助我,我将不胜感激


医疗保健提供者也是如此,我们在内部为每个患者分配一个ID(例如,
1234
)。我目前正在构建另一个数据库,我只是想知道,如果我们的内部ID是唯一的,我可以使用它们作为主键吗?如果是这样,因为我不打算对主键进行任何计算,我可以将它们设置为主键的string/char数据类型吗?

主键的条件是该键在表中是唯一的,并且从不
NULL

您的患者id似乎具有这些特征

也就是说,有充分的理由开发一个合成主键(自动递增/标识/序列,取决于数据库)。更重要的是,实际的患者ID可能是敏感信息。例如,患者可能在登录时使用该id,也可能打印在发票上

在整个数据库中重复敏感信息可能不是一个好主意。出于这个原因,一个“内部”id将被用来指代表中的患者,所有敏感信息将包含在一个或几个表中


如果“患者id”是政府id(“社会保险号”)或电子邮件地址,则这一点可能更为明显。

主键的条件是该键在表中是唯一的,并且从不
NULL

您的患者id似乎具有这些特征

也就是说,有充分的理由开发一个合成主键(自动递增/标识/序列,取决于数据库)。更重要的是,实际的患者ID可能是敏感信息。例如,患者可能在登录时使用该id,也可能打印在发票上

在整个数据库中重复敏感信息可能不是一个好主意。出于这个原因,一个“内部”id将被用来指代表中的患者,所有敏感信息将包含在一个或几个表中


如果“患者id”是政府id(“社会保险号”)或电子邮件地址,这可能会更明显。

简言之,可以,但根本不建议使用它

给你一些提示:

  • 主键永远不应该改变
  • 不能使用自然密钥或其他系统中的密钥
  • 他们不能有任何公式
  • 使用短但合适的键类型
如果您有一个要用于查找某些患者的外部密钥,请为其创建另一列并添加到该列中。 只是别忘了为该列添加索引

有关更多信息,请阅读我的这篇文章:


简而言之,是的,你可以,但根本不推荐

给你一些提示:

  • 主键永远不应该改变
  • 不能使用自然密钥或其他系统中的密钥
  • 他们不能有任何公式
  • 使用短但合适的键类型
如果您有一个要用于查找某些患者的外部密钥,请为其创建另一列并添加到该列中。 只是别忘了为该列添加索引

有关更多信息,请阅读我的这篇文章:


是的,但ID也可以是数字和主键-它不必是字符串。只要ID是唯一的,就可以了。

是的,但ID也可以是数字和主键-它不必是字符串。只要ID是唯一的,您就可以了。

是的,如果内部ID是唯一的,您可以使用它们;char/varchar数据类型的PK限制为900字节。因此,如果您的ID为int就可以了。但是,如果您的ID可以随时间变化,或者可以为多个患者重复使用,我强烈建议不要使用它们以避免混乱。我更喜欢代理密钥,比如身份

是的,如果内部ID是唯一的,您可以使用它们;char/varchar数据类型的PK限制为900字节。因此,如果您的ID为int就可以了。但是,如果您的ID可以随时间变化,或者可以为多个患者重复使用,我强烈建议不要使用它们以避免混乱。我更喜欢一个代理密钥,比如一个标识

如果我理解正确,您将为每个患者分配一个号码,以便唯一地识别他们。因此,报告将包含患者编号,而不仅仅是患者姓名,这可能会模棱两可。您永远不会更改患者编号,因为这样您就必须在所有数据库中更改该编号,并且必须重新打印患者上仍然需要的所有文档。这使得此数字成为任何数据库中患者表的完美主键

您可以使用生成的技术ID作为表的主键,并将患者编号仅作为表中的另一个字段(当然,这仍然具有唯一约束,因为它仍然是唯一标识患者的业务键)。是否这样做主要取决于个人偏好和经验。我更喜欢自然键而不是ID(因此我会将患者编号作为主键)。这源于与具有数千个表和多层次结构的大型数据库一起工作,在这些数据库中,自然键被证明能够加快查询速度、增强数据一致性并简化维护。不过,其他人可能有不同的经历


是的,在我看来,患者编号似乎是最自然的主键。

如果我理解正确,您为每个患者分配了一个编号,以便唯一地识别他们。因此,报告将包含患者编号,而不仅仅是患者姓名,这可能会模棱两可。您永远不会更改患者编号,因为这样您就必须在所有数据库中更改该编号,并且必须重新打印患者上仍然需要的所有文档。这使得该数字成为任何情况下患者表的完美主键