构建内部邮件系统

时间:2009-05-07 13:55:25

标签: sql email system internal

我的数据库中有两个表:

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

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

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

  • ID
  • FromID
  • TOID
  • 消息
  • ...

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

我的解决方案是什么?

更新

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

员工和公司表不包含用户名或密码,但是对ASP.NET成员资格uniqueidentifier的引用用于管理登录。如下所述,使用UI来控制from和接收器,我使用ASP.NET Membership Controller中的UI。谢谢。 : - )

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

所以email.ToID可以引用employee.ID或company.ID,是吗?您不能以声明方式约束该email.ToID必须至少存在于(employee.ID或company.ID)中。几点解决方案:

  1. 在电子邮件表(ToEmployeeId,ToCompanyId)中拥有ID,以及限制只能在给定电子邮件中指定一个的检查约束。
  2. 将员工和公司ID放在相同的ID空间中,例如他们的Id在某种Contact表中被掌握,然后是company.Id和employee.Id都有一个FK引用Contact.Id。我不认为这个解决方案非常好,因为Contact是这些其他表格中非常蹩脚的超级类型。
  3. 有一个联系表,如(ContactId,EmployeeId,CompanyId)。当邮件旋转到EmployeeId = X时,您将查找EmployeeId = X的Contact行。如果不存在,则创建它并使用新的ContactId。同样适用于Companyid。这允许您在将来扩展以使用其他Id集