0

我正在编写一个 ContentProvider 来处理数据库。在这个数据库中,我有一个“trip”表和一个“day”表。行程表中的每条记录与天表中的多条记录相关联,即每次行程跨越多天,但任何一天记录只能属于一次行程。如果行程被删除,与之相关的所有日期也必须删除。

我的问题是,删除时从 ContentProvider 处理此表关系的标准或普遍接受的方法是什么?当我的 delete 方法获取 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;
    }
}
4

1 回答 1

1

当我的 delete 方法获取 URI 以删除特定行程时,它是否应该也删除相关的日期,还是应该只删除行程并要求使用 ContentProvider 的程序也执行删除日期的必要逻辑?

我会投票给前者,也许是使用SQLite中FOREIGN KEY关系而不是自己手动完成。由于日记录在行程之外没有生命,删除行程应该删除那些依赖记录。

于 2012-10-21T22:18:29.860 回答