如何决定是否有外键

How to decide to have a foreign key or not

我有一个父级 table,其中包含 demographicsconsent 数据。

父table如下所示

Person_id, Age, gender, Name,   DOB,     Consent_agreed, Agreed_share_phone_number, agreed_share_email  
   1       21     M      FM , 10/1/90       N                     N                     N
   2       23     F      MF , 11/1/92       Y                     Y                     Y

我打算像下面这样存储数据

DEMO Table

Person_id,    Age,     gender,     Name,       DOB    
     111       21       M           FM ,     10/1/90       
     222       23       F           MF ,     11/1/92  

CONSENT Table

Consent_Id    Person_id    Consent_agreed    Phone_number         email
    1             111             N              N                 N
    2             222             Y              Y                 Y

我已经创建了一个单独的 table 同意,因为一个人可能会随着时间的推移更新他的同意并且可能有多个记录。

我这样规范化是否正确?

我应该如何决定是否在DEMO table中提供consent_id

DEMO table 列是否应如下所示,consent_id 表示最新的同意状态或同意状态不应包含在演示中 table

Person_id,    Age,     gender,     Name,       DOB, consent_id   

“一个人可能会随着时间的推移更新他的同意,并且可能有多个记录。”一个人的多个同意行绝对是按照您的方式拆分表格的原因。

如果一个人的有效同意始终是 consent 中的最新行(demographics 行),则没有理由将 consent_id 存储在 demographics 中。

我觉得;

演示table已经设计正确,您不应该再次编辑。但与您的使用相关的同意 table 的设计可能会更改。如果要查看所有同意数据,所有数据都可以在 table 内。除非你想看到所有的同意数据,否则你可以在同意中保存最新的数据table。旧的同意数据可能会保存在同意历史记录中 table。这样,您可以更快地访问最新数据。

以上回答完全正确。但是如果我是开发者,我会这样提问:

  1. 正如你所说,随着时间的推移可能会有同意的数量,记录它的时间戳列在哪里?我建议您添加该列。

  2. 是否必须始终显示最新的同意状态?如果是,您亲自获得最新同意状态的想法 table 很好。如果没有,我建议您有一个观点,将个人和同意结合起来,并在需要时显示最新的同意。这样,您将节省数据,这意味着没有冗余的同意状态。

希望我给了你一个正确的答案。

此致, 柴坦尼亚