我有一个表格,其中包含有关 民事和劳工* 两类人员可以完成的不同类型事件的信息 *
所以对于他们每个人,我都有各自的表格
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”存储在“人”字段中....但是如何知道是民用还是工人,是否需要其他中间表?
在这种情况下,您无法设置,foreign key因为您有多个父对象。为了进行快速搜索或避免在表的full table scan列person上定义索引,event并使用联接表LEFT JOIN。例如,
foreign key
full table scan
person
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
INDEX
ALTER TABLE event ADD INDEX (person)