【发布时间】:2010-10-04 16:10:19
【问题描述】:
考虑这个示例架构:
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(客户)工作,我如何防止某人将工作项添加到数据库中,其中 customer = Microsoft 和员工= Jeff,这没有意义?
我可以用检查约束或外键来做吗,还是需要一个触发器来手动测试它?
应该提到我使用的是 SQL Server 2008。
更新:我应该补充一点,WorkItem.EmployeeId 可以为空。
谢谢,埃吉尔。
【问题讨论】:
标签: sql sql-server database-design foreign-keys check-constraints