2014-10-10 72 views
-1

处方表 处方ID(PK) 预约ID FK 数量 药品名称 患者姓名 医师姓名约束问题,从一列值需要与另一个(不同的表)的值

可以preffixed

预约表 预约ID(PK) 中心(FK) 病人ID(FK)

“每个处方(ID)由约定ID和序列号(例如,2003919_1,2003919_2)标识”

我已经创建了关系,但是如何建立约束?

+1

请编辑您的问题,并添加表(S)和您定义的列以及可能存在的约束等信息。谢谢。 – 2014-10-10 02:53:18

回答

0

要创建约会id字段外键约束,你可以这样做:

ALTER TABLE prescription 
ADD CONSTRAINT fk_appointment 
FOREIGN KEY (appointment_id) 
REFERENCES appointment(appointment_id); 

基本上意味着你创建必须在预约表中存在的每个处方记录预约ID值 - 这就是你想做什么?

对 - 对不起,暂时没有回复你。

我把处方上表中,基本上会计算已存在的新处方预约ID的行数插入扳机之前,增加了一个,然后使用,作为处方ID:

CREATE OR REPLACE TRIGGER tr_prescription_appointment_id 
BEFORE INSERT ON prescription 
FOR EACH ROW 
BEGIN 


select to_char(:new.appointment_id) || '_' || to_char(count(prescription_id) + 1) 
into :new.prescription_id 
from prescription 
where appointment_id = :new.appointment_id; 

EXCEPTION 
WHEN OTHERS THEN 
    raise_application_error(-20700,'Error in setting new prescription_id for appointment_id: ' || :new.appointment_id || '. Error Message: '|| sqlerrm); 

END tr_prescription_appointment_id; 
/

在我的测试我刚刚创建的两个表的主键列,然后插入预约

select * from appointment 

APPOINTMENT_ID 
-------------- 
     1 
1 row selected. 

然后插入一个药方 - 你让触发填充prescription_id列。

insert into prescription (appointment_id) values (1); 

select * from prescription; 
PRESCRIPTION_ID APPOINTMENT_ID 
--------------- -------------- 
1_1       1 
1 row selected. 

再做一次任命1

insert into prescription (appointment_id) values (1); 

PRESCRIPTION_ID APPOINTMENT_ID 
--------------- -------------- 
1_1       1 
1_2       1 

2 rows selected. 

希望,做你所需要的。

哦,因为如果为处方预约ID不会在约会表中存在的错误,这只是一个单纯的外键约束

ALTER TABLE prescription 
ADD CONSTRAINT prescription_appointment_id_fk 
FOREIGN KEY (appointment_id) 
REFERENCES appointment (appointment_id) 
ENABLE VALIDATE 
+0

不完全是,我想检查每个处方ID(PK)是由一个现有的约会ID加下划线和一组数字组成。例如:如果3个处方来自约会1,则处方ID(1_1 1_2 1_3)上会有三个条目。如果下划线左侧的内容不对应有效的约会ID,我想触发一个错误 – user3258494 2014-10-10 16:25:18

相关问题