小编典典

如何根据事件关联3个表

sql

我有一个表格,其中包含有关 民事和劳工* 两类人员可以完成的不同类型事件的信息 *

所以对于他们每个人,我都有各自的表格

civil{  civil_id, name, age,telephone...} the  primary key is civil_id

worker{ worker_id, name, duty, department...} the  primary key is worker_id

然后事件表会列出所有可能的事件

event {type_of_event} the  primary key is type_of_event

然后我打算将信息存储在其他表中

具有eventype的人,从事这项工作的人(工人或公民)

id  event_type       date      person
-----------------------------------
1   type1         12-12-12     x 
2   type1         05-12-10     y
3   type2         02-12-12     y

现在在这个设计中,如果我只有一种人(又称“平民”),我不知道如何与谁完成工作相关联,而我只会在最后一张表中将“
civil_id”存储在“人”字段中....但是如何知道是民用还是工人,是否需要其他中间表?


阅读 189

收藏
2021-03-23

共1个答案

小编典典

在这种情况下,您无法设置,foreign key因为您有多个父对象。为了进行快速搜索或避免在表的full table scanperson上定义索引,event并使用联接表LEFT JOIN。例如,

SELECT  ....,
        COALESCE(b.name, c.name) AS personname
FROM    event a
        LEFT JOIN civil b
            ON a.person = b.civil_id
        LEFT JOIN worker c
            ON a.person = c.worker_ID

新增中 INDEX

ALTER TABLE event ADD INDEX (person)
2021-03-23