2011-06-27 9 views
1

私はORMにDoctrine 2を使用しています。私のアプリケーションには、企業との多対多の関係を持つことができるユーザーがいますが、ユーザーは現在アクティブな会社のみを持つことができます。私の質問は、ユーザーの現在の会社をマークするフィールドをどこに含めるかです。私の考えは、2つのオプションがあることです: 1)isCurrentフィールドをUsersCompanies参照テーブルに追加する。しかし、ユーザーの現在の会社を取得したい場合は、ユーザーのUsersCompaniesの参照を順番に調べ、各参照のis_currentフィールドをチェックする必要があります。 2)簡単にアクセスできるように、current_users_companies_idをユーザのテーブルに配置する。Doctrine 2/DBデザインの質問:ユーザー、会社、ユーザー企業参照テーブル、および現在の会社のフィールドを含める場所

いつものように、私はあなたの時間と入力を感謝します。

答えて

2

ユーザーは現在の会社を1つしか持てないため、特定の1対多の関係だと思うようになります。したがって、これを行うには、ユーザーオブジェクトにcurrent_company_idプロパティーを設定するだけです。

+0

あなたのご意見をお寄せください。実際に自分の投稿を編集し、明確にするために、usersCompaniesテーブルには、ユーザーと会社の関係に固有の役職、勤務先の場所などの他の情報も保持されています。したがって、参照表であり、結合表ではありません。これはあなたの答えを変えるでしょうか?この場合、会社の現在の従業員を検索するのは難しいでしょう。ユーザーの現在の会社が一致するかどうかを調べるために参照を順番に調べなければならないからです。これを処理するより効率的な方法はありますか? – blacktie24

+0

あなたがcurrent_company_idをユーザで使用する場合、Doctrine 2でそれをリレーションにすることができます。次に、あなたの会社のエンティティでリレーションの反対側を作成するだけで簡単にこのフィールドを取得できます現在の従業員全員を見つけるために会社から。 –

+0

私はcurrent_company_idとcurrent_user_company_reference_idの両方を持っていた場合、それが関係に関連する他の情報を保持しているので、ユーザーの現在のUserCompanyReferenceエンティティに素早くアクセスするためにcurrent_user_company_reference_idも必要です。 Thx再び、あなたの入力を本当に感謝します。 – blacktie24