0

私は大学の 2 年生のコンピューター サイエンスの学生です。私はphp/mySQLでオンラインアプリを作っています。これは、PHP と mySQL の両方を使用した初めての経験です。とにかく野球の試合を追跡するアプリを作っています。ユーザーはプレーヤーのチームを作成し、別のチームとの試合を開始します。ユーザーは結果を入力しますが、アプリはゲームの得点を記録し、プレーヤーの統計を保持します。私はデータベースを設計しており、誰かが私のために明確にしてくれることを望んでいました:

主キー - これが何であるかを理解していると確信しています。基本的に、各行を区別するために使用される、各行の一意の識別子です。

外部キー - 現在、「Players」テーブルがあり、「PlayerStats」テーブルもあります。私がそれを正しく理解していれば(おそらく理解していません)、「Players」テーブルには「PlayerStats」テーブルの主キーである列「playerStatsId」があります。これは、プレーヤーごとに統計テーブルが 1 つしかないため機能します。

キーがありません???-わかりましたので、私の例を示します。アプリの各ユーザーは、必要な数のチームをデータベースに追加できる必要があります。自分が「所有」しているチームのゲームのみを編集できます。「username」と「teamId」の 2 つの列を持つテーブルを作成することで、これを達成できると考えていました。次に、テーブルを検索して、特定のユーザーに属するチームを選択できます。あまり効率的ではないように見えるので、これが答えだとは思いません。より良い方法はありますか?

どんな助けにも感謝します!ありがとうございました!!

4

2 に答える 2

1

外部キー

各プレイヤーの PlayerStats テーブルには 1 つのレコードしかありませんか? もしそうなら、統計をプレイヤーテーブルに入れてみませんか?

通常、各プレーヤーの統計が複数ある場合は、統計を別の表に分けます。

例:

Players
PlayerID  Name
001       George

PlayerStats
PlayerID  StatType        Value
001       BattingAverage  0.300
001       RunsPerGame     2

この場合、PlayerID は PlayerStats テーブルの外部キーになります。この種のテーブルは、ビジネス アプリケーションの「詳細」テーブルと呼ばれることがあります。

No Key の例は問題なく、非常に一般的です。「関係テーブル」のようなもので、それが何と呼ばれていたか思い出せません。

于 2012-11-01T00:08:16.303 に答える
0

プレーヤー テーブルには、PlayersStats テーブルに FK としてその PK が含まれている必要があります。どちらの方法でも関連付けることができますが、プレーヤーの側面を関係の外部キー側にする方が理にかなっています。

「キーなし」に関しては、これを避けるようにしてください。リレーショナル データベースでは、関係がある場合は、それを明示する必要があります。このようにして孤立した行を避けることができます。孤立した行は基本的にデータの一部であり、関係がなく、永遠に座ってデータベースを乱雑にする可能性があります。この場合、User テーブルには PK が必要であり、その PK はそれを Teams テーブルにリンクするものである必要があります。2 つの列を持つことができますが、そのうちの 1 つはユーザー テーブルに関連付ける必要があります。チーム テーブルには、プレーヤーのテーブルでも FK として機能する PK が必要です。これらのプレーヤーはチームに属しているためです。

また、チーム テーブルにもキーを設定します。たとえそれがあなた自身のものであっても、データベースが完成したと思い込まないでください。拡張することを意図してコード/データベースを記述します。

これには他にもたくさんあります。ただし、これらは、開始するための一般的なポイントです。

編集:

質問のコメントを見ると、ユーザーが複数のチームを持つことができる場合、ユーザーとチームのテーブルの間に UserId と TeamId を FK として持つテーブルが必要になる場合があります。ユーザーまたはチームを削除すると、そのリンク テーブルを介してカスケード (またはエラー) する必要があるため、キーを入力する必要のないテーブルである可能性があります。

そう:

Player(PK)->(FK)PlayerStats
--if multiple users can have multiple teams
User(PK)->(FK)LinkTable(FK)<-Team
--if 1-1 user-team
User(PK)->(FK)Team
Team(PK)->Player(FK)
于 2012-11-01T00:04:14.227 に答える