我正在编写一个ContentProvider来处理数据库。在这个数据库中,我有一个“旅行”表和一个“日”表。行程表中的每个记录与日表中的多个记录相关联,即每个行程跨越多天,但任何一天记录只能属于一次行程。如果旅行被删除,那么与之相关的所有日期也必须删除。
我的问题是,删除时从ContentProvider处理此表关系的标准或普遍接受的方法是什么?当我的删除方法获取一个删除特定行程的URI时,是否还要删除相关的日期,还是应该删除行程并要求使用ContentProvider的程序执行删除日期的必要逻辑?
一次删除所有内容,来自应用程序的一个调用,其中包含要删除的行程ID:
@Override
public int delete( Uri uri, String selection, String[] selectionArgs )
{
SQLiteDatabase db;
int count;
db = _dbHelper.getWritableDatabase();
switch( uriMatcher.match( uri ) )
{
case TRIP_ID:
count = db.delete( TRIP_TABLE, KEY_TRIP_ID + "=?", new String[]{ uri.getLastPathSegment() } );
count += db.delete( DAY_TABLE, KEY_TRIP_ID + "=?", new String[]{ uri.getLastPathSegment() } );
return count;
}
}
或者只删除所要求的内容,来自应用程序的多次来电以及所需的天数:
@Override
public int delete( Uri uri, String selection, String[] selectionArgs )
{
SQLiteDatabase db;
int count;
db = _dbHelper.getWritableDatabase();
switch( uriMatcher.match( uri ) )
{
case TRIP_ID:
count = db.delete( TRIP_TABLE, KEY_TRIP_ID + "=?", new String[]{ uri.getLastPathSegment() } );
return count;
case Day_ID:
count = db.delete( DAY_TABLE, KEY_DAY_ID + "=?", new String[]{ uri.getLastPathSegment() } );
return count;
}
}
答案 0 :(得分:1)
当我的删除方法获取一个删除特定行程的URI时,是否还要删除相关的日期,还是应该删除行程并要求使用ContentProvider的程序执行删除日期的必要逻辑?
我会投票给前者,也许是使用a FOREIGN KEY
relationship within SQLite而不是亲自手动完成。由于白天记录在旅行之外没有生命,删除旅行应该删除那些依赖记录。