3

私は2つのテーブルを持っています:

  • Person (personID、名前、住所、電話、メール)
  • プレイヤー(生年月日、学校)

Person のpersonIDを Personテーブルと Player テーブルの両方で主キーとして使用するには、どのコードを使用すればよいでしょうか?

playerIDも Player の外部キーである必要があることを理解しています。何か案は?

4

4 に答える 4

2

プレーヤーではない人が代表されていない限り、この情報に 2 つのテーブルが必要であることは明らかではありません。その場合を想定してみましょう (他の人は、コーチ、親、審判などである可能性があります)。さらに、コーチが実際に生まれたとしても、彼らの生年月日はシステムにとって重要ではありません (したがって、生年月日を Person テーブルに戻す必要はありません)。また、1 つの学校だけに通う人を扱っているとします。昨年別の学校にいた場合、プレーヤーの記録はシーズン間で更新されます。(別の年に通った学校の履歴情報が必要な場合は、別のテーブル構造が必要になります。) また、いずれ Player テーブルにフィールドを追加することも考えられます。

その場合、プレーヤーのデータを適切な人物にリンクする必要があります。

CREATE TABLE Player
(
    PlayerID     INTEGER NOT NULL PRIMARY KEY REFERENCES Person(PersonID),
    DateOfBirth  DATE NOT NULL,
    School       VARCHAR(20) NOT NULL REFERENCES School(SchoolName)
);

学校のリストは有限であると仮定しています。参加する学校名の代わりに SchoolID 整数を使用できます。よりコンパクトになる傾向があります。

于 2012-05-20T03:12:39.133 に答える
2

personIDまず、Playerテーブルにもある必要があります。

それが完了したら、テーブルpersonIDの主キーとしても持つことも、別の列を持つこともでき、これを主キーにすることができます。PlayerplayerID

どちらを選択するかは、アプリケーションの要件によって異なります。プレーヤーが 1 人だけに関連付けられると思われる場合は、必ず 1 人をpersonId主キーにすることができます。

しかし、多くの場合、別のものが必要になりますplayerId(1 つ持つことをお勧めします)。たとえば、コンピュータ ゲームをモデル化していない場合、すべてのプレーヤーは人物ではない可能性がありpersonIdますnull。また、サッカー選手とは異なるバスケットボール選手をモデル化する場合、これらの両方のゲームをプレイする人は、player テーブルに複数のエントリを持つことができます (同じ を持つ複数のレコードpersonId)。

于 2012-05-20T03:26:22.737 に答える
0

personID フィールドを追加して、person テーブルを管理するのと同じ方法で管理できますか? プレーヤーを挿入するたびに、同じ ID を持つ対応する人物を挿入する必要があります。

もちろん、あなたの人の概念が抽象的な場合、それは間違いなく同じテーブルにあるはずです

于 2012-05-20T03:08:46.417 に答える
0

生年月日フィールドを 'Player' テーブルから 'person' テーブルに移動することをお勧めします (結局のところ、1 人に複数の生年月日はありません!)、'personID' フィールドを 'player' テーブルに追加します' テーブル。個人が複数の学校 (小学校、中学校、高等学校) を持っている場合、'player' テーブルの主キーは personID + 学校である必要があります。

1 つのテーブルの主キーを 2 番目のテーブルの主キーとして機能させることはまったく問題ありません。このような 2 番目のテーブルは、ディスク領域を節約し、アクセス時間を改善するのに役立ちます。すべてではないが一部の人のために大きなテキスト フィールドを保存するとします。このフィールドを (同じ主キーを持つ) セカンダリ テーブルに格納すると、このフィールドを必要とする人だけがセカンダリ テーブルにレコードを持つことになります。

于 2012-05-20T03:13:23.513 に答える