我有两张桌子患者和医生:
CREATE TABLE "PATIENT" (
"PATIENT_ID" NUMBER NOT NULL ENABLE,
"PATIENT_NAME" VARCHAR2(40),
"AGE" NUMBER,
"SEX" VARCHAR2(12),
"PLACE" VARCHAR2(40),
"PHONE_NUMBER" NUMBER,
"DOCTOR_ID" NUMBER,
"REGISTRATION_DATE" DATE,
CONSTRAINT "PATIENT_PK" PRIMARY KEY ("PATIENT_ID") ENABLE,
CONSTRAINT "DOCTOR_ID" FOREIGN KEY ("DOCTOR_ID")
REFERENCES "DOCTOR" ("DOCTOR_ID") ENABLE
)
CREATE TABLE "DOCTOR" (
"DOCTOR_ID" NUMBER NOT NULL ENABLE,
"DOCTOR_NAME" VARCHAR2(40) NOT NULL ENABLE,
"PLACE" VARCHAR2(40),
"PHONE_NUMBER" NUMBER,
CONSTRAINT "DOCTOR_PK" PRIMARY KEY ("DOCTOR_ID") ENABLE
)
患者可以多次去看医生(也是不同的医生),所以我必须在一把钥匙上插入值。此处PATIENT_ID
是主键,因此无法接受该键上的多个值。
如何识别记录患者所有医生就诊的唯一记录?我如何创建符合我要求的患者表?
答案 0 :(得分:1)
创建一个用于记录访问的附加表:
CREATE TABLE DOCTOR_VISITS (
DOCTOR_ID int references DOCTOR(DOCTOR_ID)
PATIENT_ID int references PATIENT(PATIENT_ID)
VISIT_DATE DATE,
)
这将允许您跟踪访问任何医生的任何患者并记录访问日期。
答案 1 :(得分:1)
如果医生可以多次访问患者,请创建一个额外的表格,如
CREATE TABLE DOCTOR_VISITS (
DOCTOR_ID int references DOCTOR(DOCTOR_ID)
PATIENT_ID int references PATIENT(PATIENT_ID)
VISIT_DATE date
CONSTRAINT visit_pk PRIMARY KEY (DOCTOR_ID,PATIENT_ID,VISIT_DATE )
)
这将允许每天1次访问。如果您需要更多,我会在该日期字段中添加时间。
答案 2 :(得分:1)
我想以Tommo1977的答案为基础。 我绝对同意交叉表是正确的方法。 但是,请记住复合主键(例如[DOCTOR_ID,PATIENT_ID,VISIT_DATE(带或不带时间组件))通常通过许多其他表(作为外键)复制。 因此,我提出以下建议:
CREATE TABLE DOCTOR_VISITS (
VISIT_ID int
DOCTOR_ID int references DOCTOR(DOCTOR_ID)
PATIENT_ID int references PATIENT(PATIENT_ID)
VISIT_DATE date
CONSTRAINT visit_pk PRIMARY KEY (VISIT_ID )
)