0

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

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

現在、従業員がお互いに書き込みできるだけでなく、会社のアカウントに直接書き込むことができる内部メールシステムを設計しています。

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

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

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

私の解決策は何でしょうか?

アップデート

上記の例は、私の質問を単純化するためのものです。

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

4

3 に答える 3

0

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

于 2009-05-07T14:00:00.790 に答える
0

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

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

于 2009-05-07T14:13:44.050 に答える
0

つまり、email.ToIDはemployee.IDまたはcompany.IDを参照できますよね?そのemail.ToIDが(employee.IDまたはcompany.ID)の少なくとも1つに存在する必要があることを宣言的に制約することはできません。いくつかの解決策:

  1. 電子メールテーブルにID(ToEmployeeId、ToCompanyId)があり、特定の電子メールで指定できるのは1つだけであることを制限するチェック制約があります。
  2. 従業員IDと会社IDを同じIDスペースに配置します。たとえば、IDが何らかの連絡先テーブルでマスターされている場合、company.Idとemployee.Idの両方にContact.Idを参照するFKがあります。Contactはこれらの他のテーブルのかなり不完全なスーパータイプであるため、このソリューションはあまり良いとは思いません。
  3. (ContactId、EmployeeId、CompanyId)のような連絡先テーブルがあります。メールがEmployeeId=Xまでスピンアップされると、EmployeeId=XのContact行を探します。存在しない場合は、それを作成して新しいContactIdを使用します。Companyidについても同じことが言えます。これにより、将来的に他のIDセットを使用するように拡張することもできます。
于 2009-05-07T14:13:53.770 に答える