私は2つのテーブルを持っています:
- Person (personID、名前、住所、電話、メール)
- プレイヤー(生年月日、学校)
Person のpersonIDを Personテーブルと Player テーブルの両方で主キーとして使用するには、どのコードを使用すればよいでしょうか?
playerIDも Player の外部キーである必要があることを理解しています。何か案は?
私は2つのテーブルを持っています:
Person のpersonIDを Personテーブルと Player テーブルの両方で主キーとして使用するには、どのコードを使用すればよいでしょうか?
playerIDも Player の外部キーである必要があることを理解しています。何か案は?
プレーヤーではない人が代表されていない限り、この情報に 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 整数を使用できます。よりコンパクトになる傾向があります。
personID
まず、Player
テーブルにもある必要があります。
それが完了したら、テーブルpersonID
の主キーとしても持つことも、別の列を持つこともでき、これを主キーにすることができます。Player
playerID
どちらを選択するかは、アプリケーションの要件によって異なります。プレーヤーが 1 人だけに関連付けられると思われる場合は、必ず 1 人をpersonId
主キーにすることができます。
しかし、多くの場合、別のものが必要になりますplayerId
(1 つ持つことをお勧めします)。たとえば、コンピュータ ゲームをモデル化していない場合、すべてのプレーヤーは人物ではない可能性がありpersonId
ますnull
。また、サッカー選手とは異なるバスケットボール選手をモデル化する場合、これらの両方のゲームをプレイする人は、player テーブルに複数のエントリを持つことができます (同じ を持つ複数のレコードpersonId
)。
personID フィールドを追加して、person テーブルを管理するのと同じ方法で管理できますか? プレーヤーを挿入するたびに、同じ ID を持つ対応する人物を挿入する必要があります。
もちろん、あなたの人の概念が抽象的な場合、それは間違いなく同じテーブルにあるはずです
生年月日フィールドを 'Player' テーブルから 'person' テーブルに移動することをお勧めします (結局のところ、1 人に複数の生年月日はありません!)、'personID' フィールドを 'player' テーブルに追加します' テーブル。個人が複数の学校 (小学校、中学校、高等学校) を持っている場合、'player' テーブルの主キーは personID + 学校である必要があります。
1 つのテーブルの主キーを 2 番目のテーブルの主キーとして機能させることはまったく問題ありません。このような 2 番目のテーブルは、ディスク領域を節約し、アクセス時間を改善するのに役立ちます。すべてではないが一部の人のために大きなテキスト フィールドを保存するとします。このフィールドを (同じ主キーを持つ) セカンダリ テーブルに格納すると、このフィールドを必要とする人だけがセカンダリ テーブルにレコードを持つことになります。