我有一個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
嘗試從外鍵爲空的包含記錄中訪問數據將導致異常 - 所以在這種情況下。而且,引用完整性要求所有外鍵都有一個**有效的**引用。 –