Sql 我可以将此列设置为主键吗?
我是SQL Server新手,如果您能在这里帮助我,我将不胜感激Sql 我可以将此列设置为主键吗?,sql,sql-server,database-design,primary-key,Sql,Sql Server,Database Design,Primary Key,我是SQL Server新手,如果您能在这里帮助我,我将不胜感激 医疗保健提供者也是如此,我们在内部为每个患者分配一个ID(例如,1234)。我目前正在构建另一个数据库,我只是想知道,如果我们的内部ID是唯一的,我可以使用它们作为主键吗?如果是这样,因为我不打算对主键进行任何计算,我可以将它们设置为主键的string/char数据类型吗?主键的条件是该键在表中是唯一的,并且从不NULL 您的患者id似乎具有这些特征 也就是说,有充分的理由开发一个合成主键(自动递增/标识/序列,取决于数据库)。更
医疗保健提供者也是如此,我们在内部为每个患者分配一个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(因此我会将患者编号作为主键)。这源于与具有数千个表和多层次结构的大型数据库一起工作,在这些数据库中,自然键被证明能够加快查询速度、增强数据一致性并简化维护。不过,其他人可能有不同的经历
是的,在我看来,患者编号似乎是最自然的主键。如果我理解正确,您为每个患者分配了一个编号,以便唯一地识别他们。因此,报告将包含患者编号,而不仅仅是患者姓名,这可能会模棱两可。您永远不会更改患者编号,因为这样您就必须在所有数据库中更改该编号,并且必须重新打印患者上仍然需要的所有文档。这使得该数字成为任何情况下患者表的完美主键