【发布时间】:2011-04-15 21:32:48
【问题描述】:
我有以下 db-schema 。
FILE、GROUP和BLOCK代表XML文件的对象结构。 FILE 是根。 GROUP 对 FILE 有 FK。 BLOCK 有一个 FK 到 GROUP,另一个 FK 到 UNIT。
UNIT 在 FILE 的上下文中对来自不同 GROUPs 的“相似”BLOCKs 进行分组。
数据库目前在 3NF 中。但我想知道哪些 UNITs 属于 FILE.id=1。为此,我必须进行一个连接所有 4 个表的查询。为了优化这个模式,我可以创建新的关系 UNIT n--FK-->1 FILE。然而,我的查询仅在优化的 db-schema 上连接了两个表。 问题来了:这个 DB(带有这个新 FK)还在 3 NF 中吗?理论怎么说?
BLOCK n--FK-->1 GROUP n--FK-->1 FILE
n
|
FK
|
1
Unit
或
+--------+
+-----| File |.....+
| +--------+ .
| .
/|\ /.\
+--------+ +--------+
| Group |--+ +--| Unit |
+--------+ | | +--------+
| |
/|\ /|\
+---------+
| Block |
+---------+
【问题讨论】:
-
你能尝试显示你的表结构而不是解释它吗?很难理解一组表格的解释。
-
@user229570,GROUP和UNIT是什么关系?目前,它们之间似乎存在多对多关系——将 FILE.ID 外键添加到 UNIT 会产生两个从 FILE 到 BLOCK 的并行层次关系。 3NF 不禁止这种并行关系,但通常会解析为一个层次关系,因为其中一个中间表通常与另一个中间表处于层次关系 - 当然,除非存在 true 它们之间的多对多关系。
-
感谢您的编辑。我想这样做,但我的等级太低了。 UNIT 表示第二个并行层次结构。我会在我的等级足够的时候添加数据的探测。可能我们甚至必须添加这个新关系(UNIT -> FILE),因为它是并行层次结构。所以这是真正的“多对多”。 UNIT的业务意义在于它在文件的上下文中对具有相同处理条件的BLOCK进行分组。所以一个 UNIT 可以有两个 BLOCK 来自不同的 GROUP,但来自同一个文件。
-
这里是数据样本。 pokazywarka.pl/px6786-2
标签: database rdbms normalization 3nf