2016-12-30 67 views
0

我是SQL Server的新手,如果能帮助我,我会非常感激。我可以将此列设置为主键吗?

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

+0

如果'ID'总是数字,那么使用'Integer'类型。整数类型并不意味着你必须对它们进行一些计算。在查询或排序结果时,整数可能比'Varchar' –

+0

'INT'数据类型定义为更常见且更快速的数据类型。 –

+0

当有些事情可能意味着某件事情不仅仅是关键时,要小心使用某些事物作为主键。如果由于“内部ID”发生改变或由于某些其他原因需要更改密钥,则密钥取决于外部因素,最好将其定义为正常字段,并使用数据库生成的密钥。 – trincot

回答

1

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

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

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

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

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

2

总之,是的,你可以但它是不推荐!

给你一些抬起头:

  • 主键不应该改变
  • 不能使用自然键或按键形式的其它系统
  • 他们不能有任何公式
  • 使用短但合适的钥匙类型

如果您有一个外部钥匙,你想用它来找一些患者,为它创建另一列并添加UNIQUE Constraint。 只是不要忘了添加索引该列

阅读此篇我的更多信息:

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

1

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

0

是的,如果它们是唯一的,你可以使用你的内部ID;对于char/varchar数据类型,PK限制为900字节。所以如果你的ID是int就没问题。但是,如果你的身份证可以随时间改变,或者可以重复使用,那么我强烈建议不要使用它们来避免混乱。我更喜欢使用代理键,如身份

0

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

可能将生成的技术ID用作表的主键,并且仅将患者编号作为表中的另一个字段(当然仍然具有唯一约束,因为它仍然是唯一的业务关键字识别患者)。是否做这件事主要是个人喜好和经验。我比ID更喜欢自然键(因此会使患者编号成为主键)。这起源于与具有数千个表和多个层次结构的相当大的数据库一起工作,其中自然键被证明导致更快的查询,增强的数据一致性和更容易的维护。不过,其他人可能有不同的经历。

所以,在我看来,病人号码似乎是完美的自然主键。

相关问题