gpt4 book ai didi

database-design - 尝试设计和实现数据库

转载 作者:行者123 更新时间:2023-12-03 06:04:21 24 4
gpt4 key购买 nike

我正处于开发数据库设计的初步阶段。

这是我的困境:我目前已经概述了大约 150 多个需要在数据库中输入的字段,但我很难决定如何将这些字段分解为链接在一起的有效表,这些表遵循常规规范化规则。

仅向您提供我收集的有关单个士兵的信息片段:

  • 个人信息(姓名、团号、宗教信仰、出生地、近亲等)
  • 家庭成员( parent 、子女、 sibling )
  • 教育经历(离校年龄、最高年级、学院/大学、行业/学徒、口语/书面语言等)
  • 职业经历(以前的工作经历、雇主名称、具体职业、退伍后有保障的工作、农业经验等)
  • 病史(年龄、眼睛/头发颜色、高度、体重、肤色、疤痕、视力、听力等)
  • 体检(骨折史、头部受伤史、脊柱问题、破裂、结核病、哮喘、血压、许多其他疾病等)
  • 军团历史(入伍日期、入伍时的军团、加入的其他军团、最高军衔等)
  • 士兵的位置(士兵从出生、入伍、训练、战场、死亡到过的所有重要地点的列表)
  • 埋葬信息(死亡日期、死亡地点、墓地、墓地等)

显然,需要收集有关单个士兵的大量信息。我的问题是尝试决定如何以一种可管理且有效的方法拆分表,以及需要为每个表列出的主/外键。

  1. 认为会有一张巨大的 table ,其中每一行都是一名士兵,这似乎不合逻辑。
  2. 从逻辑上讲,也许我应该将数据库分解为上面列出的表,但随后我不知道主键使用什么,因为每行的士兵ID大致相同 - 然后将连接表在一起(这对我来说似乎不对,因为它不是和 #1 一样吗?)
  3. 将数据库分解为相互指向的非常简单的表(即每个表几列)。示例:Language_Table 包含所有可能说/写的语言的列表,每种语言都有一个唯一的 ID。这似乎是最有意义的,但会创建大量的表。

该计划还包括在 Azure 上托管数据库,该数据库最终将输入到 Windows Phone 应用程序中。

最佳答案

你想做的是normalize士兵的信息。阅读我链接的维基百科文章是关于我可以提供的简洁解释。通过规范化数据项的关系,您可以将此信息存储在关系数据库中。

让我们从士兵表开始。通常,表名是单数且以大写字母开头。您可以将每个项目放入此表中,其中士兵一次且仅出现一次该项目。

符合此标准的一些项目包括:姓名、出生地点、出生日期、死亡日期、死亡地点、埋葬地点等。

此表可以包含您需要的任意数量的项目(列)。唯一的标准是每个项目出现一次。

那么,如果一名士兵拥有不止一种东西,会发生什么呢?

我们以家庭成员为例。 FamilyMember 表可能如下所示:

FamilyMember
------------
FamilyMemberID
SoldierID
FamilyMemberType
FamilyMemberName
...

FamilyMemberID 是 FamilyMember 表的主(集群)键。它是一个自动递增的整数或长整数,为表提供唯一的键。

SoldierID 是返回 Soldier 表的外键。

FamilyMemberType描述了家庭成员和士兵之间的关系。一些例子是 parent 、兄弟、姐妹等。通常,您会保存代码(P 代表 parent ,B 代表兄弟,S 代表姐妹)而不是文本。

其余列描述家庭成员。这些列代表家庭成员一次且仅出现一次

您可以对要保存在关系数据库中的所有数据项执行此操作。

对于每件元素,您都会问自己,士兵与该元素之间的关系是什么?

再举一个例子,让我们看看一个团。士兵和团是什么关系?一名士兵可以属于一个或多个团。

因此,您的 Regiment 表的结构与 FamilyMember 表类似。

关于database-design - 尝试设计和实现数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15641637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com