0

我创建了一个数据库来存储我公司所做的设计工作的信息。主表目前有很多 Null 字段,因为有很多“可选”字段......据我了解,这是规范化的主要候选者!

我的问题更多来自对结构的理解。我会尽力解释我的问题:

在主表中,有条目(我的 PK)和一些分组选项(AY/N 和备忘录)。该文本是可选的,但仅当相关的 Y/N 设置为“是”时。一个简单的例子如下(在 Excel 中做了一个快速模型):

截图1

请记住,除了这些之外,还有更多的选项(以及更多的空值)。我想将这些规范化为 2 个新表,但结构超出了我的技能水平。理论上它看起来像这样:

截图2

这将分离出 Y/N 和文本,通过原始选项编号将两者联系起来,并摆脱我所有的空值。

不过,在结构上,我不知道如何设计一切。我想我在某个地方需要一个连接表,但是“订单和产品”的标准教程示例并不完全适合我正在尝试做的事情(或者至少,我看不到它)

另外一个问题,如果相应的“OptionA”中存在“是”,我只需要接受“OptionB”的记录。我可以使用原始表中的验证规则进行设置,但我不确定在拆分字段时是否可以使用相同的方法。

我也不知道如何为后两个表设置我的键 - “条目”和“选项”都需要能够重复,但我需要停止这两个字段的唯一组合的重复(应该只有一条记录带有“条目 1|选项 1”)

那是冗长的,我希望它是有道理的......我非常乐意提供任何进一步的澄清。

4

1 回答 1

0

你自己已经掌握了大部分的方法。假设选项都是独立的(即,只有当另一个选项已设置时,一个选项才变得可设置),此外,选项的状态是“是”或“否”而不是潜在的“未知”(与“否”不同') 相反,您可以这样做:

Entries桌子

FIELD NAME      DATA TYPE   ATTRIBUTES
EntryID         AutoNumber  PK; required
EntryName       Text        Unique; required

Options桌子

FIELD NAME      DATA TYPE   ATTRIBUTES
OptionID        AutoNumber  PK; required
OptionName      Text        Unique; required

EntryOptions桌子

FIELD NAME      DATA TYPE   ATTRIBUTES
EntryOptionID   AutoNumber  PK; required
EntryID         Number      FK to Entries.EntryID: required
OptionID        Number      FK to Options.OptionID; required

Unique index combining EntryID and OptionID

EntryOptionText桌子

FIELD NAME      DATA TYPE   ATTRIBUTES
EntryOptionID   Number      PK; FK to EntryOptions.EntryOptionID; required
OptionText  Text            Required

我不确定您的“选项 1”、“选项 2”等是否只是标记,但无论哪种方式,设置一个“显示名称”字段是明智的,因为自动编号字段看起来只是一个计数器(一旦您开始删除中间的记录,它就会变得不连续)。

外键

您可能很清楚,这些是使用向导或在 Access 的“关系”窗口中设置的:

  • Entries将有一个一对多的关系EntryOptions
  • Options将有一个一对多的关系EntryOptions
  • EntryOptions将具有一对一的关系EntryOptionsText

我个人觉得EntryOptionsText有点矫枉过正 - 我只是OptionsTextEntryOptions.

唯一索引

在每个显示名称字段上创建唯一索引的理由很明显。关于我建议反对的一个EntryOptions,即同时涵盖EntryIDand OptionID,这将是您的“额外扭结”的解决方案,防止多个记录具有相同的EntryID/OptionID组合。

设置单字段索引很简单,因为在设计表格时您面前有“索引”字段属性(将其设置为“是(无重复)”)。对于涵盖两个字段的索引,请转到“设计”功能区选项卡,选择“显示/隐藏”>“索引”,然后显式创建索引(请参阅https://support.office.com/en-gb/article/Create-and-use-an -index-to-improve-performance-0a8e2aa6-735c-4c3a-9dda-38c6c4f1a0ce)。

于 2015-01-25T11:43:22.603 回答