我在做一个数据库
CREATE TABLE reserva (
id_clinica NUMBER,
APOSITIVO DECIMAL(10,4),
ANEGATIVO DECIMAL(10,4),
BPOSITIVO DECIMAL(10,4),
BNEGATIVO DECIMAL(10,4),
ABPOSITIVO DECIMAL(10,4),
ABNEGATIVO DECIMAL(10,4),
OPOSITIVO DECIMAL(10,4),
ONEGATIVO DECIMAL(10,4),
);
CREATE TABLE donante (
dni_donante VARCHAR(9),
fecha_alta DATE,
movil VARCHAR(9),
nombre VARCHAR(20),
apellido1 VARCHAR(20),
apellido2 VARCHAR(20),
tipo_sangre VARCHAR(15),
);
在表donante中,属性"tipo_sangre“总是"APOSITIVO”、"ANEGATIVO“、"BPOSITIVO”、BNEGATIVO等。
我想要做一个触发器,当在另一个表中插入一行时,将从donante获得"tipo_sangre“,并向表reserva的对应属性中添加一个数字。
除了为tipo_sangre声明一个变量和执行一个开关情况之外,还有其他方法可以做到吗?
(预先谢谢:)
发布于 2016-05-30 03:54:51
如果第一个表只是为第二个表中的行提供血型计数,我建议重新考虑数据库设计。您只需要一个用于血型的“维度”表(一列,八行,显示血型的名称)。此列应该是主键。然后,tipo-sangre
在donate
中应该有一个外键约束,引用这个血型表。最后,对于计数,您不需要一个表,您需要一个视图。基于这样的查询:
select count(case tipo_sangre when 'apositivo' then 1 end) as apositivo,
count(case tipo_sangre when 'anegativo' then 1 end) as anegativo,
.....
count(case tipo_sangre when 'onegativo' then 1 end) as onegativo
from donate
不要创建一个单独的表来存储这些计数;这只会在将来造成麻烦,因为您将有多余的数据,在某个时候,这些数据可能会因为许多原因而自相矛盾。
https://stackoverflow.com/questions/37524361
复制相似问题