设计正确的表结构

时间:2015-01-19 08:39:14

标签: mysql sql database database-design relational-database

我们正在努力保存特定外国求职者的家族历史。以下是我们要保存的详细信息。

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

以下是其用户界面,因此您可以更好地理解它。

enter image description here

现在我们在创建用于存储这些信息的数据库表时出现问题。以下是需要考虑的事项。

  1. 如果求职者喜欢,他可以提供任意数量的家庭成员的数据。
  2. “一般数据”下有数百项。因此,我们无法在表格中为每个项目创建列。
  3. “整体历史评论”是关于整个家族历史的评论,与特定成员无关。
  4. 我们制作的桌面设计如下 enter image description here

    以下是该表的一些示例输入。

    家族史

    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
    

    OverallComment

    a) 1,1,1,Overall Condition Normal
    b) 2,3,2,NULL
    

    然而,由于以下几点,我们觉得这种设计很糟糕。

    1. 查看家族历史输入的a)和b)。求职者的第一个兄弟有2个健康状况。要输入此内容,将插入2行,并重复关于他的所有详细信息,但不同的健康状况除外。
    2. 请告诉我如何更好地设计这个设计?

1 个答案:

答案 0 :(得分:1)

我的第一个想法是:为什么要记录这些数据?到底有什么好处呢?我无法想象它的用途。但是,答案将有助于设计。

第二个姐姐或父亲是否患有关节炎是否重要?如果没有,那为什么要区分这两个呢?你可以没有家庭成员类型。 (如果你愿意的话,可以使用一个文字字段来输入'第二个sis',' mom',' father',等等。)

您是否会收到相关报告(例如,20%的申请人告诉我们他们的家人患有癌症)?或者你总是只是查找一个申请人并查看他们的家庭条目?如果是后者,您可以创建一个文本列,只需键入所有成员及其健康状况(或让您的程序写入此内容)。

另一点:为什么OverallComment是一个单独的表?你需要这个国际化吗?或者对于数据库范围的文本搜索?如果没有,请将其作为相关表格中的一列。

applicant ( applicant_id , name , comment )

如果您需要查询和报告的关系模型,那么为家庭成员提供一个表:

family_member ( family_member_id , applicant_id , family_member_type, alive, comment )

每个成员的几个desease条目的另一个表:

family_member_desease ( family_member_id , desease_id , comment )

也许你应该添加日期。例如:据报道父亲什么时候还活着?