我有兩個表(MS SQL Server 2005)與現有的應用程序(沒有數據庫的變化,除了索引等允許)。適用於沒有UNIQUE約束的MS SQL Server 2005的正確外鍵?
兩個表是:
ActivityDetails (Primary table)
ActivityDetailkey (Primary key)
SubActivities (Child table)
ActivityDetailKey (Refers to ActivityDetails)
現在,還有爲ActivityDetailKey
上SubActivities
沒有約束上。基本上,對於每個ActivityDetail
行,可以有許多行,並且沒有任何東西阻止用戶刪除行並將SubActivities
孤立起來。
應用程序中應該有一些「軟鎖」,它可以防止這種情況發生,但它不起作用,我也希望在數據庫層中提供一些更好的完整性。
但我似乎無法添加外鍵,因爲SubActivities
的ActivityDetailKey
列不是唯一的。
如果有孩子在場,我該如何防止人們刪除ActivityDetails
行?
感謝
編輯
我的道歉的複雜性。 SubActivities
表實際上被命名爲TEDetailSubActivities
。我在問題中改變了它,以便閱讀更容易。
但無論如何,這裏是兩個表的完整模式的要點。
https://gist.github.com/840479
我感謝所有幫助。
我試過這兩種方法,我得到:「表SubActivities中的列不匹配現有的主鍵或UNIQUE約束。」多謝你們。 – cbmeeks 2011-02-23 13:44:39
請問ActivityDetails的* exact *模式是什麼? – gbn 2011-02-23 13:49:17
我無法在SQL Server 2005中重現您的錯誤消息 - 如果ActivityDetails中沒有PK,或者它是不同的PK,我會收到消息:「在引用表'ActivityDetails'中沒有匹配的主鍵或候選鍵。 ..「 – 2011-02-23 13:56:45