如何在以一对一的关系提供患者诊断信息之后插入计费信息

问题描述:

我试图制作的应用程序是医院管理系统。在EnterPatientDiagnosis表单(屏幕截图在最后给出)中,我需要添加患者的诊断信息1st然后我需要添加其关联的结算信息。这里,两个表主键列都是一个标识列。 这是许多系统中的一个共同步骤,但我仍然无法找到如何实现它的细节。如何在以一对一的关系提供患者诊断信息之后插入计费信息

我想到的一个解决方案是插入所有的诊断信息,使用存储过程保持FK_billId属性为空,并获取DiagnosisId作为输出参数形式的存储过程。然后,当用户提交账单信息时,我将使用BillId和DiagnosisId更新诊断表中先前插入的行。但我不喜欢这种方法有两个原因:

首先,因为它有一个额外的更新查询。因为,如果我使用DiagnosisId作为这两个数据库表之间的外键而不是BillId,那么不需要此更新查询。但是我还没有发现任何地方给出任何规则/优先级,你应该在一对一关系中使用哪个Key作为FK。

其次,它与我创建的实体类发生冲突。我已经在我的实体层为这2个表格手动创建了2个类。所以,如果我想通过实体层插入行,那么我必须给Billing类一个名为DiagnosisId的新属性,这与我的数据库表模式相矛盾。 这里是2班在实体层:

public class EntityPatientDiagnosis 
{ 
    //Diagnosis Id is automatically assigned 
    public int DiagnosisId { get; set; } 
    public int PatientId { get; set; } 


    public string Symptoms { get; set; } 
    public string DiagnosisProvided { get; set;} 

    public string AdministeredBy { get; set; } 

    public DateTime DateofDiagnosis { get; set; } 
    public string FollowUpRequired { get; set; } 
    public DateTime DateOfFollowUp { get; set; } 
    public int BillId { get; set; } //BillId -> Foreign Key 

} 

public class EntityBilling 
{ 
    //BillId -> Primary Key ->set automatically 
    public int BillId { get; set; } 
    public int BillAmount { get; set; } 
    public string CardNumber { get; set; } 
    public string ModeOfPayment { get; set; } 
} 

这里的表和Web窗体的ERD的画面: ERD of One-to-One R

Enter Patient Diagnosis Web Form

+0

不知道我是否完全理解。但是,您可以将这些信息保存在您的类对象中,直到添加了帐单信息。一旦你们两个都先插入账单表,那会给你BillId作为诊断表的FK。 –

你可以尝试不同的方法。您可以更改实体PatientDiagnosis和帐单之间的关系。因此,首先您可以创建一个PatientDiagnosis条目,然后为其创建一个Billing条目。

public class EntityPatientDiagnosis 
{ 
    //Diagnosis Id is automatically assigned 
    public int DiagnosisId { get; set; } 
    public int PatientId { get; set; } 
    public string Symptoms { get; set; } 
    public string DiagnosisProvided { get; set;} 
    public string AdministeredBy { get; set; } 
    public DateTime DateofDiagnosis { get; set; } 
    public string FollowUpRequired { get; set; } 
    public DateTime DateOfFollowUp { get; set; } 

} 


public class EntityBilling 
{ 
    //BillId -> Primary Key ->set automatically 
    public int BillId { get; set; } 

    //DiagnosisId -> Foreign Key unique 
    public int DiagnosisId { get; set; } 

    public int BillAmount { get; set; } 
    public string CardNumber { get; set; } 
    public string ModeOfPayment { get; set; } 
} 
+0

两个实体之间的关系取决于它们的交互以及它们在系统中的定义。 如果在您的系统中,诊断有多个帐单,则应该使用一对多关系,如果不是,则可以使用一对一关系。 –

+0

我还提到在我的文章“首先,因为它有一个额外的更新查询....”。但我不想这样做,因为首先我给出的项目要求是以这种方式设置了表格模式。另外我不明白为什么它在你改变关系时起作用。因为它的一对一关系,据我所知,它不应该使用哪个表的主键来创建关系。即使 - 虽然它在这里有明显的区别。我也想知道不同的网上商店和其他系统/网站是如何做到的。 –