我是SQL Server的新手,如果你能在这里帮助我,我会非常感激。
医疗服务提供者也是如此,我们在内部为每位患者分配一个ID(例如1234
)。我目前正在构建另一个数据库,我只是想知道我可以使用内部ID作为主键,因为它们是唯一的吗?如果是这样,因为我不打算对主键进行任何计算,我可以将它们设置为主键的字符串/ char数据类型吗?
答案 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 会使患者编号成为主键)。这源于使用具有数千个表和多层次结构的相当大的数据库,其中自然键被证明可以提高查询速度,增强数据一致性并简化维护。但其他人可能会有不同的经历。
是的,在我看来,患者数似乎是完美的自然主要关键。