如何根据事件关联3个表

cMi*_*nor 2 sql database-design foreign-keys relational-database

我有一张表,其中包含有关不同类型事件的信息,这些信息可由民事和工人两类人员完成

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

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

worker{ worker_id, name, duty, department...} the  primary key is worker_id
Run Code Online (Sandbox Code Playgroud)

然后事件表包含所有可能事件的列表

event {type_of_event} the  primary key is type_of_event
Run Code Online (Sandbox Code Playgroud)

然后我计划将信息存储在其他表中

与事件类型,完成工作的人(工人或民事)

id  event_type       date      person
-----------------------------------
1   type1         12-12-12     x 
2   type1         05-12-10     y
3   type2         02-12-12     y
Run Code Online (Sandbox Code Playgroud)

现在,在这个设计,我不知道如何与人谁如果做的工作,我就只有一个什么样的人(又名公民)我想只有亲自领域的civil_id存放在这最后的表....但如何知道这是民用还是工人,我还需要其他中间表吗?

Bra*_*vic 6

一般来说,有办法模拟这种情况......

使用独家外键

在此输入图像描述

event,两个civil_idworker_id都是NULL,但也有一个约束,确保在任何给定时间其中一个非NULL为非NULL:

CHECK (
    (civil_id IS NOT NULL AND worker_id IS NULL)
    OR (civil_id IS NULL AND worker_id IS NOT NULL)
)
Run Code Online (Sandbox Code Playgroud)

使用继承1

在此输入图像描述

有关继承的更多信息,请参阅" ERwin方法指南"本文中的"子类型关系"一章.


1阿卡.类别,子类型,子类化,泛化层次......