【问题标题】:Database Design for Specification Report规范报告的数据库设计
【发布时间】:2011-04-30 01:22:36
【问题描述】:

我们的团队希望将我们的规范数据存储在数据库中。但是,我们在数据库设计方面需要一些帮助。

小组决定制定一个八页的规范,其中至少有一百个单一值的“空白”。几组值以表格格式显示。如果值为空白,则不适用于给定产品。每个字段都有一个特定的数据类型。具有以下数据类型的字段均表示:整数、小数、查找列表、文本、日期和布尔值。

数据库还应跟踪以前的修订。

从一般的角度来看,我应该如何设计我的数据库?

选项 1:一张或多张一对一表格

  • 一个以“ID”和“Rev”为主键的大表。
  • 活动修订为具有最新“批准”日期的修订。
  • 如果字段数超过 DBMS 限制,请将表拆分为多个“一对一”字段,每个字段都以“ID”和“Rev”作为主键。

选项 2:实体值

  • 主表(ID,Rev)
  • 对于每种数据类型:
    • <data_type>_category 表描述该数据类型的每个字段
    • <data_type>_value 表(ID、Rev、类别、值),用于每个值的实例

选项?:你有什么想法......

注意:如果适用,我计划在整个项目(表单、表格、查询和报告)中使用 MS-Access。我们还有 SQL Server 和 MSDN 订阅,因此如果您强烈建议,这也是一个选项。

编辑:

  • 这将是一个内部数据库。
  • 我们有大约 150 个规范,我预计每个规范每年都会有一个新的修订。
  • 我很可能会在出现问题时维护此数据库。
  • 大约 5 人应该能够创建和更新规范和修订。
  • 大约有 25 名员工将从该数据库中检索数据(打印报告、查找规范等)

EDIT2:(对 HansUp 的澄清)

  • 我将重新考虑使用查找字段并考虑其他选项(创建另一个表、文本值等)
  • “每个字段都将具有特定的数据类型”,我的意思是每个字段(或“空白”)都将具有相应的数据类型。例如,MAX_CHAMBER_PSI 始终为整数值,PERFORM_TEMPERATURE_TEST 始终为 Yes/No,REVISION_REASON 始终为字符串。
  • 用户数量只是一个近似值。大约 5 个用户将拥有创建/更新权限,另外大约 25 个用户将只能读取数据。在 form_load 上,我只是打算根据登录的用户隐藏控件和更新属性。

EDIT3:总结:

我们设计了一份规格报告,其中包含大约 100 个字段,所有这些字段都依赖于 SpecID 和 Rev 来定义我们产品各种属性的可接受范围。

目前,规格是手写在报告上并存储在文件柜中。此外,每个规格的最新版本的副本都在每个测试台的活页夹中提供。

我应该如何对具有大约一百个属性的主键进行建模,这超出了 Microsoft Access 表中列的限制?

【问题讨论】:

  • thuis 本身似乎不是一个编程问题。你没有提到读/写比率或数据量......谁是“组......”?
  • @Steven:您基本上是在要求我们设计您的生产关键数据库,没有所有要求、使用知识、硬件等。我会发表评论,Access,如果编程不正确将不会适用于超过 4-5 个用户,如果您有大量数据,可能无法很好地扩展。
  • @Mitch:我只是根据所提供的信息寻找正确方向的指针......以及任何澄清......我可以去哪里寻求帮助?
  • 这是一个开发人员始终在场的内部应用程序,还是您打算将其分发给另一家公司?
  • 查看主要帖子编辑:内部,开发人员将出席

标签: sql-server database database-design ms-access ms-access-2007


【解决方案1】:

我会推荐实体值方法,根据我尝试以“简单”方式做这种事情的经验(设计平面数据结构很容易,但处理数据却不那么容易)。

看看Duane Hookum's At Your Survey database template。我自己没用过,但看过详细的讨论,他好像是用这种方法的。

【讨论】:

    【解决方案2】:

    我的建议是选择您的选项#1。 #2 将会复杂一个数量级,对于您的情况可能没有必要。如果您让每个用户定义自己的字段,#2 可能是合理的,但我没有从您的描述中得到这一点。

    您的规范只是一个包含 100 个字段的实体。将其建模为 100 个“字段对象”的“容器”太过分了。

    【讨论】:

    • 如果调查发生变化,那么您必须在使用选项#1 时更改表结构。但是,使用选项 #2,您只需更改存储在描述每条记录含义的表中的数据。相信我,我去过那里并做到了——我实现了“简单”的方式(#1),因为我认为结构不会有很多变化,但在应用程序上线之前,它已经完全重新设计以反映数据结构的变化(因为它依赖于外部来源,即 UNOS)。然后我希望我用方法 #2 来完成它,因为这将是一件微不足道的事情。