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

时间:2016-12-30 16:00:06

标签: sql sql-server database-design primary-key

我是SQL Server的新手,如果你能在这里帮助我,我会非常感激。

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

5 个答案:

答案 0 :(得分:2)

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

为了让你有所了解:

  • 主键永远不应更改
  • 您不能使用自然键或其他系统的密钥
  • 他们不能有任何公式
  • 使用简短但合适的密钥类型

如果您要使用外部密钥来查找某些患者,请为其创建另一个列并向其添加UNIQUE Constraint。 只是不要忘记为该列添加索引

阅读我的这篇文章了解更多信息:

http://pilpag.blogspot.dk/2016/06/relational-database-designsimple-rules.html

答案 1 :(得分:1)

主键的条件是表中的键是唯一的,而不是NULL

您的患者身份似乎具有这些特征。

尽管如此,开发合成主键有很好的理由(根据数据库自动递增/标识/串行)。更重要的是,实际的患者ID可能是敏感信息。例如,患者在登录时可能会使用该ID,或者可能会在发票上打印。

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

如果“患者ID”是政府ID(“社会安全号码”)或电子邮件地址,这可能会更加明显。

答案 2 :(得分:1)

是的,但ID也可以是数字和主键 - 它不必是字符串。只要ID是唯一的,你应该没问题。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

是的,在我看来,患者数似乎是完美的自然主要关键。