私は決してSQLの専門家ではないので、何か間違ったことをしたと確信しています。主キーの必要性について、ここでいくつかの質問を読みました。このテーブルを作成した方法では、実際に一意のキーを持つ方法が見つかりません。調査型データベースです。日付、トリアージ番号、関係者などの主な詳細の表があります。質問の結果用の別のテーブルとコメント用の別のテーブル。私はトリアージを一意にしましたが、複数の人が関与する可能性があるため、同じトリアージ番号が複数回使用されます. 関係者は複数回登場することもあります。唯一真にユニークなことは、その人物とトリアージを組み合わせることです。自動キーを考えましたが、役に立ちません。サーベイ タイプ テーブルで 2 つの識別子を使用することは許容されるでしょうか?
2 に答える
あなたの質問は非常に一般的であり、明確な回答を提供するのに十分な情報がありませんが、以下のコメントが役立つことを願っています.
複合主キー(2列以上で構成されるキー)を使用しても問題ありません。多対多の関係など、テーブルのリンクでよく使用されます。
考慮すべきことの 1 つは、他のテーブルから複合主キーを持つテーブルも参照する場合は、外部キーの 2 つの列、すべての結合などを参照する必要があることです。主キー用に別の列を作成します (例: 自動インクリメント番号)。
重要な部分:
「...複数の人が関与する可能性があるため、同じトリアージ番号が複数回使用されます。関与する人々も複数回登場する可能性があります。」
あなたのコメントに基づいて、次の 2 つのフィールドのデータ。
Triage Person
------ ------
1 PersonA
1 PersonB
...
7 PersonA
7 PersonB
Person フィールドに記録された各人物が一意に識別可能であれば、Triage と Person が複合キーを作成できるという点で問題ありません。つまり、ea の場合です。person の値は「John Smith」のような名前です。調査に回答している John Smith が 2 人以上いる場合、問題が発生する可能性があります。そのため、 Person 値自体が人を一意に識別する必要があります。トリアージ番号を仮定します。が区別されている場合 (つまり、トリアージ番号は意味的に関連する複数のトリアージ位置を表していない)、これらの 2 つのフィールドが複合キーとして機能するのは、調査でトリアージと人物の一意の組み合わせが複数作成されない場合に限られます。 .
他の各テーブルの外部キーは、メイン テーブルの複合キーの組み合わせにする必要がありますが、他の 2 つのテーブルをメイン テーブルにマージできる場合は、結合の負担を軽減することを検討してください。例: コメント テーブルが 1 つのフィールドにコメントのみを保存し、それ以上は何も保存しない場合、そのフィールドをメイン テーブルに含めて、コメント テーブルを削除してみませんか?