0

私は3nfデータベースを持っています。その中には、依存関係のより大きなチェーンの一部である一連の2つのテーブルがあります。これらの2つのテーブル(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を介して表Bからの情報とともに新しいFooBarを保持します。

私の問題はこれです。場合によっては、FooBarが作成されていなくても(基本的にはインポートとして)システムに入ることができる必要があります。ただし、設計が不十分なため、(この例では)テーブルAの外部キーが有効であり、参照整合性を壊さないことを保証するために、テーブルBに相関エントリがないとこれは不可能です。

私が考えていたアプローチは、AとBの間に別のテーブルを配置することでした。

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

その理由は、表Bの1つのエントリから複数のFooBarを作成できるためです。つまり、この変更により、次の結果になる可能性があります。

Table AB

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

A)テーブルBの外部レコードを満たす必要なしにレコードをテーブルAに追加できるように、この依存関係を削除するために使用する必要がある別のアプローチはありますか?

B)変更を加えると、クエリが遅くなることが示唆されていますか?

4

1 に答える 1

4

A.BIdを含むことができるようにし、 AのNULL場合はそれに設定します。は外部キーに参加しません。B-lessNULL

于 2012-06-26T19:47:03.367 に答える