0

我有一个 3nf 分贝。在其中,有一系列两个表,它们是更大的依赖链的一部分。这两个表(A 和 B)在执行参照完整性方面给我带来了问题。

Table A
int AId //primary key
string Name
date Date
int BId //foreign key

Table B
int BId //primary key
string Name
string Description
int CId //foreign key

Table C
int CId
string HowTo

这些表是部分示例,请参见下面的说明:

表 C 包含有关如何制作 FooBar 的信息。制作 FooBar 时,表 B 记录了为跟踪和 QA 目的制作 FooBar 的实际方式。一旦制作了 FooBar,并且在表 B 中填写了它的制作方式数据,表 A 将通过外键 BId 保存一个新的 FooBar 以及来自表 B 的信息。

我的问题是,有时作为一个孤立的案例, FooBar 需要能够在没有被制作的情况下进入系统(基本上作为导入)。但是,由于设计不佳,如果没有(在此示例中)表 B 中的相关条目以确保表 A 中的外键有效且不破坏参照完整性,这是不可能的。

我正在考虑采用的方法是在 A 和 B 之间放置另一张桌子。

Table AB
int ABId //primary key
int BId //foreign key
int AId //foreign key

原因是可以从表 B 中的一个条目中生成多个 FooBar,这意味着此更改可能导致:

Table AB

ABId  BId  AId
1     2    6
2     2    7
3     2    8
4     3    9
5     3    10

A)我应该使用不同的方法来消除这种依赖关系,以便可以将记录添加到表 A 而无需满足表 B 中的外部记录?

B)是否建议进行更改会减慢查询速度?

4

1 回答 1

4

只需使A.BId能够包含NULL,并将其设置为B-lessA 的。NULL' 不参与外键。

于 2012-06-26T19:47:03.367 回答