弱实体取决于其他两个实体之一

时间:2019-04-02 12:11:40

标签: database-design entity-relationship erd

请考虑我们以雇员为实体,而其家庭成员为弱者。我们希望有家庭成员的健康记录。因此,我们添加了另一个较弱的实体“健康记录”。 ER图如下所示:(每个实体都有一些我未指定的属性)

ER Diagram

现在一切都很好。但假设我们也要保存每位员工的健康记录。 ER图在这种情况下的情况如何。健康记录仍然是一个薄弱的实体,与雇员或家庭成员一起存在。如果我们像下面的图一样更改ER图,则它既取决于家庭成员又取决于雇员,但是其中之一(雇员或家庭成员的存在足以构成健康记录):

Wrong ER Diagram

1 个答案:

答案 0 :(得分:0)

好的,我了解您的问题,并且我为您设计了一个数据库,以按关系保存所有信息。

所以我们将需要3个表:

  1. 员工-存储有关员工的所有个人信息。
  2. 家庭成员-存储有关员工家庭成员的所有个人信息。
  3. HealthRecords -存储员工和家庭成员的所有健康记录。

员工表设计

Columns
-- ---- ----- --- ----- -------- -------- ----- ---------- -------------------
id name email age phone address1 address2 state graduation total_familymembers Etc...
-- ---- ----- --- ----- -------- -------- ----- ---------- -------------------

FamilyMembers表格设计

Columns
-- ----------- ---- ----- --- ----- --- -------------- 
id employee_id name email age phone sex marital_status Etc...
-- ----------- ---- ----- --- ----- --- -------------- 

HealthRecords表设计

Columns
-- ----------- --------- ------ ------ --- --------- ----------------- ----------
id person_type person_id height weight sex eye_color bodyfatpercentage teethcolor Etc...
-- ----------- --------- ------ ------ --- --------- ----------------- ----------

现在,您已经了解了Employees表和FamilyMembers表之间的关系,其列ID为Employees,列employee_id为FamilyMembers。

让我们进入HealthRecords表,因此基本上您将所有健康记录信息都存储在此处,但是如果是雇员的话,则在person_type列中插入“雇员”,并在person_id列中将雇员的id插入;如果是家庭成员的话,则插入“ person_type列中的“家庭成员”和person_id列中的家庭成员的ID。

现在,首先获得所有雇员,并检查 total_familymembers 列是否为0。如果它的0表示您不必在FamilyMembers表中检查其家庭成员,但是如果它大于0,那么您将从FamilyMembers表中获取所有与employee_id匹配的employee_id的行,并在查询所有运行状况之后从HealthRecords表中获取记录,对于雇员,您搜索person_type(“雇员”)和person_id(雇员的ID),对于FamilyMember,则搜索person_type(“家庭成员”)和person_id(家庭成员的ID)。

每次您为员工插入新的家庭成员记录时,请确保增加 total_familymembers 列的值,以便在该列中进行计数。

让我知道这是否对您有帮助,如果我听不懂,请原谅我,让我知道它是什么。

谢谢。