我想在mysql表中存储有关求职者的以下信息。
个人信息
1)名称
2)等级
3)出生日期
4)年收入(可选)
5)收入来源(可选)
6)识别标记
家庭信息
1)父亲姓名
2)母亲姓
3)父亲的收入来源
4)母亲的收入来源
联系信息
1)地址
2)引脚代码
3)区
4)国家
5)手机号码
6)拥有手机的人的姓名(如果手机属于某人 - 其他人)
7)与拥有手机的人的关系(如果手机属于某人 - 其他)
教育资格
1)指标 - 主题,总分,获得的分数,通过年份,董事会名称,大学名称
2)中间人(可选) - 主题,总商标,获得的商标,通过年份,董事会名称,大学名称。
3)毕业(可选) - 科目,总分,获得的分数,通过年份,董事会名称,大学名称。
是/否问题 大约有10个是/否类型问题。
收到特定帖子的用户申请后。 用户应用程序将经历以下筛选过程。
1)提交申请硬拷贝的候选人名单 2)根据他们提交的信息(教育资格,年收入等)筛选候选人和候选人名单第一名 3)其他一些筛选过程,以列出候选人的最终绩效名单。
因此我需要存储以下有关申请状态的信息:
1)收到或不收到硬拷贝,如果收到,我还需要存储收到硬拷贝的日期
2)入围First Merit List是否入围。如果入围,那么我还需要将排名存储在第一个优点列表中,如果没有入围,那么我需要存储特定应用程序被拒绝的原因。
3)入围最终绩效名单还是没有入围如果入围,那么我还需要将候选人的等级存储在最终绩效列表中,如果没有入围,那么我需要存储特定申请被拒绝的原因。
用户可以拥有一套个人,联系人,家庭,教育信息。 我在单个表中看到的问题是可选字段。 能否请你给我一个更好的架构。
答案 0 :(得分:1)
不,你不应该。单个表不合适的原因有很多。
要问一些问题:
用户是否有可能拥有多个地址或电话?一个以上的人可以属于同一所大学吗?是否可能在数据库中的所有人之间多次使用某个主题?
一般来说,如果您列出了类似于您的部分,那么它们可能是单独表格的良好候选者。如果您有任何可重用的数据,则应将其分成多个表。
请考虑查看有关规范化的一些教程。
与此同时,以下是良好数据库设计的一些基本规则:
规则1:消除重复组。为每个集合创建一个单独的表 相关属性,并为每个表提供主键。
规则2:如果属性仅依赖于部分,则消除冗余数据 多值密钥的密钥,将其删除到单独的表中。
规则3:消除不依赖于密钥的列。如果属性没有 有助于对密钥的描述,将它们单独删除 表
请查看此网址以获取更多信息:http://www.dbnormalization.com/