让我们说关系被描述为:
公司有很多员工
公司有很多部门
部门有很多员工
所以,像这样;
公司 - <<部门>> - 员工
如果department表的基本结构为:
// Pseduocode
company_id // Foreign key
department_id // Primary key
[employees] // Array or collection of employees
如果我们回到这句话;
公司有很多员工
这是否意味着employee表还需要或需要company_id的引用?
所以,Employee
将是:
employee_id
company_id // I'm not sure if this is requried or not
department_id
我打算希望将这些数据抽象到contracts
表中,以防员工是自由职业者/控制人员等,或者拥有多名员工。
但是现在......
我的问题是:
我的员工表是否需要引用company
表,还是通过department
表隐含的公司引用?
非常感谢
答案 0 :(得分:2)
问题是:您是否需要公司与员工之间的直接联系?如果你这样做,添加它,如果不是,那么是,通过Department隐含连接。
编辑:
从技术上讲,您的Department表不需要Employees列表。 Employee表的每一行都有一个Department的引用ID,这就足够了。
请查看http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf以获取更多信息。
答案 1 :(得分:0)
这种关系是通过department
隐含的,因此您在概念上并不需要它。添加它,将是非规范化的一个例子,并且会出现不一致的情况。例如,您可能company_1
department_1
和company_2
。由于应用程序代码中存在一些缺陷/错误,现在employee_1
可能与department_1
但company_2
相关联。没有办法将此约束表达为SQL模式,因此您必须使用更复杂的内容,例如触发器或应用程序代码检查等。
但是,有时您只需要有关公司和员工的信息,而不需要有关部门的信息。如果它真的对性能至关重要,那么与部门进行额外的联系以便为员工或公司的员工找到公司可能不会削减它,因此您只需要接受非正规化。
答案 2 :(得分:0)
您可能不需要将公司与员工联系起来。部门与公司之间的关系已经完成。只有在存在需要这种关系的特定情况时,您才可能需要它。