2014-09-12 56 views
1

我对数据库设计相当陌生。开始有四个表的新​​应用:Assiatance with SQL table relationship

Staff 
Vendors 
Projects 
ProjectSchedules 

ProjectSchedules是一个表,我们将派人项目。有时人们是员工,有时他们是供应商。如何使用一个(或更少?)列在ProjectSchedules表中为员工和供应商建立关系?

重要的是要注意,供应商通常是一家公司(认为人员配备公司)。

我已经做了,在过去类似的事情,但手工处理非键控关系:

SELECT ISNULL(Vendor.Name, Staff.FullName) AS Staff 
    FROM ProjectStaffing INNER JOIN Vendors, Staff, etc. 

你能告诉我,如果有更好的办法?

+0

的可能重复(HTTP [外键指的跨多个表的主键?]:// stackover flow.com/questions/668921/foreign-key-refering-to-primary-keys-across-multiple-tables) – Drecker 2014-09-12 23:16:28

+0

查看此问题的最佳答案。我个人更喜欢第四个提供的建议(模拟一个实体作为你的两个表的基础)http://stackoverflow.com/questions/7844460/foreign-key-to-multiple-tables – Kik 2014-09-12 23:16:38

回答

0

一个可能的解决方案对于这个问题 - 定义通用的术语“资源”,所以项目使用的资源,而不是员工或供应商

资源具有id, name, type

根据类型,你可以有另外的几个表有关资源的列(如名字,公司名称或硬件情况下的服务器机架)

这种方法从可伸缩性的角度来看有多好,但是如果尝试显示所有资源,sql查询可能会有点奇怪RCE中指定有关他们每个人的全面详细的信息项目,但通常这可以在UI层面来解决

另一种解决方案:

,而不是一个项目进度表,你可以有多重关系:

project_staff 
project_vendors 
project_somethingelse 

这种做法在某种程度上更容易实现,但它是难以维护后