是否有一种方法可以使用SQL定义使用2个非唯一列的2个表之间的关系



在数据库的一次实际采访中,我得到了两个CSV文件,一个用于药物分配,显示了患者(patient_id列是唯一的(使用以下项目访问药物的唯一实例

药物支出(设施代码、患者id、体重、日期、出生日期(

另一个CSV文件设施详细信息显示了每个患者访问药物的设施的独特实例

设施_详细信息(设施名称、设施代码、地区(

这个想法是设计一个包含2个表的数据库,并在两者之间建立关系。从这两个文件的结构来看,常见的列是facility_code列。然而,设施_详细信息的设施_代码中的条目并不都是唯一的,因为2个健康中心共享相同的代码";MON";。

由于我们必须在创建关系后导入数据,因此外键约束中出现错误,表示两个表无法关联,因为facility_details中没有唯一的引用列。

ALTER TABLE drug_dispensation
ADD CONSTRAINT FOREIGN KEY (facility_code) REFERENCES facility_details(facility_code)

错误:被引用的表facility_details中没有与引用列列表匹配的主键或候选键

是否有办法在两个表之间建立关系?

结构和设置听起来基本上是可接受的,因此,评估您的部分内容可能是如何处理无效数据。

在识别导致您失败的重复方面,您已经做了所有正确的事情,现在您需要打电话询问如何处理它。

例如,删除其中一个,或者如果很明显应该是什么,则修改facility_code,并确保您所做的任何更改都有文档记录。

您可以在加载数据之前删除约束,然后对其进行修改,然后添加约束。。。或者,您可以按原样加载到临时表,在那里修改数据,然后加载到目标表。

我想说的是,你说patient_id列在药物支出中是唯一的,但它看起来允许每个患者有多个记录(例如在不同的日期和/或在不同的机构(。我认为有三个表是最有意义的——Patient_details(Patient_id、DOB……等(、Facility_details。体重可以计入患者详细信息,也可以计入药物支出,这取决于是在配药时服用,还是患者的固定值。

最新更新