Oracle 病人表数据库设计

Oracle 病人表数据库设计,oracle,database-design,rdbms,Oracle,Database Design,Rdbms,我有两张病人和医生的桌子: 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, "REGISTRAT

我有两张病人和医生的桌子:

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
)

患者可以多次就诊(不同的医生也可以),因此我必须在一个键上插入值。此处
PATIENT\u ID
是主键,因此不能接受该键上的多个值


我如何才能唯一地识别一份记录,该记录记录了患者的所有就诊情况?如何创建符合我要求的患者表?

创建用于记录就诊的附加表:

CREATE TABLE DOCTOR_VISITS (
DOCTOR_ID int references DOCTOR(DOCTOR_ID)
PATIENT_ID int references PATIENT(PATIENT_ID)
VISIT_DATE DATE,
)

这将允许您跟踪任何就诊的患者并记录就诊日期。

创建一个额外的表格以记录就诊:

CREATE TABLE DOCTOR_VISITS (
DOCTOR_ID int references DOCTOR(DOCTOR_ID)
PATIENT_ID int references PATIENT(PATIENT_ID)
VISIT_DATE DATE,
)

这将允许您跟踪任何就诊的患者并记录就诊日期。

如果医生可以多次就诊患者,请创建其他表格,如

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 )
)

这将允许每天进行一次访问。如果您需要更多时间,我会将时间添加到该日期字段。

如果医生可以多次访问患者,请创建一个额外的表,如

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 )
)

这将允许每天进行一次访问。如果您需要更多时间,我会在日期字段中添加时间。

我希望以Tommo1977的答案为基础。 我绝对同意交集表是正确的方法。 但是,请记住,复合主键,例如[DOCTOR_ID、PATIENT_ID、Visite_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 )
)

我想以Tommo1977的答案为基础。 我绝对同意交集表是正确的方法。 但是,请记住,复合主键,例如[DOCTOR_ID、PATIENT_ID、Visite_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 )
)

如果患者在不同的就诊中就诊不同的医生,其id是否会更改?如果患者在不同的就诊中就诊不同的医生,其id是否会更改?如何管理日期属性,可能每次就诊的日期都会更改。我已在上表中添加了就诊日期字段。现在是否需要在患者表中添加医生idd as foreign key如果您要求患者有特定的医生,但他们可以访问任何医生,则您可以将其保留在中。如果您不需要专门链接他们,则删除医生ID fk。我将就诊日期作为时间戳。如何将当前日期和时间存储为时间戳如何管理日期属性,可能是每个就诊日期将更改我已在上面的表中添加了“就诊日期”字段。现在是否需要将“患者”表中的“医生id”作为外键?如果您要求患者有特定的医生,但他们可以就诊任何医生,则您可以将其保留在中。如果不需要将其链接,则删除医生idfk.我将就诊日期作为时间戳。如何将当前日期和时间存储为时间戳现在是否需要将患者表的医生id设置为外来key@techLearner:不再是了。现在是否有必要将患者表中的医生id设置为外来key@techLearner:不再是了。