0

我正在处理时间表应用程序并且对规范化有疑问。

我在选项 I 中链接了三个表,而在选项 II 中没有 Group 和 SubGroup 表,只有一个 Activity 表。

我想知道根据以下布局哪个选项更好。

在此处输入图像描述

在此处输入图像描述

添加 - 新选项

在此处输入图像描述

4

2 回答 2

2

我会选择一张GROUP桌子和一张ACTIVITY桌子的解决方案:

GROUP_ID (PK)   PARENT_GROUP_ID (FK)   CODE          NAME
--------------- ---------------------- ------------- ------------
1               (null)                 4             IT ACTIVITIES
2               (null)                 5             ADMINISTRATION
3               (null)                 6             FINANCE
4               (null)                 7             HR
5               1                      4.1           IT ADMIN
6               1                      4.2           IT NETWORK
7               2                      5.1           MEETING


ACTIVITY_ID (PK)   GROUP_ID (FK)  CODE     NAME
------------------ -------------- -------- -----------
1                  5              4.1.1    IT PROC
2                  5              4.1.2    HELPDESK
3                  6              4.2.1    TECHNICAL SUPPORT
(etc)

每个表都将使用一个整数代理键(运行号)作为主键,因此如果您必须更改组或活动的代码,则不会破坏参照完整性。列上的外键PARENT_GROUP_ID指回相同的表和列GROUP_ID

如果有必要,使用这样的设置可以相对容易地在组层次结构中添加更多级别(并且经理总是想要更详细的报告:-))。我说相对容易,因为您可能需要更新很多组和活动代码。但是您不必更改(例如)所有引用特定活动的时间表,因为它们将引用整数代理键。

引入兄弟节点也是如此。如果您(例如)需要在 4.2 和 4.3 之间插入一个子组,这不会太困难。只需将当前4.3 组的代码更新为 4.4,然后使用代码 4.3 插入新组。

此外,如果需要的话,这使得可以在组树中的任何位置进行活动。

于 2012-07-03T18:50:25.147 回答
1

当然,让子组引用该组会更好吗?那么活动只是指子组?

于 2012-07-03T17:20:39.997 回答