gpt4 book ai didi

sql - 在不违反主键和唯一约束的情况下更改表结构

转载 作者:搜寻专家 更新时间:2023-10-30 20:22:54 24 4
gpt4 key购买 nike

Here是我的逻辑模型。

下面是表结构及其约束

医生

CREATE TABLE doctor (
doctor_id NUMBER(4) NOT NULL,
doctor_title VARCHAR2(2) NOT NULL,
doctor_fname VARCHAR2(50),
doctor_lname VARCHAR2(50),
doctor_phone CHAR(10) NOT NULL
);
ALTER TABLE doctor ADD CONSTRAINT doctor_pk PRIMARY KEY ( doctor_id );

程序

CREATE TABLE procedure (
proc_code NUMBER(5) NOT NULL,
proc_name VARCHAR2(100) NOT NULL,
proc_description VARCHAR2(300) NOT NULL,
proc_time NUMBER(3) NOT NULL,
proc_std_cost NUMBER(7, 2) NOT NULL
);

ALTER TABLE procedure ADD CONSTRAINT procedure_pk PRIMARY KEY ( proc_code );

ALTER TABLE procedure ADD CONSTRAINT proc_name_unq UNIQUE ( proc_name );

门票

CREATE TABLE admission (
adm_no NUMBER(6) NOT NULL,
adm_date_time DATE NOT NULL,
adm_discharge DATE,
patient_id NUMBER(6) NOT NULL,
doctor_id NUMBER(4) NOT NULL
);

ALTER TABLE admission ADD CONSTRAINT admission_pk PRIMARY KEY ( adm_no ); --surrogate key

ALTER TABLE admission ADD CONSTRAINT admission_nk UNIQUE ( patient_id,
adm_date_time );

录取程序

CREATE TABLE adm_prc (
adprc_no NUMBER(7) NOT NULL,
adprc_date_time DATE NOT NULL,
adprc_pat_cost NUMBER(7, 2) NOT NULL,
adprc_items_cost NUMBER(6, 2) NOT NULL,
adm_no NUMBER(6) NOT NULL,
proc_code NUMBER(5) NOT NULL,
request_dr_id NUMBER(4) NOT NULL,
perform_dr_id NUMBER(4)
);
ALTER TABLE adm_prc ADD CONSTRAINT adm_prc_pk PRIMARY KEY ( adprc_no ); --surrogate key
ALTER TABLE adm_prc ADD CONSTRAINT adm_prc_nk UNIQUE ( adprc_date_time,
adm_no );
ALTER TABLE adm_prc
ADD CONSTRAINT admission_admprc FOREIGN KEY ( adm_no )
REFERENCES admission ( adm_no );
ALTER TABLE adm_prc
ADD CONSTRAINT doctor_performadmprc FOREIGN KEY ( perform_dr_id )
REFERENCES doctor ( doctor_id );
ALTER TABLE adm_prc
ADD CONSTRAINT doctor_requestadmprc FOREIGN KEY ( request_dr_id )
REFERENCES doctor ( doctor_id );

项目处理

CREATE TABLE item_treatment (
adprc_no NUMBER(7) NOT NULL,
item_code CHAR(5) NOT NULL,
it_qty_used NUMBER(2) NOT NULL,
it_item_total_cost NUMBER(8, 2) NOT NULL
);

ALTER TABLE item_treatment
ADD CONSTRAINT item_treatment_pk PRIMARY KEY ( adprc_no,item_code);
ALTER TABLE item_treatment
ADD CONSTRAINT admprc_itemtreatment FOREIGN KEY ( adprc_no )
REFERENCES adm_prc ( adprc_no );
ALTER TABLE item_treatment
ADD CONSTRAINT admprc_itemtreatment FOREIGN KEY ( adprc_no )
REFERENCES adm_prc ( adprc_no );
ALTER TABLE item_treatment
ADD CONSTRAINT item_itemtreatment FOREIGN KEY ( item_code )
REFERENCES item ( item_code );

在一个虚构的医院中,每次为患者入院完成入院程序时,执行该程序的主治医生将记录在 adm_prc 表中的 perform_dr_id 下。即使由一组医生执行手术,也只会记录主治医生。

医院现在希望记录所有执行入院程序的医生,包括一名辅助医生(助理医生)。

我已经更改了 adm_prc 表以包括辅助医生

ALTER TABLE ADM_PRC ADD ANCILLARY_DR_ID NUMBER(4);
ALTER TABLE ADM_PRC
ADD CONSTRAINT DOCTOR_PERFORM_ANCILLARY FOREIGN KEY ( ANCILLARY_DR_ID )
REFERENCES DOCTOR ( DOCTOR_ID );

我需要改变数据库的结构,这样同一个入院程序应该有多个记录,因为在一个入院程序中可以有很多医生协助。例如,我应该能够在 adm_prc 表中插入以下记录

adprc_no  adprc_date_time  adprc_pat_cost  adprc_items_cost  adm_no  proc_code 
request_dr_id perform_dr_id ancillary_dr_id
-----------------------------------------------------------------------------------------------------------------------------
1 14/03/2019 100 100 1234 1234
10 10 12
1 14/03/2019 100 100 1234 1234
10 10 13

但是,这违反了主键约束adm_prc_pk

我卡在了这一点上,无法继续。如果有人能指出我正确的方向,我将不胜感激。

最佳答案

您应该创建一个新的卫星表(比如 ADM_PRC_DR_DTLS)来保存 adprc_no 和相应的 dr_id 详细信息。ADM_PRC_DR_DTLS 的 adprc_no 会将 ADM_PRC 的 adprc_no 称为​​外键。

关于sql - 在不违反主键和唯一约束的情况下更改表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56342410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com