sql - 有没有办法使用 SQL 定义使用 2 个非唯一列的 2 个表之间的关系
问题描述
在数据库的实际面试练习中,我得到了 2 个 CSV 文件,其中一个用于药物分配,显示患者的独特实例(患者 ID 列是唯一的)使用以下项目访问药物
drug_dispensation (facility_code,patient_id,weight,date,DOB)
另一个 CSV 文件设施详细信息显示了每位患者获取药物的设施的独特实例
设施详情(设施名称、设施代码、地区)
这个想法是设计一个包含 2 个表的数据库并在两者之间建立关系。查看 2 个文件的结构,常见的列是 facility_code 列。但是,facility_details 中的条目并非都是唯一的,因为 2 个保健中心共享相同的代码“MON”。
由于我们必须在创建关系后导入数据,因此外键约束出现错误,指出两个表无法关联,因为 facility_details 中没有唯一引用列。
ALTER TABLE drug_dispensation
ADD CONSTRAINT FOREIGN KEY (facility_code) REFERENCES facility_details(facility_code)
错误:被引用的表 facility_details 中没有与引用列列表匹配的主键或候选键
有没有办法可以在两个表之间建立关系?
解决方案
结构和设置听起来大多是合理的,所以你被评估的部分内容大概是你如何处理无效数据。
您已经完成了所有正确的事情来识别导致您失败的重复项,现在您需要就如何处理它进行调用。
例如,删除其中一个,或者如果它应该是明显的,则修改设施代码 - 并确保记录您所做的任何更改。
您可以在加载数据之前删除约束,然后对其进行修改,然后添加约束......或者您可以按原样加载到临时表,在那里修改数据,然后加载到目标表。
我想说的是,你说 patient_id 列在 drug_dispensation 中是唯一的,但它看起来设置为允许每位患者有多个记录(例如,在不同的日期和/或在不同的设施)。我认为拥有三个表最有意义 - Patient_details(患者 ID、出生日期...等)、Facility_details(设施名称、设施代码、地区)和药物分配(设施代码、患者 ID、日期)。体重可以输入到 patient_details 或 drug_dispensation 中,具体取决于它是在分配时获取的,还是该患者的固定值。
推荐阅读
- python - 列表是否应该始终转换为元组?
- html - 在移动视图中单击后,我的 bootstrap 5 导航栏无法关闭
- java - MediaPlayer 的方法 isPlaying() 不起作用
- laravel - Laravel 请求参数
- c++ - C++ 如何区分 > 运算符和连续的两个 >> 标记(即在模板中)?
- python - 来自python中定义列表的用户输入
- express - NextJS Auth with express - 刷新令牌
- rust - 如何在 nom 的解析器中使用解析器?
- kdb - 从 kdb 中的嵌套表中删除键列表
- node.js - 缩小 node_modules 目录?