我有一个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
这些表部分作为一个例子,请参阅下面的一个explination:
表C持有如何使FooBars信息。当制作FooBar时,表B记录了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
的原因是,多个FooBars可以从一个条目表B中提出的,这意味着这种变化可能导致的另一个表在:
Table AB
ABId BId AId
1 2 6
2 2 7
3 2 8
4 3 9
5 3 10
A)是否有不同的方法我应该使用删除,这样的记录可以被添加到表A这种依赖关系,而不需要满足表B中的外国唱片?
B)是否提示修改会降低查询速度?
这是我想采取的方法。但是,这需要逻辑来确保查询不是针对空密钥进行的。另外,没有空外键是否违反了参照完整性? –
查询可以针对NULL进行,当然,在你期望的任何可能情况下,任何条件= NULL(哪个结果将会是...... NULL)?不,它没有违反它,它是_helps_处理像你这样的实例的工具。 – Wrikken
尝试从外键为空的包含记录中访问数据将导致异常 - 所以在这种情况下。而且,引用完整性要求所有外键都有一个**有效的**引用。 –