2012-08-06 58 views
0

我試着這樣做:如何設計使得刪除和級聯更新這些源碼錶

Recipe表RecipeID(主鍵與外語密鑰)和RecipeName中(唯一的)。
Ingredient表與IngredientID(Primay和外鍵)和IngredientName(唯一)。 RecipeDetail表與配方ID,IngredientID和IngredientNme。

  • 如果用戶從成分表中刪除成分,則必須刪除具有該成分標識的RecipeDetail中的所有記錄。
  • 如果用戶從配方表中刪除配方,則必須刪除RecipeDetail中帶有此配方ID的所有記錄。

任何線索?謝謝

+0

你必須標記你正在執行你的程序的平臺。是Android還是JAVA? – 2012-08-06 11:00:44

+0

@NilayOnAndroid:該平臺不應該與這個問題相關,這可以使用約束來解決。 – 2012-08-06 11:26:05

+0

@PeterLang:_Depends_目標Android版本。在Android 2.2以前的任何事情中,必須使用觸發器或代碼來實現外鍵。 – Jens 2012-08-06 13:40:04

回答

0

Documentation解釋瞭如何在表格之間創建約束。要強制刪除孤立記錄,請使用ON DELETE CASCADE

還要確保,外鍵支持is enabled.


您創建腳本可能看起來像這樣

CREATE TABLE RecipeDetail(
    RecipeID  INTEGER REFERENCES Recipe(RecipeID) ON DELETE CASCADE, 
    IngredientID INTEGER REFERENCES Ingredient(IngredientID) ON DELETE CASCADE, 
    PRIMARY KEY (RecipeID, IngredientID) 
); 

主鍵確保沒有成分被分配到一個配方的兩倍。 IngredientName不應該存儲在交集表中,這會導致冗餘數據。

+0

我想我試過這個,如果我從配方表中刪除配方ID,是的,與配方ID相關的RecipeDetail行將被刪除。但是,如果我從成分表中刪除了IngredientID,則只有RecipeDetail表中具有IngridientID的行將被刪除,而不是整個ROWS。 – SimonOngsk 2012-08-06 13:15:02

+0

條件應爲:如果成分表中的IngridientID或配方表中的配方ID被刪除,則必須刪除與配料ID和配方ID相關的配方詳細信息表中的所有行。 – SimonOngsk 2012-08-06 13:17:46