2012-10-12 66 views
4

我知道這個問題屬於數據庫理論的早期階段,但我從幾個月起就沒有遇到過這樣的問題。如果某人擁有一個數據庫,並且某些表與一些外鍵關聯在一起作爲「鏈」,並且他們想從具有一些「依賴」表的表中刪除一條記錄,那麼會出現什麼障礙?特別是,在表的數據庫:個人,檔案,偏好,篩選存在的關聯爲Person.id是外鍵ProfileProfile.idPreferenceFilter.id外鍵在Preference外鍵,以便所有的協會enter code hereOneToMany 。是否可以刪除一個人用一個簡單的查詢:帶外鍵約束的SQL刪除查詢

Delete from Person p where p.id= 34; 

如果沒有,應該怎麼看起來像查詢,以執行刪除成功? 如果應用程序中的數據庫由hibernate管理,那麼我應該對每個實體的關聯字段應用什麼約束(annotations),以便能夠用上面的簡單查詢來執行刪除操作?

+0

如果個人資料和偏好表具有抗PERSONID記錄外鍵約束,並試圖從Person表中刪除人物ID,將違反約束。您需要在級聯上刪除或從約束適用的每個表中刪除人員ID。 –

回答

1

對於SQL版本

enter image description here

看截圖。您可以使用插入更新規範規則。因爲它具有刪除和更新規則。您可以設置這些值中的任何一個。

可以通過引用主鍵或唯一鍵來創建外鍵約束。外鍵約束確保關聯表中數據的關係完整性。外鍵值可能爲NULL,表示特定記錄沒有父記錄。但是,如果存在一個值,那麼它必然會在父表中具有關聯的值。在父表上應用更新或刪除操作時,對子表中的關聯值的影響可能有不同的要求。有在SQL Server 2005和2008年四個可用選項如下:

No Action 
Cascade 
SET NULL 
SET Default 

使用這篇文章做參考。

http://www.mssqltips.com/sqlservertip/2365/sql-server-foreign-key-update-and-delete-rules/

Oracle版本

你可以用下面一個。

ALTER TABLE SAMPLE1 添加外鍵(COL1) 引用 樣品(COL2) 上刪除任何操作;

ALTER TABLE SAMPLE1 上刪除限制添加外鍵(COL1) 引用 樣品(COL2) ;

ALTER TABLE SAMPLE1 添加外鍵(COL1) 參考樣本(COL2) 上刪除級聯;

for refrance。

http://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm

+0

這個問題被標記爲'Oracle'。 – MatBailie

+0

你也把sql標籤。:)。檢查更新。 – JSJ

+0

@Jodha - SQL標籤代表語言,而不是特定的RDBMS。 –

0

答案是否定的,如果有外鍵約束,那麼你必須先刪除

葉節點表數據首先從Preference表中刪除

然後從Profile and Filter

然後刪除記錄Person table

這是您隨處應用的通用概念