工具:SQL2000/5/8,.NET 3.5,C#修復外鍵的問題與舊的數據庫
我所遇到的這兩個表的應用程序。在「代碼」的表格如下所示:
TABLE1(1 - N)TABLE2
所以表1(T1)具有一個Id:IDT1和表2(T2)具有其ID(IDT2)和一個外鍵t2.IdT1
這個1.N關係是代碼強制執行到一定程度。無論如何,DB中都沒有FK。 (設計這個的人沒有增加限制,也沒有任何類似的東西)。
問題是,我發現應用程序使用TABLE2中的IdT1(正確)在TABLE1,上存儲引用的行,但也使用零(0)作爲特殊情況。
所以我(在表2)沿着這些路線的東西:
IDt2 IdT1 OtherFields
1 1 x
2 1 x
3 5 x
4 0 x
5 3 x
6 0 x
…
如您在行4和6個的FK點看到在TABLE1不存在的行。該軟件的工作原理是因爲它有很多地方可以用IF語句或類似語句「跟蹤」這個地方。現在改變它並不是一個好主意(我不想接觸那些「有效並且我現在沒有寫」的代碼),除非這是唯一的方法。
現在我修改應用程序的其他方面,我需要數據庫有FKS(我們autogenerating代碼模板,如果FKS是不存在的,有些事情就不會發生) 。
鑑於上述情況,有沒有什麼辦法可以創建一個不檢查約束「永遠」的FK?這是否會成爲一個「問題」(考慮到該應用程序已經在FK中使用Id = 0的方式工作了5年以上)?你有什麼建議嗎?韓國社交協會。
感謝您的洞察力。我已經決定刪除FK(因爲正如你所說,它的目的已經被擊敗)並且使用代碼。魔法排是誘人的,但我寧願不採取魔法路線;) – 2010-02-08 16:04:41