数据库中两个实体之间的关系

时间:2014-03-05 19:45:03

标签: mysql sql database

我有两个表,一个名为employee,包含员工的详细信息,键为employee_idemployee_name。 另一个名为assignment主键assign_id。 现在,表employee中有两列。一个是preference_1,另一个是preference_2。这两者都可以包含表assign_id中的assignment。首选项1必须由所有员工填写,首选项2是可选的,但不应超过两个首选项。 如何链接这两个表?

3 个答案:

答案 0 :(得分:1)

preference_1和preference_2应该是两个单独的表,而不是在employee表中。您可以在pref_1,pref_2 AND分配表中包含employee_ID。

答案 1 :(得分:0)

也许是这样的

SELECT e.employee_name, a1.assigment_name AS firstPreference, a2.assignment_name AS secondPreference
FROM employee e
    JOIN assignment a1 ON e.preference_1 = a1.assign_id
    LEFT JOIN assignment a2 ON e.preference_2 = a2.assign_id

答案 2 :(得分:0)

因为,preference_2是可选的;将preference_1(或者)preference_1 / preference_2 foreign keys设为assignement的assignment_id。手段,preference_1/preference_2 references assignment(assignment_id)

谈到这段关系,对我而言,它看起来像many-many关系;因为员工可以从事多项任务,同样可以将一项任务分配给多名员工。

创建表:

NULL加上preference_1约束,因为它必须由员工填写;与preference_1 int not null类似,但请将{2} nullable column作为preference_2 int null

这将确保每位员工至少有一项任务。如果填写了可选的pref_2,那么他/她将进行2次分配。

查询时,您可以进行

等连接
select e.* from employee e join assignment a on 
e.preference_1 = a.assignment_id 
and isnull(e.preference_2,0) = a.assignment_id