设计正确的 table 结构
Designing a correct table structure
我们正在尝试保存特定外国求职者的家族史。以下是我们必须保存的详细信息。
Familiy Member: Father|Mother|1st Brother| 2nd Brother| 1st Sister| etc etc
Health Status: Alive|Deceased
Health Condition (Negative/Positive): Arthritis |Asthma |COPD |Diabetes etc etc
Health Condition (Comment): Arthritis |Asthma |COPD |Diabetes etc etc
Overall Comment
下面是它的UI,方便大家理解。
现在我们的问题是创建一个数据库 table 来存储这些信息。以下是需要考虑的事项。
- 如果求职者愿意,可以提供任意数量的家庭成员资料。
- "General Data" 下有数百个项目。所以我们不能在 table 中为其中的每个项目创建列。
- "Overall History Comment"是对整个家族历史的评论,与特定成员无关。
我们做的table设计如下
下面是 table 的一些示例输入。
家族史
a) 1,1,1st Brother,Alive, Asthma, Not serious
b) 2,1,1st Brother,Alive, Cancer, Lung Cancer
c) 3,2,2nd Sister,Alive, Asthma,serious
d) 4,2,2nd Sister,Alive, Diabetes,serious
总体评价
a) 1,1,1,Overall Condition Normal
b) 2,3,2,NULL
然而,由于以下几点,我们认为这种设计很糟糕。
- 查看 Family History 输入的 a) 和 b)。求职者的第一个兄弟有两种健康状况。要输入此内容,将插入 2 行并重复关于他的所有详细信息,除了不同的健康状况。
你能告诉我如何让这个设计更好吗?
我的第一个想法是:为什么要记录这个数据?到底有什么好处呢?我无法想象它的用途。但是,答案将有助于设计。
二姐或爸爸有没有关节炎重要吗?如果不是,那为什么要区分两者呢?您可以不使用家庭成员类型。 (如果您愿意,请使用文本字段,在其中键入“2nd sis”、'mom'、'father',随便什么。)
您是否会对此进行报告(例如,我们 20% 的申请人告诉我们他们的家人患有癌症)?还是您总是会简单地查找一位申请人并查看他们的家庭条目?如果是后者,您可以创建一个文本列,您只需在其中输入所有成员及其健康状况(或让您的程序写入此内容)。
还有一点:为什么OverallComment是一个单独的table?你需要这个来实现国际化吗?或者用于数据库范围的文本搜索?如果不是,请将其设为相关 table 中的一列。
applicant ( applicant_id , name , comment )
如果您需要用于查询和报告的关系模型,请为家庭成员准备一个table:
family_member ( family_member_id , applicant_id , family_member_type, alive, comment )
另一个 table 每个成员的几个疾病条目:
family_member_desease ( family_member_id , desease_id , comment )
也许你应该添加日期。例如:父亲什么时候报告还活着?
我们正在尝试保存特定外国求职者的家族史。以下是我们必须保存的详细信息。
Familiy Member: Father|Mother|1st Brother| 2nd Brother| 1st Sister| etc etc
Health Status: Alive|Deceased
Health Condition (Negative/Positive): Arthritis |Asthma |COPD |Diabetes etc etc
Health Condition (Comment): Arthritis |Asthma |COPD |Diabetes etc etc
Overall Comment
下面是它的UI,方便大家理解。
现在我们的问题是创建一个数据库 table 来存储这些信息。以下是需要考虑的事项。
- 如果求职者愿意,可以提供任意数量的家庭成员资料。
- "General Data" 下有数百个项目。所以我们不能在 table 中为其中的每个项目创建列。
- "Overall History Comment"是对整个家族历史的评论,与特定成员无关。
我们做的table设计如下
下面是 table 的一些示例输入。
家族史
a) 1,1,1st Brother,Alive, Asthma, Not serious
b) 2,1,1st Brother,Alive, Cancer, Lung Cancer
c) 3,2,2nd Sister,Alive, Asthma,serious
d) 4,2,2nd Sister,Alive, Diabetes,serious
总体评价
a) 1,1,1,Overall Condition Normal
b) 2,3,2,NULL
然而,由于以下几点,我们认为这种设计很糟糕。
- 查看 Family History 输入的 a) 和 b)。求职者的第一个兄弟有两种健康状况。要输入此内容,将插入 2 行并重复关于他的所有详细信息,除了不同的健康状况。
你能告诉我如何让这个设计更好吗?
我的第一个想法是:为什么要记录这个数据?到底有什么好处呢?我无法想象它的用途。但是,答案将有助于设计。
二姐或爸爸有没有关节炎重要吗?如果不是,那为什么要区分两者呢?您可以不使用家庭成员类型。 (如果您愿意,请使用文本字段,在其中键入“2nd sis”、'mom'、'father',随便什么。)
您是否会对此进行报告(例如,我们 20% 的申请人告诉我们他们的家人患有癌症)?还是您总是会简单地查找一位申请人并查看他们的家庭条目?如果是后者,您可以创建一个文本列,您只需在其中输入所有成员及其健康状况(或让您的程序写入此内容)。
还有一点:为什么OverallComment是一个单独的table?你需要这个来实现国际化吗?或者用于数据库范围的文本搜索?如果不是,请将其设为相关 table 中的一列。
applicant ( applicant_id , name , comment )
如果您需要用于查询和报告的关系模型,请为家庭成员准备一个table:
family_member ( family_member_id , applicant_id , family_member_type, alive, comment )
另一个 table 每个成员的几个疾病条目:
family_member_desease ( family_member_id , desease_id , comment )
也许你应该添加日期。例如:父亲什么时候报告还活着?