2012-08-06 2 views
0

삭제 및 업데이트 캐스케이드 이러한 SQLite는 테이블 설계 방법 : RecipeID (기본 키 및 Foreigh 키) 및 RecipeName (독특한)와나는이하려고 노력

Recipe 테이블을.
Ingredient IngredientID (Primay 및 Foreign Key) 및 IngredientName (Unique) 테이블. RecipeDetail RecipeID, IngredientID 및 IngredientNme이있는 테이블.

  • 사용자가 성분 표에서 성분을 삭제하면,이 성분을 가진 RecipeDetail의 모든 기록을 삭제해야합니다.
  • 사용자가 Recipe Table에서 Recipe를 삭제하면이 RecipeId가있는 RecipeDetail의 모든 레코드를 삭제해야합니다.

단서가 있습니까? 감사합니다.

+0

U는 프로그램을 구현하는 플랫폼에 태그를 지정해야합니다. Android 또는 JAVA입니까? –

+0

@NilayOnAndroid : 플랫폼이이 질문과 관련이 없어야합니다. 제약 조건을 사용하여 해결할 수 있습니다. –

+0

@PeterLang : _Depends_ 대상 Android 버전. 안드로이드 2.2 이전의 모든 것에서는 외래 키가 트리거 나 코드를 사용하여 구현되어야했습니다. – Jens

답변

0

Documentation은 테이블간에 구속을 만드는 방법을 설명합니다. 고아 레코드를 강제로 삭제하려면 ON DELETE CASCADE을 사용하십시오.

또한 생성 스크립트는 기본 키가없는 성분을 두 번 조리법에 지정되지 않았 음을 확인한다이

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

처럼 보일 수있는 외래 키 지원 is enabled.


, 확인하십시오. IngredientName은 교차 테이블에 저장되어서는 안되며 중복 된 데이터가됩니다.

+0

내가 이것을 시도했다고 생각합니다. RecipeID에서 RecipeID를 삭제하면 Yes, RecipeID와 관련된 RecipeDetail 행이 삭제됩니다. 그러나 성분 표에서 IngredientID를 삭제 한 경우, RecipeDetail Table의 IngridientID가있는 행만 삭제되며 전체 행은 삭제되지 않습니다. – SimonOngsk

+0

IngridientID가 Ingredient 테이블에 있거나 RecipeID가 Recipe Table에서 삭제 된 경우, IngredientID 및 RecipeId와 관련된 RecipeDetails 테이블의 모든 행이 삭제되어야합니다. – SimonOngsk

관련 문제