访问数据库设计 - 规范化两个单独的(和相关的)字段

时间:2015-01-23 22:55:24

标签: database ms-access primary-key normalization junction-table

我已经创建了一个数据库来存储我公司设计工作的信息。主表当前有很多Null字段,因为有很多"可选"领域....正常化的主要候选人,据我理解!

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

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

Screenshot1

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

Screenshot2

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

但在结构上,我不知道如何设计一切。我想我需要一个联系表,但是#34;订单和产品的标准教程示例"并不适合我想做的事情(至少,我无法看到)

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

我也不知道如何为后两张桌子设置我的钥匙 - &#34; Entry&#34;和&#34;选项&#34;需要能够重复,但我需要停止重复这两个字段的唯一组合(只有一个记录带&#34;条目1 |选项1和#34;)< / p>

这是罗嗦的,我希望它有意义......我非常乐意提供任何进一步的澄清。

1 个答案:

答案 0 :(得分: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中的“关系”窗口设置的:

  • EntriesEntryOptions
  • 有一对多的关系
  • OptionsEntryOptions
  • 有一对多的关系
  • EntryOptionsEntryOptionsText
  • 具有一对一的关系

我个人觉得EntryOptionsText过度了 - 我只是OptionsText作为EntryOptions中的可空字段。

独特索引

在每个显示名称字段上创建唯一索引的基本原理是非常明显的。对于我建议EntryOptions建议的EntryIDOptionID,这将是您的“额外纠结”的解决方案,防止多个记录具有相同的EntryID {1}} / OptionID组合。

设置单字段索引很简单,因为在设计表时将前面的“Indexed”字段属性设置为(将其设置为“Yes(no Duplicates)”)。对于覆盖两个字段的索引,请转到“设计”功能区选项卡,选择“显示/隐藏”按钮;索引,并明确创建索引(参见https://support.office.com/en-gb/article/Create-and-use-an-index-to-improve-performance-0a8e2aa6-735c-4c3a-9dda-38c6c4f1a0ce)。