我想要的应用程序是医院管理系统。在EnterPatientDiagnosis表格中(截图在最后给出),我需要添加患者的诊断信息,然后我需要添加其相关的计费信息。这里,两个表主键列都是标识列。 这是许多系统中的常见步骤。但我仍然无法找到有关如何实现它的详细信息。
我想到的一个解决方案是插入所有诊断信息,使用存储过程保持FK_billId属性为空,并从存储过程中获取DiagnosisId作为输出参数。然后当用户提交账单信息时,我将使用BillId和DiagnosisId更新诊断表中先前插入的行。但我不喜欢这种方法有两个原因:
首先,因为它有一个额外的更新查询。因为,如果我在这2个数据库表而不是BillId之间使用DiagnosisId作为外键,那么就不会是否需要此更新查询。但是我没有找到任何规则/优先权,你应该在一对一的关系中使用哪个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图片:
答案 0 :(得分:1)
您可以尝试不同的方法。您可以更改实体PatientDiagnosis和Billing之间的关系。因此,首先您可以创建PatientDiagnosis条目,然后为其创建一个Billing条目。
select
id, STD_ID, SUB_ID, ASG_MARK, TH_MARKS, PR_MARCHAR,
(ASG_MARK + TH_MARKS + PR_MARCHAR ) as total,
CASE
WHEN (ASG_MARK + TH_MARKS + PR_MARCHAR) BETWEEN 91 AND 100
THEN 'A1'
WHEN (ASG_MARK + TH_MARKS + PR_MARCHAR) BETWEEN 81 AND 90
THEN 'B1'
WHEN (ASG_MARK + TH_MARKS + PR_MARCHAR) BETWEEN 71 AND 80
THEN 'C1'
WHEN (ASG_MARK + TH_MARKS + PR_MARCHAR) BETWEEN 61 AND 70
THEN 'D1'
WHEN (ASG_MARK + TH_MARKS + PR_MARCHAR) BETWEEN 51 AND 60
THEN 'E1'
WHEN (ASG_MARK + TH_MARKS + PR_MARCHAR) BETWEEN 41 AND 50
THEN 'F1'
ELSE 'AB'
END AS GRADE
from
(select
id, STD_ID, SUB_ID,
case ISNUMERIC(PR_MARCHAR)
when 1 then CAST(PR_MARCHAR as decimal)
else 0
end as PR_MARCHAR,
case ISNUMERIC(TH_MARKS)
when 1 then CAST(TH_MARKS as decimal)
else 0
end as TH_MARKS ,
case ISNUMERIC(ASG_MARK)
when 1 then CAST(ASG_MARK as decimal)
else 0
end as ASG_MARK
from
MARKS_ENTRY
group by
id, STD_ID, SUB_ID, ASG_MARK, TH_MARKS, PR_MARCHAR) MARKS