考虑这个示例模式:
Customer ( int CustomerId pk, .... )
Employee ( int EmployeeId pk,
int CustomerId references Customer.CustomerId, .... )
WorkItem ( int WorkItemId pk,
int CustomerId references Customer.CustomerId,
null int EmployeeId references Employee.EmployeeId, .... )
基本上,三个表:
- 具有主键和一些附加列的客户表
- 一个员工表有一个主键,一个外键约束引用客户表的主键,代表客户的一个员工。
- 工作项表,其中存储为客户完成的工作,以及有关为其执行工作的特定员工的信息。
我的问题是。在添加新工作项时,我如何在数据库级别测试员工是否实际上与客户相关联。
例如,如果 Scott(员工)在 Microsoft(客户)工作,而 Jeff(员工)在 StackOverflow(客户)工作,我如何防止有人将工作项添加到数据库中,客户 = Microsoft,员工 = Jeff,哪个没有意义?
我可以使用检查约束或外键来完成它,还是需要一个触发器来手动测试它?
应该提到我使用的是 SQL Server 2008。
更新:我应该添加 WorkItem.EmployeeId 可以为空。
谢谢,埃吉尔。