0

以下のように2つのテーブルがあります。重要なのは、私の質問に「n」を選択することです。主キー用の列をもう1つ持つのではなく、2番目のテーブルに複合キーを置くように設計しました。このアプローチでは、2つの質問があります。

  1. これはテーブルデザインの良いアプローチですか?つまり、TABLEQUESTIONCHOICEには主キーではなく複合キーがあります。

  2. アノテーションを使用して、HibernateでQUESTIONBANKテーブルとQUESTIONCHOICEテーブルの間で1対多のマッピングを作成するにはどうすればよいですか?

どんなポイントや提案も大いに役立ちます。

ありがとう、

-Vijay Selvaraj

CREATE TABLE QUESTIONBANK(
    QUESTIONID INT NOT NULL AUTO_INCREMENT(10001, 1),
    QUESTION VARCHAR(200) NOT NULL,
    TOPIC VARCHAR(20) NOT NULL,
    SUBTOPIC VARCHAR(20) NOT NULL,
    COMPLEXITY SMALLINT  NOT NULL DEFAULT 1,
    QUESTIONTYPE SMALLINT  NOT NULL,
    VERSION INT NOT NULL DEFAULT 0,
    CONSTRAINT QUESTIONBANK_PK PRIMARY KEY (QUESTIONID)
);

CREATE TABLE QUESTIONCHOICE(
   QID INT NOT NULL,
   CHOICE VARCHAR(100) NOT NULL,
   CORRECT_CHOICE BOOLEAN, 
   VERSION INT NOT NULL DEFAULT 0,
   CONSTRAINT QUESTIONCHOICE_PK PRIMARY KEY (QID, Choice),
   CONSTRAINT QUESTIONCHOICE_FK FOREIGN KEY (QID) REFERENCES QUESTIONBANK (QUESTIONID)
);
4

1 に答える 1

0

あなたの質問の前半に答えさせてください...

  1. これはテーブル設計の良いアプローチですか? つまり、TABLE QUESTIONCHOICE には主キーではなく複合キーがあるということです。

これは二者択一の命題ではありません。たまたま複合とプライマリの両方であるキーがあります。

設計が有効かどうかは、同じ値がCHOICE複数の行に存在できるかどうかによって異なりQUESTIONCHOICEます (異なる質問に接続されています)。

  • はいの場合、あなたのデザインは正しいです。
  • いいえの場合、それは正しくないので、CHOICE単独でキーにする必要があります。

代理キーも追加するかどうかはバランスの問題であり、決定を下すのに役立ついくつかの基準を次に示します。

于 2012-08-01T14:52:15.130 に答える