首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库的设计与实现

数据库的设计与实现
EN

Stack Overflow用户
提问于 2013-03-26 15:57:36
回答 3查看 207关注 0票数 0

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

这是我的两难处境:我目前大致概述了需要在数据库中输入的150+字段,但我很难决定如何将字段拆分到链接在一起的有效表中,这些表遵循常规的规范化规则。

只想给你一段我收集到的关于一个士兵的信息:

  • 个人信息(姓名、团号、宗教、出生地、近亲等)
  • 家庭成员(父母、子女、兄弟姐妹)
  • 教育历史(毕业时年龄、最高年级、学院/大学、行业/学徒、语言说/写等)
  • 职业历史(工作经历、雇主姓名、特定职业、离职后保证的工作、农业经验等)
  • 病史(年龄、眼睛/头发颜色、身高、体重、肤色、疤痕、视力、听力等)
  • 体格检查(骨折史,以前的头部损伤-脊柱问题-破裂-肺结核-哮喘,血压,许多其他情况等)
  • 兵团历史(征兵日期、入伍时团、其他兵团加入、最高军衔等)
  • 士兵的位置(一个士兵从出生、入伍、训练、战场到死亡的所有重要地点的清单)
  • 埋葬信息(死亡日期、死亡地点、墓地、墓地等)

显然,需要收集大量关于一个士兵的信息。我的问题是如何以一种可管理和高效的方法将表拆分,以及每个表需要列出的主键/外键。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-26 16:17:14

你想要做的是规格化给一个士兵的信息。阅读我链接到的维基百科文章是关于一个简明的解释,我可以提供。通过规范数据项的关系,可以将这些信息存储在关系数据库中。

让我们从士兵表开始。通常,表名是单数的,以大写字母开头。您将把每个项目放在这个表中,在这个表中,士兵有一个,也只有一个出现了这个项目的

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

这个表可以有您需要的多少项(列)。唯一的标准是每个项目发生一次。

那么,对一个士兵来说会发生什么呢?

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

代码语言:javascript
运行
复制
FamilyMember
------------
FamilyMemberID
SoldierID
FamilyMemberType
FamilyMemberName
...

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

SoldierID是返回士兵表的外键。

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

其余的列描述家庭成员。这些列表示家庭成员的一次,也是唯一一次发生

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

对于每一件物品,你都会问自己,士兵和这个项目之间的关系是什么?

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-03-26 16:04:59

您不想抛出太多的曲线球,但是您是否考虑过使用文档数据库,比如RavenDb?它将允许您轻松地将所有这些信息保存在一个文档中,因为所有这些信息都与单个士兵有关,因此尝试将其分割成相关的表是相当武断的。这都是与士兵有关的元数据,所以把它存储在一个士兵的记录中。

作为第一步,我将集中在设计您的领域模型,以准确地映射您希望记录的数据,如您的问题详细说明。一旦您这样做了,请考虑如何将其映射到所选的数据存储区。

票数 1
EN

Stack Overflow用户

发布于 2013-03-26 16:23:07

我可以给你个提示..。给出的评论也许对你没什么坏处,但你也可以决定创建一个真正的数据库。你的问题是信息特别涉及一个士兵..。尽管如此,如果您能够看到自给自足的信息(就像您试图从阅读规范中找到可以演化的对象时一样),您可以剪切这些信息。

在你的数据库里会有很多引用表..。我举几个例子:

一张宗教表,上面有今天所知道的所有宗教,以及从这个表格到士兵表的链接。(好消息是,在你的士兵席上,克里斯蒂安永远是基督徒,而不是基督教徒、克里斯蒂安或克里斯蒂安。)

然后你必须找到这个天井对象:例如:工作

您可以添加员工姓名、开始日期、结束日期的工作表.

或医疗档案:会诊日期,医院(顺便说一句),身高,体重,.

类似这样的东西

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15641637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档