0

我编辑了问题以使其更易于理解:

我有一个小问题,我不知道如何处理它。

假设我得到了一个包含以下属性和值的表,我想将其转换为第三个 NF。此表由机器自动创建:

KeyID | Action | Class | Method | StoreNr. | Country

1 | Action1 | Class1 | Method1 | 123 | GB

1 | Action2 | Class2 | Method2 | 123 | GB 

2 | Action5 | Class5 | Method5 | 335 | NULL

2 | Action8 | Class8 | Method8 | 335 | NULL

3 | Action2 | Class2 | Method2 | NULL| NL

3 | Action5 | Class5 | Method5 | NULL| NL

4 | Action4 | Class4 | Method4 | NULL| NULL

4 | Action1 | Class1 | Method1 | NULL| NULL

如您所见,KeyID、Action、Class 和 Method 属性不能为 NULL。StoreNr 和 Country 可以为 NULL。

依赖项如下:

Method -> Action
Action -> Class
StoreNr -> Country

我的问题是 KeyID。这是一个随机创建的数字,仅用于跟踪用户操作。不会有 KeyID,不可能说出 User4 在他的会话中使用了什么样的操作。

将表格放入第三个 NF 时,我不完全知道如何处理这个问题。

我希望这让我的需求更清楚:)

问候托马斯

4

2 回答 2

1

您声明的一组依赖项

Method -> Action
Action -> Class
StoreNr -> Country

并且您的样本数据表明至少有 6 个关系,如下所示。根据您对示例数据中空值的预期,这可能比您制作的要简单。Null 不需要是任何正确陈述的业务需求或 FD 的一部分——它们只是您创建的实现的技术特征。

R1 {Method,Action} KEY {Method}
R2 {Action,Class} KEY {Action}
R3 {StoreNr,Country} KEY {StoreNr}
R4 {Method,KeyId} KEY {Method,KeyId}
R5 {Method,KeyId,Country} KEY {Method,KeyId}
R6 {Method,KeyId,StoreNr} KEY {Method,KeyId}
于 2013-08-26T14:32:11.740 回答
0

第三范式本质上意味着数据应该存储在其自然级别。因此,如果您有一张员工表,您应该包括该员工的工资和他们所属的部门,但不包括该部门的平均工资,因为这是部门“级别”信息。

Action 和 Class 是 Method 的依赖项。零售商没有依赖关系。整个数据集依赖于 KeyID。

如果 Action 和 Class 依赖于 Method,您需要一个在 Method 上唯一的表。您说您的问题是 KeyID,但这似乎需要 Method 表中的外键。我不知道您是否会在此级别存储任何其他数据。从您的样本数据来看,零售商似乎是 Action 和 Class 的一部分;它不能完全独立,或者在同一个数据集中没有业务。

假设以上是正确的,您需要如下表格:

Keys
    KeyID - PK
    ????

Methods
    MethodID - PK
    Class
    Action
    KeyID - FK to Keys

Retailers
    RetailerNR - PK
    ???

这可能有点不正确,因为您的问题有点混乱,但您最了解自己的数据;以自然的方式存储数据,您不能不将其放入 3NF。

于 2013-08-26T11:47:50.733 回答