我正在处理时间表应用程序并且对规范化有疑问。
我在选项 I 中链接了三个表,而在选项 II 中没有 Group 和 SubGroup 表,只有一个 Activity 表。
我想知道根据以下布局哪个选项更好。
添加 - 新选项
我正在处理时间表应用程序并且对规范化有疑问。
我在选项 I 中链接了三个表,而在选项 II 中没有 Group 和 SubGroup 表,只有一个 Activity 表。
我想知道根据以下布局哪个选项更好。
添加 - 新选项
我会选择一张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 插入新组。
此外,如果需要的话,这使得可以在组树中的任何位置进行活动。
当然,让子组引用该组会更好吗?那么活动只是指子组?