治療計画ソフトウェアの 3 つのエンティティの階層をモデル化しています。治療とは、基本的に、患者に数日間投与される多数の薬剤として理解されます。いつでも、一度だけ書き込みを行う方法で治療をキャンセルできるようにしたいと考えています (品質管理認証の目的で)。
具体的な質問は次のとおりです。複合外部キーの一部を別の外部キーとして再利用してもよろしいですか? 私の場合、複合キーポイントは投薬表から日表までを指し、それから治療法を指します。治療 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)
);
日と薬の関係は 1 対多であることに注意してください。たとえば、3 日目には、イブプロフェン、パラセタモール、アスピリン、挽いたコーヒー豆、イェーガーマイスターのショットの致命的な混合物を患者に塗布したいと考えています。