我有一张名为'Patient_detail'的表。此表中有4列。他们是:
patient_id
主键(非空)visit_serial_ID
主键(非空)examination
plan
现在,如何在'examination'和'plan'列中插入多个记录,对照表'Patient_detail'的单个主键'patient_id'和'visit_serial_ID'?
字段的数据类型如下:
patient_id
:number(11)visit_serial_ID
:number(5)examination
:varchar2(50)plan
:varchar2(50)答案 0 :(得分:12)
你不能(这是主键的重点 - 每个值有一行)。您需要将其拆分为几个表,一个用于访问,一个用于患者。访问表与患者表的主键列具有外键关系。
修改强>
您需要考虑您所代表的真实现实事物以及它们之间的相互关系。对于每个单独的现实生活,你通常会有一个单独的表。这允许您追求的一对一,多对一,多对多关系。例如,您代表的是访问过的患者,在此期间有多个检查,每个检查都有相应的计划(这是正确的吗?)。因此,您应该有一个包含患者数据的患者表,一个包含访问数据的访问表,一个包含检查数据的检查表,甚至可能包含计划数据的计划表。
访问表与患者表具有多对一关系(患者可以访问多个时间)。为实现此目的,它应该具有patient_id列的外键。同样,检查表与访问表有多对一的关系,因此,它应该具有访问表主键的外键。
还有其他方法可以分开。正如Sascha所说,查找正常化。
答案 1 :(得分:4)
您可以这样做,但您的主键将不再是主键,您的数据将被非规范化。执行此操作的最佳方法是将此表拆分为两个单独的表,如下所示:
Patients
----------
PatientId
Visits
----------
VisitSerialId
Examination
Pland
PatientId
请注意,Visits
表具有Patients
表的外键实现。这样您就可以拥有所需的1:M
关系。
答案 2 :(得分:1)
你做不到。这就是主键 - 每一行都是独一无二的。您需要一个具有自己的主键的单独表,并具有与该表的外键关系,以便存储多个条目。这将是一个简单的一对多关系。
答案 3 :(得分:0)
因为达拉斯说你做不到。您正在寻找的是呼叫规范化。