0

治療計画ソフトウェアの 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 日目には、イブプロフェン、パラセタモール、アスピリン、挽いたコーヒー豆、イェーガーマイスターのショットの致命的な混合物を患者に塗布したいと考えています。

4

1 に答える 1

1

これがあなたが始めたものです。

CREATE TABLE medication (
    "id" INTEGER NOT NULL,               -- You don't need this.
    "therapy_id" INTEGER NOT NULL,
    "day" INTEGER NOT NULL,
    "revision" INTEGER NOT NULL,
    "substance" VARCHAR(100),
    "dosage" VARCHAR(50),
    PRIMARY KEY (id),                    -- Drop this.
    FOREIGN KEY(therapy_id, day, revision) 
        REFERENCES day (therapy_id, day, revision),  -- Ok, but should be PK.
    FOREIGN KEY(therapy_id) REFERENCES therapy (id) -- You don't need this.
);

列「id」は何の役にも立たず、代わりに、実際のキー {therapy_id, day, Revision} に一意の制約が必要ないことを確信させてしまいました。「id」の無用な主キー制約を {therapy_id, day, Revision} の主キー制約に置き換えます。最後の外部キー制約を削除します。テーブル「day」の外部キー制約で必要なため、「therapy_id」が既存の行を参照することがわかっています。

それは私たちにこれを残します。

CREATE TABLE medication (
    "therapy_id" INTEGER NOT NULL,
    "day" INTEGER NOT NULL,
    "revision" INTEGER NOT NULL,
    "substance" VARCHAR(100),
    "dosage" VARCHAR(50),
    PRIMARY KEY (therapy_id, day, revision),
    FOREIGN KEY(therapy_id, day, revision) 
        REFERENCES day (therapy_id, day, revision)
);

「物質」と「投与量」が無効になるのは困ります。それについて少し考えてみてください。

于 2013-07-25T11:34:57.860 に答える