我的数据库中有两个表:

  • 公司表(ID、公司名称、公司用户名、公司密码)
  • 员工表(ID、公司ID、姓名、用户名、密码)

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

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

  • ID
  • 发件人ID
  • 目标ID
  • 信息
  • ...

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

我的解决方案可能是什么?

更新

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

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

有帮助吗?

解决方案

在 Company 和 Employee 表中使用 uniqueidentifier 作为 id,并使用 newid() 作为默认值。

或者,合并表并添加一个字段来显示记录是公司还是员工。

其他提示

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

所以 email.ToID 可以指employee.ID 或company.ID,对吗?您不能以声明方式限制 email.ToID 必须至少存在于(employee.ID 或 company.ID)之一中。几个解决方案:

  1. 电子邮件表中有 ID(ToEmployeeId、ToCompanyId),以及一个检查约束,该约束限制在给定电子邮件上只能指定一个。
  2. 将员工 ID 和公司 ID 放在同一 ID 空间中,例如他们的Id掌握在某种Contact表中,然后company.Id和employee.Id都有一个FK引用Contact.Id。我认为这个解决方案不是很好,因为 Contact 是这些其他表的一个非常蹩脚的超级类型。
  3. 有一个联系人表,例如(ContactId、EmployeeId、CompanyId)。当邮件发送到 EmployeeId=X 时,您会查找 EmployeeId=X 的联系人行。如果不存在,则创建它并使用新的 ContactId。Companyid 也是如此。这确实允许您将来也可以扩展使用其他 Id 集
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top