我正在为治疗计划软件建模三个实体的层次结构。治疗基本上被理解为在数天内给予患者的多种药物。我希望能够以只写一次的方式在任何一天取消治疗(出于质量控制认证目的)。
这是一个具体的问题:可以将复合外键的一部分重用为另一个外键吗?在我的例子中,复合关键点从药物表到日程表,然后又指向治疗。治疗 id 包含在药物表的复合外键中,所以我可以使用它作为外键,使查询更容易?
表定义应该是这样的(在我的原始 SQL 技能中取模,我通常总是使用某种 ORM):
CREATE TABLE therapy (
"id" INTEGER NOT NULL,
"start" DATE NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE day (
"therapy_id" INTEGER NOT NULL,
"day" INTEGER NOT NULL,
"revision" INTEGER NOT NULL,
"comment" TEXT;
"cancelled" BOOLEAN NOT NULL;
PRIMARY KEY (therapy_id, day, revision),
FOREIGN KEY(therapy_id) REFERENCES therapy (id)
);
CREATE TABLE medication (
"id" INTEGER NOT NULL,
"therapy_id" INTEGER NOT NULL,
"day" INTEGER NOT NULL,
"revision" INTEGER NOT NULL,
"substance" VARCHAR(100) NOT NULL,
"dosage" VARCHAR(50) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY(therapy_id, day, revision) REFERENCES day (therapy_id, day, revision),
-- wondering if this is ok
FOREIGN KEY(therapy_id) REFERENCES therapy (id)
);
请注意,从一天到药物的关系是一对多的,例如在第 3 天,我想给病人贴上布洛芬、扑热息痛、阿司匹林、磨碎的咖啡豆和 Jaegermeister 的致命混合物。