gpt4 book ai didi

sql - SQL Server 表中的多个标识列

转载 作者:行者123 更新时间:2023-12-04 05:12:49 25 4
gpt4 key购买 nike

我有以下问题需要解决,我认为我需要一些帮助,因为我认为我认为的可能解决方案不正确:

我有一个带有 identity 的 SQL Server 表列。该表将存储当前数据以及历史数据,如下所述:

  • 让我们假设下表:
    CREATE TABLE Patient 
    (PatientKey int IDENTITY(1,1) NOT NULL,
    PatientId int,
    UpdateDate datetime NOT NULL,
    UpdateUser int NOT NULL,
    RecordStatus tinyint NOT NULL)
  • PatientKey是主键,也是标识列。 PatientId是唯一标识患者(当前记录以及历史记录)。 UpdateDate用于插入或更新患者的日期。 UpdateUser用于插入或更新患者的用户的 key 。 RecordStatus表示记录的状态:0 - 历史,1 - 当前,2 - 已删除。
  • 在上表 PatientId + RecordStatus = 1是唯一标识一个病人的当前记录。
  • 插入新患者时,插入新 PatientKey分配给记录(这是由 SQL Server 引擎自动完成的)和一个新的 PatientId也必须计算并分配给记录。另外,RecordStatus设置为 1。
  • 更新现有患者时,将更新当前记录以设置 RecordStatus等于0。然后,插入一个新行,其中包含患者修改后的数据。作为插入新 PatientKey 的一部分为记录生成,但没有新的 PatientId被计算(即 PatientId 不会改变)。另外,RecordStatus设置为 1。
  • 当一个病人被删除时,当前记录被更新为设置RecordStatus等于 2。

  • 问题在于 PatientId 的计算.我正在考虑使用 MAX(PatientId) + 1在存储过程中获取新的 PatientId分配给新记录,但这将是并发问题。如果多个用户同时创建新患者,SP 将基本上计算相同的 PatientId对于他们两个,然后我会在 table 上有两个不同的患者,他们的名字相同 PatientId .

    然后,我考虑将更新放在 SQL Server 事务中以阻止表,但我认为这太过分了。此外,对于复杂的更新,我认为该表会被阻塞太久,其他创建患者的尝试会超时。有没有更好的方法来实现这一点?

    谢谢。

    最佳答案

    为什么需要一个 PatientKey 列和一个 PatientId 列——不能将它们组合为一个字段吗?由于您的表是 Patient,因此将您的主键作为 PatientId 是有意义的,它可能是您的身份列。

    假设没有,考虑使用 Computed Column为您的患者 ID。

    这是一个很好的引用指南:

    http://msdn.microsoft.com/en-us/library/ms191250(v=sql.105).aspx

    祝你好运。

    关于sql - SQL Server 表中的多个标识列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14679944/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com