0

我的数据库中有两个表:

  • 公司表(ID、CompanyName、CompanyUsername、CompanyPassword)
  • 员工表(ID、CompanyID、姓名、用户名、密码)

现在,我正在设计一个内部邮件系统,员工可以通过该系统互相写信,也可以直接写信到公司帐户。

我的内部邮件表有以下字段:

  • ID
  • 发件人ID
  • ToID
  • 信息
  • ...

现在我的问题出现了,当我用 ID(From/To)填充消息表时,我不知道消息是来自公司还是来自员工,因为两个表中都可能存在 ID。

我的解决方案是什么?

更新

上面的例子是为了简化我的问题。

员工和公司表不包含用户名或密码,而是对 ASP.NETuniqueidentifier用于管理登录的成员资格的引用。正如下面建议的使用 UI 来控制来自和接收者,我使用来自 ASP.NET 成员资格控制器的 UI。谢谢。:-)

4

3 回答 3

0

您可以使用两个外键,一个用于公司,一个用于员工,并确保只设置一个。

于 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. 在电子邮件表中具有 ID(ToEmployeeId、ToCompanyId)和一个检查约束,该约束限制只能在给定电子邮件上指定一个。
  2. 在同一个 id 空间中拥有 Employee 和 Company Id,例如,他们的 Id 掌握在某种 Contact 表中,然后 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 回答