質問

データベースに2つのテーブルがあります:

  • 会社のテーブル(ID、CompanyName、CompanyUsername、CompanyPassword)
  • 従業員テーブル(ID、CompanyID、名前、ユーザー名、パスワード)

今、私は従業員が互いに書き込めるだけでなく、会社のアカウントにも直接書き込める内部メールシステムを設計しています。

私の内部メールテーブルには次のフィールドがあります:

  • ID
  • FromID
  • ToID
  • メッセージ
  • ...

メッセージテーブルにID(From / To)を入力すると問題が発生します。IDが両方のテーブルに存在する可能性があるため、メッセージが会社または従業員からのものかどうかはわかりません。

私のソリューションは何ですか?

更新

上記の例は私の質問を簡素化するためのものでした。

従業員および会社のテーブルには、ユーザー名またはパスワードは含まれませんが、ログインを管理するためのASP.NETのメンバーシップ uniqueidentifier への参照が含まれます。 UIを使用して送信元と受信者を制御することで以下に提案するように、ASP.NETメンバーシップコントローラーからUIを使用します。ありがとう。 :-)

役に立ちましたか?

解決

CompanyテーブルとEmployeeテーブルのidにuniqueidentifierを使用し、newid()をデフォルト値として使用します。

または、テーブルをマージし、レコードが会社か従業員かを示すフィールドを追加します。

他のヒント

会社用と従業員用の2つの外部キーを使用して、1つだけが設定されるようにすることができます。

したがって、email.ToIDはemployee.IDまたはcompany.IDを参照できますか? email.ToIDが(employee.IDまたはcompany.ID)の少なくとも1つに存在する必要があることを宣言的に制約することはできません。いくつかのソリューション:

  1. 電子メールテーブルにID(ToEmployeeId、ToCompanyId)があり、特定の電子メールに指定できるのは1つだけであることを制限するチェック制約です。
  2. 同じIDスペースに従業員と会社のIDがあります。 Idは何らかの種類のContactテーブルでマスターされ、company.Idとemployee.Idは両方ともContact.Idを参照するFKを持ちます。 Contactはこれらの他のテーブルの非常に不自由なスーパータイプなので、このソリューションはあまり良いとは思いません。
  3. (ContactId、EmployeeId、CompanyId)のような連絡先テーブルを用意します。メールがEmployeeId = Xまでスピンされると、EmployeeId = XのContact行を探します。存在しない場合は、作成して新しいContactIdを使用します。 Companyidについても同様です。これにより、将来的に他のIDセットを使用するように拡張することもできます
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top