質問

私は2つのデータベーステーブルがあります。チームとゲームを

この質問の目的のために、我々はフットボール(サッカー)チームとゲームを扱っている。

時折、両チームは、中性であってもよい。

各ゲームは正確に2チームが、一般的にホームチームとアウェイチームを持っています。

私の質問は、私は(home_team_id、away_team_id)ゲームテーブルで2つの外部キーを使用して、このデータの関係を表すか、私は2つをリンクするgames_teamsテーブルと多対多の関係を使用するかどうかをする必要があるかどうかである場合、私はまた、チームが自宅やアウェイチームだったと少しやり過ぎだかどうかを格納する必要があります。

混乱に追加するには、私はKohanaPHPにORMのLIBSを使用していますが、これらは唯一の2列が含まれるようにTEAM_IDまたはリンクテーブルと呼ばれるFKを期待します。あなたはKohanaPHPで、この問題での経験を持っている場合は、他のすべての一般的なアドバイスもはるかに高く評価され、返事を残してくださいます。

役に立ちましたか?

解決

あなたは、データベース・サーバー上の「X番目の正規形」バッジをピンすることができるようにしたい場合は、

、おそらく、そうでない場合、私はあなたが1とクエリのオーバーヘッドを減らすと思うべきで、多対多として扱われるべきですあなただけのあなたには、いくつかの有用なデータを出したいのすべてのの時を参加させるつもりだ。

少ないテーブル

他のヒント

ただ、そうでない場合は、あなただけの建具表でそれを修飾する必要があると思い、2つの列を使用します。これは睡眠時間の爆弾で、ある日突然、あなたは多くの本当の多くを持っている必要があり発見するだろうかのようにそうではありません。

2列は、私の意見では、ここで完全に適切です。唯一可能性のいずれかのゲームのための2つのチームがありうるという事実は、2つの列を持っていることによって、あなたのデータベーススキーマに反映されています。リンクテーブルを導入することで、あなたは、単一の試合が2離れた2つのホームチーム、チームを持つことができ、あなたは、このシナリオが発生したことがないことを確認するために、追加の検証が必要になるという可能性を紹介します。 2列に分離され、物事を保つことによって、あなたのスキーマは、本質的に、データの整合性を強制します。

ノーマライゼーションの観点から:はい。唯一の1対多または多対多の一つ以上の1対多の関係に分かれますことがあります。

しかし、私はGENDERのようなものを保存した場合現実的に言えば、。私は本当にこれに取り付けた多状態と日時スタンプを必要とするだろうか?

意外な答えはイエスです - しかし、私は、ビジネス上の理由から、性別の変更を追跡する必要がある場合にのみ - ほとんどの実用的な目的のための答えはNOです。

私は2つのキーで一つのテーブルを続けるだろう - などとして、それを追跡する業務上の理由がない限り、

あなたがそれを抽象化している方法に応じて、私はそれがより正確だ、そのサッカーゲームがゲームのテーブルのカラムを持つ場合だけでなく、より便利である二つのチームを持っていなければならないと言うでしょう。

私もチームIDのは、ゲームの主キーの自然の一部であることを想像することができます。

は、完全にあなたは、このために別のテーブルを持つべきではないと思います。 DBに簡単に、プログラマに容易になります。何IFSについて考えてもいいが、あなたが既に持っているように聞こえます。正規化は、常にすべてのために進むべき道であると考えて捕まるしないでください。

私は2つの列を使用することが最良の選択であると言って、他の答えを尊重し、しかし、あなたはのKohanaでORMライブラリを使用していることに言及します。ゲームテーブル内の2つの列を使用することにより、多対多の関係のためのORMの機能を失います。あなたはgames_teamsピボットテーブルを設定する場合は、次の操作を行うことができます:

$game = ORM::factory('game', 1); // 1 is the game id

次に、あなたができることをゲームでチームをループます:

foreach ($game->teams as $team) {
// do stuff with $team
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top