我正处于开发数据库设计的初步阶段。
这是我的困境:我目前已经概述了大约 150 多个需要在数据库中输入的字段,但是我很难决定如何将这些字段分解为链接在一起的有效表,这遵循常规的规范化规则。
只是给你一个我收集的关于一个士兵的信息片段:
- 个人信息(姓名、团号、宗教、出生地、近亲等)
- 家庭成员(父母、子女、兄弟姐妹)
- 教育历史(离开学校时的年龄、达到的最高年级、学院/大学、行业/学徒、口语/书面语言等)
- 职业经历(以前的工作经历、雇主名称、具体职业、出院后保证的工作、农业经验等)
- 病史(年龄、眼睛/头发颜色、身高、体重、肤色、疤痕、视力、听力等)
- 体格检查(骨折史、以前的头部受伤-脊髓问题-破裂-肺结核-哮喘、血压、许多其他情况等)
- 团历史(入伍日期、入伍时的团、加入的其他团、最高军衔等)
- 士兵的位置(士兵从出生、入伍、训练、战场、死亡到过的所有重要位置的列表)
- 埋葬信息(死亡日期、死亡地点、墓地、墓地等)
显然,需要收集关于单个士兵的大量信息。我的问题是试图决定如何以一种可管理且有效的方法拆分表,以及需要为每个表列出的主键/外键。
- 认为会有一张巨大的桌子,每排都是士兵似乎是不合逻辑的。
- 从逻辑上讲,也许我应该将数据库分解为上面列出的表,但是我不知道主键使用什么,因为每一行的战士ID 大致相同——然后将表连接在一起(即对我来说似乎不对,因为它与#1 不一样吗?)
- 将数据库分解为相互指向的非常简单的表(即每个表有几列)。示例:Language_Table,其中列出了所有可能说/写的语言,每种语言都有一个唯一的 id。这似乎是最有意义的,但会创建大量表。
该计划还将在 Azure 上托管数据库,最终将馈入 Windows Phone 应用程序。